LINUX环境Redis Sentinel集群方案配置方法

1.测试环境

master:   127.0.0.1 6479

slave1:    127.0.0.1 6579

slave2:    127.0.0.1 6679

master-sentinel: 127.0.0.1 26479

slave1-sentinel: 127.0.0.1 26579

slave2-sentinel: 127.0.0.1 26679

2.下载安装redis,我使用的是redis-4.0.14.tar.gz; 百度云提取有效期是30天,如果提示过期,可以下方留言,我看到后会放开权限,并回复!也可自行去官网下载  

链接:https://pan.baidu.com/s/1ct7s4b5vdR_-bPncv9vqOQ
提取码:1234

3.将redis-4.0.14.tar.gz 放到指定的目录 /test_redis_sentinel,也可自行定义安放目录;

解压:redis-4.0.14.tar.gz

cd   redis-4.0.14   

配置redis : 执行命令  

make install ;也可以指定配置目录:先创建配置目录:

mkdir  /test_redis_sentinel/redis_install_file;   

make install   prefix=/test_redis_sentinel/redis_install_file

4.配置环境

cd /test_redis_sentinel

mkdir redis_cluster

mkdir redis_cluster/master_6479

mkdir redis_cluster/slave_6579

mkdir redis_cluster/slave_6679  

配置redis

----------------------------------------------------------------------
master:
cp /test_redis_sentinel/redis-4.0.14/redis.conf    /test_redis_sentinel/redis_cluster/master_6479/

cp /test_redis_sentinel/redis-4.0.14/sentinel.conf  /test_redis_sentinel/redis_cluster/master_6479/6479-sentinel.conf

vi ./redis_cluster/master_6479/redis.conf(将对应配置修改成如下)

#master redis.conf
#端口
port 6479
#授权密码,在安全的环境中可以不设置
requirepass 1234
masterauth 1234
#开启AOF
appendonly yes
slave-read-only yes
#绑定ip,最好不要用127.0.0.1,否则远程java连接时会连接失败,也不要用 0.0.0.0,否则也会远程连接失败;
bind 192.168.1.15
#是否是受保护模式protected-mode yes 改成no;否则远程连接失败;
protected-mode no

-------------------------------------------------------------
vi ./redis_cluster/master_6479/6479-sentinel.conf
#master sentinel.conf
#sentinel实例之间的通讯端口
port 26479

#<quorum>应该小于集群中slave的个数,只有当至少<quorum>个sentinel实例提交"master失效" 才会认为master为ODWON("客观"失效) .
sentinel monitor mymaster 192.168.1.15 6479 2

#授权密码,在安全的环境中可以不设置
sentinel auth-pass mymaster 1234

#master被当前sentinel实例认定为“失效”(SDOWN)的间隔时间
sentinel down-after-milliseconds mymaster 30000

#当新master产生时,同时进行“slaveof”到新master并进行同步复制的slave个数。
#在salve执行salveof与同步时,将会终止客户端请求。
#此值较大,意味着“集群”终止客户端请求的时间总和和较大。
#此值较小,意味着“集群”在故障转移期间,多个salve向客户端提供服务时仍然使用旧数据。
sentinel parallel-syncs mymaster 1

#failover过期时间,当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel将会认为此次failoer失败。
sentinel failover-timeout mymaster 900000

#是否是受保护模式protected-mode yes 改成no;否则远程连接失败;
protected-mode no

-------------------------------------------------------------------------------

配置redis-slave

slave1:

cp /test_redis_sentinel/redis-4.0.14/redis.conf       /test_redis_sentinel/redis_cluster/slave_6579/

cp /test_redis_sentinel/redis-4.0.14/sentinel.conf        /test_redis_sentinel/redis_cluster/slave_6579/6579-sentinel.conf

vi ./redis_cluster/slave_6579/redis.conf(将对应配置修改成如下)

#slave1 redis.conf

port 6579

#在有#slaveof <masterip> <masterport>配置的下面添加一行; 注意:下面192.168.1.15 6479是master得ip+端口
slaveof 192.168.1.15 6479

#其他配置和master redis.conf保持一致,如下:
#授权密码,在安全的环境中可以不设置
requirepass 1234
masterauth 1234


appendonly yes
slave-read-only yes
bind 192.168.1.15
protected-mode no

--------------------------------------------------------------------------------
vi /test_reids_sentinel/redis_cluster/slave_6579/6579-sentinel.conf
#slave1 sentinel.conf

port 26579

#注意,这里要配置主的ip+端口;注意:下面192.168.1.15 6479是master得ip+端口
sentinel monitor mymaster 192.168.1.15 6479 2

#其他配置和master的sentinel.conf 保持一致,如下:
#授权密码,在安全的环境中可以不设置
sentinel auth-pass mymaster 1234

sentinel down-after-milliseconds mymaster 30000

sentinel parallel-syncs mymaster 1

sentinel failover-timeout mymaster 900000

protected-mode no
--------------------------------------------------------------------------------------

slave2:

cp /test_redis_sentinel/redis-4.0.14/redis.conf
/test_redis_sentinel/redis_cluster/slave_6679/

cp /test_redis_sentinel/redis-4.0.14/sentinel.conf /test_redis_sentinel/redis_cluster/slave_6679/6679-sentinel.conf

vi ./redis_cluster/slave_6679/redis.conf(将对应配置修改成如下)

#slave2 redis.conf
port 6679

#在有#slaveof <masterip> <masterport>配置的下面添加一行;注意:下面192.168.1.15 6479是master得ip+端口
slaveof 192.168.1.15 6479

#其他配置和master redis.conf保持一致,如下:
#授权密码,在安全的环境中可以不设置
requirepass 1234
masterauth 1234


appendonly yes
slave-read-only yes
bind 192.168.1.15
protected-mode no
-------------------------------------------------------------------------------------------
vi /test_reids_sentinel/redis_cluster/slave_6679/6679-sentinel.conf

-------------------------------------------------------------------------------------------
#slave2 sentinel.conf
port 26679

#注意,这里要配置主的ip+端口;注意:下面192.168.1.15 6479是master得ip+端口
sentinel monitor mymaster 192.168.1.15 6479 2

#其他配置和master的sentinel.conf 保持一致,如下:

#授权密码,在安全的环境中可以不设置
sentinel auth-pass mymaster 1234

sentinel down-after-milliseconds mymaster 30000

sentinel parallel-syncs mymaster 1

sentinel failover-timeout mymaster 900000

protected-mode no

--------------------------------------------------------------------------------

#查看master:

info  Replication  

查看slave的状态:

redis-cli -h 127.0.0.1 -p 6579

 6.测试

场景1:slave宕机

关闭slave1:

shutdown

查看slave 6579 sentinel

redis-cli  -p  6579   info sentinel 

查看master的Replication信息:

此时只存在一个slave。

场景2:slave恢复

重新开启slave1:

redis-server /test_redis_sentinel/redis_cluster/slave-6579/redis.conf

查看sentinel状态:

sentinel能快速的发现slave加入到集群中:

 

查看master的Replication信息:

场景3:master宕机

master-sentinel作为master 1的leader,会选取一个master 1的slave作为新的master。slave的选取是根据一个判断DNS情况的优先级来得到,优先级相同通过runid的排序得到,但目前优先级设定还没实现,所以直接获取runid排序得到slave 1。

然后发送命令slaveof no one来取消slave 1的slave状态来转换为master。当其他sentinel观察到该slave成为master后,就知道错误处理例程启动了。sentinel A然后发送给其他slave slaveof new-slave-ip-port 命令,当所有slave都配置完后,sentinel A从监测的masters列表中删除故障master,然后通知其他sentinels。

关闭master:

查看sentinel状态:

6479-sentinel:

自动将slave2即6579切换成master,原来的master变成slave。

6579-sentinel:

显示了failover的过程:

 

场景4:master恢复

重新启动原来的master:

redis-server --include/test_redis_sentinel/redis_cluster/master-6479/redis.conf

原来的master自动切换成slave,不会自动恢复成master:

测试完成。

注意:若在sentinel已选出新主但尚未完成其它实例的reconfigure之前,重启old master,则整个系统会出现无法选出new master的异常。 

 因文件是参考编写,可能存在些许错误,但是测试都是可以的,已经成功部署,有错的地方还请大神指出订正,谢谢

参考链接:https://my.oschina.net/91jason/blog/480308  很感激大佬的辛苦奉献!

启动master;slave;sentinel的命令;进入到对应得redis.conf,sentinel.conf文件存放目录下

master的启动:redis-server   redis.conf

slave的启动:redis-server   redis.conf

sentinel的启动:redis-server   sentinel.conf  --sentinel

访问命令:redis-cli   -h  <ip>  -p <port>  -a <password> 

例如: redis-cli   -h  172.253.172.83  -p  6379  -a  password@123

 

 

 

posted @ 2021-11-05 17:29  superming168  阅读(421)  评论(0编辑  收藏  举报