Redis的主从集群实操
沿用在上面单实例的的安装和部署过程,我们创建出来一个6379的单实例之后,对单实例进行主从搭建;
上面的单实例我们的
端口:6379 ;
数据目录:/usr/local/redis/db/db1 ;
配置文件:/usr/local/redis/etc/redis.conf
建立两个从库:
端口:6380/6390;
数据目录:/usr/local/redis/db/db2;
配置文件:/usr/local/redis/etc/redis_6380.conf /usr/local/redis/etc/redis_6390.conf
从库需要配置:
slave-serve-stale-data yes
# slaveof <masterip> <masterport>下面添加一句
slaveof 127.0.0.1 6379
复制
/usr/local/redis/etc/redis.conf 和/usr/local/redis/etc/redis_6380.conf差异:
root@VM-2-10-ubuntu:/usr/local/redis/etc# diff redis.conf redis_6380.conf
98c98
< port 6379
---
> port 6380
305c305
< logfile "/var/log/redis.log"
---
> logfile "/var/log/redis_6380.log"
433c433
< # The filename where to dump the DB
---
> # The filename where to dump the
457c457
< dir "/usr/local/redis/db/db1"
---
> dir "/usr/local/redis/db/db2"
2054a2055,2059
>
> slave-serve-stale-data yes
> # slaveof <masterip> <masterport>下面添加一句
> slaveof 127.0.0.1 6379
>
复制
redis_6380.conf和 redis_6390.conf差异对比:
root@VM-2-10-ubuntu:/usr/local/redis/etc# diff redis_6380.conf redis_6390.conf
98c98
< port 6380
---
> port 6390
305c305
< logfile "/var/log/redis_6380.log"
---
> logfile "/var/log/redis_6390.log"
复制
查看主从状态
在主库查看info replication
主从复制情况:
root@VM-2-10-ubuntu:~# redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=3632438,lag=1
slave1:ip=127.0.0.1,port=6390,state=online,offset=3632305,lag=1
master_failover_state:no-failover
master_replid:88d24111b1431d617cd53be507e5a254175b05ab
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3632438
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2583863
repl_backlog_histlen:1048576
复制
在从库查看info replication
主从复制情况:
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_read_repl_offset:3631892
slave_repl_offset:3631892
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:88d24111b1431d617cd53be507e5a254175b05ab
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3631892
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2583317
repl_backlog_histlen:1048576
127.0.0.1:6380>
复制
哨兵实操
配置信息:
root@VM-2-10-ubuntu:/usr/local/redis/etc# cat sentinel.conf |grep -v ^#|grep -v ^$ port 26379 daemonize no pidfile "/var/run/redis-sentinel.pid" logfile "/var/log/redis_sentinel.log" dir "/usr/local/redis/db/db_sentinel" sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 30000 acllog-max-len 128 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000 sentinel deny-scripts-reconfig yes SENTINEL resolve-hostnames no SENTINEL announce-hostnames no
复制
以上除了logfile、dir 皆为默认配置
启动哨兵:
root@VM-2-10-ubuntu:/usr/local/redis/etc# redis-sentinel /usr/local/redis/etc/sentinel.conf & [1] 255020 root@VM-2-10-ubuntu:/usr/local/redis/etc# ps axu |grep sentinel root 255020 0.0 0.0 52288 5732 pts/5 Sl 17:49 0:00 redis-sentinel *:26379 [sentinel] root 255459 0.0 0.0 6432 652 pts/5 S+ 17:52 0:00 grep --color=auto sentinel
复制
启动方式可以选择:
redis-server /path/to/sentinel.conf --sentinel
复制
再看看配置文件信息:
root@VM-2-10-ubuntu:/usr/local/redis/etc# cat sentinel.conf |grep -v ^#|grep -v ^$ port 26379 daemonize no pidfile "/var/run/redis-sentinel.pid" logfile "/var/log/redis_sentinel.log" dir "/usr/local/redis/db/db_sentinel" sentinel monitor mymaster 127.0.0.1 6379 2 acllog-max-len 128 sentinel deny-scripts-reconfig yes sentinel resolve-hostnames no sentinel announce-hostnames no protected-mode no user default on nopass ~* &* +@all sentinel myid 5daa0098ecfe36fc47757e0b3277aa2bbfd2891b sentinel config-epoch mymaster 0 sentinel leader-epoch mymaster 0 sentinel current-epoch 0 sentinel known-replica mymaster 127.0.0.1 6380 sentinel known-replica mymaster 127.0.0.1 6390
复制
可以看到最后两行已经同步了redis的从的相关信息数据
哨兵集群
哨兵集群至少要启动三个节点
配置sentinel的26380配置文件:
root@VM-2-10-ubuntu:/usr/local/redis/etc# cp sentinel.conf sentinel_26380.conf
复制
修改sentinel_26380.conf配置文件的内容:
port 26380 pidfile "/var/run/redis-sentinel_26380.pid" logfile "/var/log/redis_sentinel_26380.log"
复制
同样的增加sentinel_26390配置文件,启动两个哨兵实例:
root@VM-2-10-ubuntu:/usr/local/redis/etc# redis-sentinel /usr/local/redis/etc/sentinel_26380.conf & [1] 390865 root@VM-2-10-ubuntu:/usr/local/redis/etc# redis-sentinel /usr/local/redis/etc/sentinel_26390.conf & [2] 391273 root@VM-2-10-ubuntu:/usr/local/redis/etc# ps axu |grep sentinel root 255020 0.0 0.0 52288 5628 ? Sl Aug09 0:46 redis-sentinel *:26379 [sentinel] root 390268 0.0 0.0 5512 580 pts/1 S+ 09:11 0:00 tail -f /var/log/redis_sentinel.log root 390865 0.1 0.0 52288 5672 pts/2 Sl 09:14 0:00 redis-sentinel *:26380 [sentinel] root 391273 0.1 0.0 52288 5720 pts/2 Sl 09:16 0:00 redis-sentinel *:26390 [sentinel] root 391301 0.0 0.0 6432 716 pts/2 R+ 09:16 0:00 grep --color=auto sentinel
复制
监控第一个哨兵的日志文件会有以下日志:
root@VM-2-10-ubuntu:/usr/local/redis/etc# tail -f /var/log/redis_sentinel.log 255020:X 10 Aug 2022 09:14:40.492 * +sentinel sentinel 021ce8f5af32facc05ccf3c30006f3b7876b3491 127.0.0.1 26380 @ mymaster 127.0.0.1 6379 255020:X 10 Aug 2022 09:16:46.074 * +sentinel sentinel 2555a6587a07250ea030f46abc02ab761fecc585 127.0.0.1 26390 @ mymaster 127.0.0.1 6379
复制
测试哨兵
停止主库:
redis-cli -p 6379 shutdown
复制
监控哨兵日志情况:
255020:X 10 Aug 2022 09:24:09.758 # +sdown master mymaster 127.0.0.1 6379 255020:X 10 Aug 2022 09:24:09.816 # +odown master mymaster 127.0.0.1 6379 #quorum 3/2 255020:X 10 Aug 2022 09:24:09.816 # +new-epoch 1 255020:X 10 Aug 2022 09:24:09.816 # +try-failover master mymaster 127.0.0.1 6379 255020:X 10 Aug 2022 09:24:09.821 # +vote-for-leader 5daa0098ecfe36fc47757e0b3277aa2bbfd2891b 1 255020:X 10 Aug 2022 09:24:09.821 # 021ce8f5af32facc05ccf3c30006f3b7876b3491 voted for 021ce8f5af32facc05ccf3c30006f3b7876b3491 1 255020:X 10 Aug 2022 09:24:09.826 # 2555a6587a07250ea030f46abc02ab761fecc585 voted for 021ce8f5af32facc05ccf3c30006f3b7876b3491 1 255020:X 10 Aug 2022 09:24:10.739 # +config-update-from sentinel 021ce8f5af32facc05ccf3c30006f3b7876b3491 127.0.0.1 26380 @ mymaster 127.0.0.1 6379 255020:X 10 Aug 2022 09:24:10.739 # +switch-master mymaster 127.0.0.1 6379 127.0.0.1 6380 255020:X 10 Aug 2022 09:24:10.740 * +slave slave 127.0.0.1:6390 127.0.0.1 6390 @ mymaster 127.0.0.1 6380 255020:X 10 Aug 2022 09:24:10.740 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380 255020:X 10 Aug 2022 09:24:40.759 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380
复制
到6380查看复制状态:
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6390,state=online,offset=4322388,lag=1
master_failover_state:no-failover
master_replid:8c5a11758bffb00a7957dd7a083e3f7e238c8135
master_replid2:88d24111b1431d617cd53be507e5a254175b05ab
master_repl_offset:4322521
second_repl_offset:3801181
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:3273946
repl_backlog_histlen:1048576
复制
再次启动6379实例,查看状态:
root@VM-2-10-ubuntu:~# redis-server /usr/local/redis/etc/redis.conf &
root@VM-2-10-ubuntu:~# redis-cli -p 6380
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6390,state=online,offset=4408133,lag=0
slave1:ip=127.0.0.1,port=6379,state=online,offset=4408133,lag=1
master_failover_state:no-failover
master_replid:8c5a11758bffb00a7957dd7a083e3f7e238c8135
master_replid2:88d24111b1431d617cd53be507e5a254175b05ab
master_repl_offset:4408133
second_repl_offset:3801181
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:3359558
repl_backlog_histlen:1048576
复制
Sentinel命令
下面是可以接收的命令列表,没有覆盖到那些用来改变Sentinel配置的命令:
- PING 这个命令仅仅返回PONG。
- SENTINEL masters 展示监控的主节点和它们的状态列表
- SENTINEL master
展示指定的主节点的信息 - SENTINEL salves
展示这个主节点的从节点,以及它们的状态 - SENTINEL sentinels
展示这个主节点的sentinel实例,以及它们的状态 - SENTINEL get-master-addr-by-name
返回主节点的IP和端口号。如果这个主节点的一次故障转移正在进行,就返回提升的从节点的IP和端口号 - SENTINEL reset
<pattern> 这个命令将会根据匹配的名称重置主节点,pattern参数是通配符(glob-style)类型,重置进程清除主节点中之前的所有状态,并且移除主节点发现和关联的从节点和sentinel。
- SENTINEL failover
<master name> 如果主节点不可达,强制开始故障转移,不需要另外的Sentinels同意。
- SENTINEL ckquorum
<master name> 检查当前的Sentinel配置对于主节点的故障转移是否能达到仲裁人数,并且大多数是需要的来授权故障转移。这个命令应该在监控系统中使用来检查一个Sentinel部署是否正常。
- SENTINEL flushconfig 强制Sentinel重新写入它的配置到磁盘上,包括当前Sentinel状态。通常,每次当它状态里的一些东西改变,Sentinel就会重写配置信息。然而有时候配置文件会丢失,由于错误的操作、磁盘故障、包升级脚本、或配置管理。在那种情况下,强制Sentinel重写它的配置文件是容易的。甚至之前的配置文件完全丢失,这个命令也能很好的工作。
最后修改时间:2022-09-13 09:05:06
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
相关阅读
国产非关系型数据库 Eloqkv 初体验
JiekeXu
113次阅读
2025-04-10 23:51:35
融合Redis缓存的PostgreSQL高可用架构
梧桐
82次阅读
2025-04-08 06:35:40
PolarDB PostgreSQL版索引预读原理介绍
PolarDB
40次阅读
2025-03-27 10:00:42
《深度剖析:MySQL、Oracle、SQL Server分页语法大揭秘》
程序员阿伟
39次阅读
2025-03-26 23:31:03
Redis 高可用方案
天翼云开发者社区
39次阅读
2025-03-24 17:09:54
Redis概要
听溪
37次阅读
2025-04-11 10:23:10
纯干货 | Dolphinscheduler Master模块源码剖析
海豚调度
37次阅读
2025-04-01 18:30:33
安装与配置Redis
鲁鲁
30次阅读
2025-04-11 10:26:10
高并发场景下的库存管理,理论与实战能否兼得?
京东云开发者
28次阅读
2025-03-24 16:54:56
控制器- deployment01
喵呜
27次阅读
2025-03-31 13:45:40