你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

redis哨兵模式(一主两从三哨兵模式搭建)

2021-11-14 16:29:39

1.获取redis资源

下载地址:http://download.redis.io/releases/

wget http://download.redis.io/releases/redis-6.0.0.tar.gz

2.解压

  tar xzvf redis-6.0.0.tar.gz

3.安装

  cd redis-6.0.0

  make

  cd src

  make install PREFIX=/usr/local/redis

4.为了方便管理,将Redis文件中的conf配置文件和常用命令移动到统一文件中

        mkdir /usr/local/redis/etc

        将redis-6.0.0目录下的 redis.conf 移动到 /usr/local/redis/目录下的etc文件夹下

        复制3份分别:redis6380.conf(主)、redis6381.conf(从)、redis6382.conf(从)

5. redis6380.conf(主库配置)

        保护模式修改为否,允许远程连接
        protected-mode no# 

        设定密码
        requirepass "123456"

        设定主库密码与当前库密码同步,保证从库能够提升为主库
        masterauth "123456"

        打开AOF持久化支持
        appendonly yes

        redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端)。 
        daemonize yes 

6. redis6381.conf(从)、redis6382.conf(从)配置文件

        除了端口号外,其他配置和主节点配置一样

        另外从服务器,添加:replicaof 8.142.158.217 6380 或者 slaveof 8.142.158.217 6380

7. sentinel.conf(哨兵配置)

配置3个哨兵,每个哨兵的配置都是一样的(除端口号)。在Redis安装目录下有一个sentinel.conf文件,copy3份进行修改分别:sentinel26380.conf、sentinel26381.conf、sentinel26382.conf


        # 1. 绑定的地址
        bind 172.19.131.247
        # 2. 保护模式修改为否,允许远程连接
        protected-mode no
        # 3. 设定sentinel myid 每个都不一样,使用yum安装的时候,直接就生成了
        sentinel myid 04d9d3fef5508f60498ac014388571e719188527
        # 4. 设定监控地址,为对应的主redis库的内网地址
        sentinel monitor mymaster 172.16.48.129 6379 2
        # 5. 设定5秒内没有响应,说明服务器挂了,需要将配置放在sentinel monitor master 127.0.0.1 6379 1下面
        sentinel down-after-milliseconds mymaster 5000
        # 6. 设定15秒内master没有活起来,就重新选举主
        sentinel failover-timeout mymaster 15000
        # 7. 表示如果master重新选出来后,其它slave节点能同时并行从新master同步缓存的台数有多少个,
        显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。
        最保定的设置为1,只同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢。
        sentinel parallel-syncs mymaster 2
        # 8. 主数据库密码,需要将配置放在sentinel monitor master 127.0.0.1 6379 1下面
        sentinel auth-pass mymaster 123456

8. 注意启动的顺序。首先是主机的Redis服务进程,然后启动从机的服务进程,最后启动3个哨兵的服务进程。

启动redis

cd /usr/local/redis/bin 目录下(自己的安装目录下)启动redis
./redis-server /usr/local/redis/etc/redis6380.conf
./redis-server /usr/local/redis/etc/redis6381.conf
./redis-server /usr/local/redis/etc/redis6382.conf

启动sentinel

cd /usr/local/redis/bin 目录下(自己的安装目录下)启动sentinel

./redis-sentinel /usr/local/redis/etc/sentinel26380.conf
./redis-sentinel /usr/local/redis/etc/sentinel26381.conf
./redis-sentinel /usr/local/redis/etc/sentinel26382.conf

9.验证

1. 主从验证
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.43.243,port=6382,state=online,offset=178172,lag=1
slave1:ip=192.168.43.243,port=6381,state=online,offset=178172,lag=1
master_repl_offset:178315
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:178314

127.0.0.1:6381> info replication
# Replication
role:slave
master_host:192.168.43.243
master_port:6380
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:181231
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

127.0.0.1:6382> info replication
# Replication
role:slave
master_host:192.168.43.243
master_port:6380
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_repl_offset:407
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0


2.读写分离验证
127.0.0.1:6381> set k1 v1
(error) READONLY You can't write against a read only slave.

127.0.0.1:6380> set k1 v1
(error) READONLY You can't write against a read only slave.

127.0.0.1:6379> set k2 v2
OK


3.验证备份
127.0.0.1:6380> get k2
"v2"
127.0.0.1:6381> get k2
"v2"

10.springboot整合redis

        1.pom.xml

<dependencies>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
   </dependency>
   <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
   </dependency>

   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
   </dependency>
</dependencies>

2.application.yml

spring:
  redis:
    password: 123456
    timeout: 5000
    sentinel:
      master: mymaster
      nodes: 127.0.0.1:26380,127.0.0.1:26381,127.0.0.1:26382 # 哨兵的IP:Port列表
    jedis: # 或lettuce
      pool:
        max-active: 8
        max-wait: -1
        max-idle: 8
        min-idle: 0

server:
  port: 26379

3.创建RedisController

@Controller
public class RedisController {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @RequestMapping(value="/redis/save")
    public void add() {
        redisTemplate.opsForValue().set("testjq","test666");
    }

    @RequestMapping(value="/redis/get")
    public void get() {
        String testjq = redisTemplate.opsForValue().get("testjq");
        System.out.println(">>>>>>>> testjq -> "+testjq);

    }

}

11.如上10中验证正常,停止主节点,再次验证,哨兵会重新选举新的主节点,如果还能保存进去说明ok!!现在6381变成了主节点

        后台通过接口保存test22,能正常获取到了。