Redis哨兵 - 实战搭建
redis
redis, 高可用
字数统计: 1k(字)
阅读时长: 4(分)
相关链接
redis-GitHub-配置文件下载:https://github.com/redis/redis
redis 官网配置文件:https://redis.io/topics/config
作者搭建记录:https://github.com/mailjobblog/dev_redis/tree/master/sentinel
redis哨兵原理 - 思维导图:https://kdocs.cn/l/spXDj5U6vDKF
实战演示的服务节点分布图 :https://kdocs.cn/l/sk1lDLmDbLqY
redis哨兵原理:https://blog.mailjob.net/posts/2778025183.html
redis 主从复制搭建:https://blog.mailjob.net/posts/1586519326.html
redis广播:https://blog.mailjob.net/posts/2416487960.html
搭建方法
实战演练
1、下载redis和哨兵的配置文件
我是用 docker 搭建的 redis 节点,没有 .conf 文件,所以我需要下载 redis.conf 和 sentinel.conf
redis版本:6.0。下载地址:https://github.com/redis/redis
注释:下载配置文件的时候,请先查看自己的redis版本,然后下载匹配的redis配置文件,否则redis启动报错
2、首先建立redis主从复制
请参照上文中,相关链接中,redis 主从复制搭建 进行搭建
通过以上方法,搭建了3个redis节点
1 2 3 4 5 6
| ------------------------------------------------ 名字--------IP--------------端口映射-------角色 redis1------172.30.0.10-----6000->6379-----mater redis2------172.30.0.11-----6001->6379-----slave redis3------172.30.0.12-----6002->6379-----slave ------------------------------------------------
|
3、开始建立3个哨兵节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
docker run -itd -p 26000:26379 --network netredis --ip 172.30.0.20 -v /data/redis_group/data4:/data -v /data/redis_group/sentinel/sentinel-s1.conf:/etc/sentinel.conf --name redis-s1 [container id] docker run -itd -p 26001:26379 --network netredis --ip 172.30.0.21 -v /data/redis_group/data5:/data -v /data/redis_group/sentinel/sentinel-s2.conf:/etc/sentinel.conf --name redis-s2 [container id] docker run -itd -p 26002:26379 --network netredis --ip 172.30.0.22 -v /data/redis_group/data6:/data -v /data/redis_group/sentinel/sentinel-s3.conf:/etc/sentinel.conf --name redis-s3 [container id]
------------------------------------------ 名字----------IP--------------端口映射---- redis-s1------172.30.0.20-----26000->26379 redis-s2------172.30.0.21-----26001->26379 redis-s3------172.30.0.22-----26002->26379 ------------------------------------------
|
4、修改哨兵的配置文件
哨兵 redis-s1 配置
vim /data/redis_group/sentinel/sentinel-s1.conf
1 2 3 4 5 6 7 8 9 10
| daemonize yes logfile "/data/log-sentinel.log" sentinel monitor mymaster 172.30.0.10 6379 2
改好一份后,我复制了两份出来,sentinel-s2.conf、sentinel-s3.conf 这样,三个节点都有了配置文件
mymaster -是节点的起的别名,如果是多个集群,可以用集群的名字 6379 -是redis的端口 2 -至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
|
5、启动哨兵节点
1 2 3 4 5 6 7 8
| docker exec -it [container id] bash
redis-sentinel sentinel.conf redis-server sentinel.conf --sentinel
(二者作用是完全相同的)
|
6、查看是否配置成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 用 redis-cli 客户端操作哨兵 (26379是哨兵的默认端口) >> redis-cli -p 26379
查看配置信息 127.0.0.1:26379> info sentinel (或者使用命令也可以查看:sentinel master mymaster 【mymaster是配置哨兵的别名,自定义的名字】)
sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=172.30.0.12:6379,slaves=2,sentinels=3
这里可以看到主节点的redis信息,从节点的个数,哨兵个数
|
7、模拟宕机测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
25:X 05 Feb 2021 14:49:50.331
127.0.0.1:6379> info replication
role:slave master_host:172.30.0.12
127.0.0.1:6379> info replication
role:master connected_slaves:2 slave0:ip=172.30.0.11,port=6379,state=online,offset=547584,lag=0 slave1:ip=172.30.0.10,port=6379,state=online,offset=547584,lag=1
|

搭建报错问题
哨兵启动报错
1 2 3 4 5
| root@85cbceb66bad:/data# redis-server /etc/sentinel.conf --sentinel *** FATAL CONFIG FILE ERROR (Redis 6.0.10) *** Reading the configuration file, at line 336 >>> 'SENTINEL resolve-hostnames no' Unrecognized sentinel configuration statement.
|
这个是由于 docker 按照的 redis 版本和 引入数据卷使用的哨兵配置文件,版本不一致导致的