暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Redis相关内容分享--5

原创 阿布 2022-09-13
334

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论