前言
环境:centos 7.9
介绍
我们知道redis一共有3中集群模式,1、主从模式。2、哨兵模式。3、Cluster模式。
主从复制模式缺点:master挂掉之后,集群无法使用,slave也不会自动成为新的master,slave会一直等待master正常,所以主从复制故障之后需要人为介入。
哨兵模式是为了解决主从复制模式的缺点的,即哨兵模式还是基于主从复制模式,只不过多了一个“哨兵”,当master挂掉之后,哨兵就会在在所有的从节点竞选出新的主节点。
哨兵模式原理
哨兵模式核心还是主从复制,只不过在相对于主从模式在主节点宕机导致不可写的情况下,多了一个竞选机制:在所有的从节点竞选出新的主节点。每一个哨兵都是一个独立的sentinel进程,作为进程,它会独立运行。
当master挂掉之后,哨兵会自动从slave中选一个作为master,若master重新启动,master则会转化为现有的master下的一个slave,当slave切换时,会通过发布订阅方式,将slave所对应的master更改。  哨兵本身也有单点故障的问题,所以在一个一主多从的Redis系统中,可以使用多个哨兵进行监控,哨兵不仅会监控主数据库和从数据库,哨兵之间也会相互监控。每一个哨兵都是一个独立的进程,作为进程,它会独立运行。 
哨兵模式搭建
下面将以一主一从一哨兵进行搭建演示,当然,你也可以搭建一主带多从,多个哨兵的模式。
首先:搭建redis主数据库,即master,搭建方法请参考https://blog.csdn.net/MssGuo/article/details/114283015 ,这里不在赘诉。 redis.conf配置文件要注意2个参数:
bind 192.168.118.133
requirepass 123456
设置slave从服务器: 同理,正常搭建一个redis实例之后,修改redis.conf配置文件。主要修改下面这些参数:
vim redis.conf
/REPLICATION
replicaof 192.168.118.133 6379
masterauth 123456
replica-read-only yes
到这里,主从已经搭建完成,可以进入master,slave后输入:info Replication ,查看主从之间的相关信息,还可以在master写入一个数据之后查看slave是否正常同步到数据。
配置哨兵
这里仅配置一个哨兵,在master上配置一个哨兵,当然,如果你需要多个哨兵,还可以在每个slave上配置哨兵。
[root@Redis ~]
[root@Redis etc]
total 108
-rw-r--r-- 1 root root 93767 Sep 9 18:35 redis.conf
-rw-r--r-- 1 root root 13768 Sep 9 21:45 sentinel.conf
[root@Redis etc]
[root@Redis etc]
bind 192.168.118.133
port 26379
daemonize yes
pidfile /opt/redis/logs/redis-sentinel.pid
logfile /opt/redis/logs/redis-sentinel.log
dir /tmp
sentinel monitor mymaster 192.168.118.133 6379 1
sentinel auth-pass mymaster 123456
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
[root@Redis etc]
启动哨兵
sentinel.conf 配置文件修改完成之后,开启哨兵进程:
[root@Redis bin]
[root@Redis bin]
root 71838 1 0 21:43 ? 00:00:08 ./redis-server 192.168.118.133:6379
root 93433 1 0 22:35 ? 00:00:00 ./redis-sentinel 192.168.118.133:26379 [sentinel]
[root@Redis bin]
93433:X 09 Sep 2022 22:35:21.203
93433:X 09 Sep 2022 22:35:21.203
93433:X 09 Sep 2022 22:35:21.203
93433:X 09 Sep 2022 22:35:21.204 * monotonic clock: POSIX clock_gettime
93433:X 09 Sep 2022 22:35:21.205 * Running mode=sentinel, port=26379.
93433:X 09 Sep 2022 22:35:21.206
93433:X 09 Sep 2022 22:35:21.206
93433:X 09 Sep 2022 22:35:21.207 * +slave slave 192.168.118.132:6379 192.168.118.132 6379 @ mymaster 192.168.118.133 6379
登陆哨兵
登录哨兵还是使用redis-cli命令,指定主机端口和26379端口即可:
[root@Redis bin]
192.168.118.133:26379> SENTINEL master mymaster
1) "name"
2) "mymaster"
3) "ip"
4) "192.168.118.133"
5) "port"
6) "6379"
7) "runid"
8) "02f3d42a68a5358a44c1dea60a80e6b774092e67"
9) "flags"
10) "master"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "55"
19) "last-ping-reply"
20) "55"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "3349"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "354734"
29) "config-epoch"
30) "0"
31) "num-slaves"
32) "1"
33) "num-other-sentinels"
34) "0"
35) "quorum"
36) "1"
37) "failover-timeout"
38) "180000"
39) "parallel-syncs"
40) "1"
192.168.118.133:26379>
192.168.118.133:26379> SENTINEL REPLICAS mymaster
1) 1) "name"
2) "192.168.118.132:6379"
3) "ip"
4) "192.168.118.132"
5) "port"
6) "6379"
7) "runid"
8) "0f52d6e66dc478ddeb7f82cc3f9a2f0ba6467c31"
9) "flags"
10) "slave"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "554"
19) "last-ping-reply"
20) "554"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "9229"
25) "role-reported"
26) "slave"
27) "role-reported-time"
28) "722021"
29) "master-link-down-time"
30) "0"
31) "master-link-status"
32) "ok"
33) "master-host"
34) "192.168.118.133"
35) "master-port"
36) "6379"
37) "slave-priority"
38) "100"
39) "slave-repl-offset"
40) "55892"
41) "replica-announced"
42) "1"
192.168.118.133:26379>
验证
下面验证master挂掉之后,哨兵会不会将slave提升为新的master。
[root@Redis bin]
[root@Redis bin]
root 93433 1 0 22:35 ? 00:00:03 ./redis-sentinel 192.168.118.133:26379 [sentinel]
root 99823 79065 0 22:50 pts/0 00:00:00 grep --color=auto redis
[root@node1 bin]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.118.132:6379> info Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:9aa2e88aa729a454dae63f4a8c03cb2dcac40606
master_replid2:4976935598fb02dc112bddd37068f5f5b45f085f
master_repl_offset:82267
second_repl_offset:69050
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:82267
192.168.118.132:6379>
[root@Redis bin]
[root@Redis bin]
root 93433 1 0 22:35 ? 00:00:04 ./redis-sentinel 192.168.118.133:26379 [sentinel]
root 101580 1 0 22:54 ? 00:00:00 ./redis-server 192.168.118.133:6379
[root@Redis bin]
192.168.118.133:6379> info Replication
role:slave
master_host:192.168.118.132
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_read_repl_offset:1
slave_repl_offset:1
master_link_down_since_seconds:-1
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:fbec000371f598d941c57b877b0d4b71065448cc
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
192.168.118.133:6379>
192.168.118.132:6379> SHUTDOWN
[root@node1 bin]
[root@node1 bin]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.118.132:6379> info Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:7b55a5e55c316d416ad225ef96fe69cf302bf3fd
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
192.168.118.132:6379>
总结
1、先搭建好redis主从复制模式,因为哨兵是基于主从复制模式的; 1、可以配置多个哨兵,解决哨兵单点故障问题; 2、可以在master节点上启动哨兵,如果需要多个哨兵,则可以在slave上也启动哨兵; 2、复制哨兵的配置文件到redis安装目录下,与redis.conf配置文件放一块,在源码包里面有sentinel.conf文件; 3、修改sentinel.conf文件对应的参数,主要是定义其监控的master节点ip端口密码等 4、启动哨兵:[root@Redis bin]# ./redis-sentinel ../etc/sentinel.conf #指定哨兵配置文件启动 5、登陆哨兵:[root@Redis bin]# ./redis-cli -h 192.168.118.133 -p 26379 #登录哨兵,没设密码所以不用输入密码 6、验证master挂掉,发现slave自动成为了新的master,而且当就的master故障恢复启动之后,就的master会自动成为slave角色; 7、在不该变redis.conf配置文件的情况下,重启新的master节点,发现其重启后仍是master节点,即使redis.conf配置了它是salve,这一点与没有哨兵模式的主从模式有所不同,在redis仅仅是主从模式时,重启master就是master角色,重启slave就是slave角色,因为配置文件就是这样定义的。
|