11.1Redis高可用集群部署
Redis高可用集群
主开启aof
一、主从复制
(一) 一主一从
1.修改配置文件版
replicof {masterHost} {masterPort}
#从
[root@web1 ~]# yum install -y redis
#修改配置文件
[root@web1 ~]# vim /etc/redis.conf
#关闭保护模式
protected-mode no
#修改登录地址
#bind 127.0.0.1 -::1
bind 192.168.157.169 #从自己的
#开启replicaof 设置master密码
# replicaof <masterip> <masterport>replicaof 192.168.157.168 6379# masterauth <master-password>masterauth 123.com[root@web1 ~]# systemctl start redis#数据同布[root@web1 ~]# redis-cli -h 192.168.157.169
192.168.157.169:6379> keys *
1) "z"
2) "a"
3) "bbb"
4) "kk"
5) "v"
6) "m"
2.slaveof命令
#主有密码的情况下
#从不用修改配置文件
192.168.157.169:6379> slaveof 192.168.157.168 6379
OK
192.168.157.169:6379> config set masterauth 123.com
OK
192.168.157.169:6379> info
...
# Replication
role:slave
master_host:192.168.157.168
master_port:6379
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_read_repl_offset:1722
slave_repl_offset:1722
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:414177665a85393439e43298cd8c6bb03073aaa3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1722
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1695
repl_backlog_histlen:28
...
#
192.168.157.168:6379> SLAVEOF no one
OK
192.168.157.169:6379> info
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:d346dee05895dad40b48259f7bf53bbc29c82212
master_replid2:414177665a85393439e43298cd8c6bb03073aaa3
master_repl_offset:2842
second_repl_offset:2843
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1695
repl_backlog_histlen:1148
[root@nfs-server ~]# redis-cli -h 192.168.157.168 -a 123.com info
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Server
redis_version:7.2.9
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:960574b97fce8453
redis_mode:standalone
(二)一主两从
主:192.168.157.168
从:192.168.157.169
从:192.168.157.181
#修改bind PROTECT-MODE replicaof
#关闭保护模式
protected-mode no
#bind 127.0.0.1 -::1
bind 192.168.157.169 #从自己的
#开启replicaof 设置master密码
# replicaof <masterip> <masterport>
replicaof 192.168.157.168 6379
# masterauth <master-password>
masterauth 123.com
(三)树状结构
主:192.168.157.168
redis-slave1:192.168.157.169
redis-slave2:192.168.157.181
#在上述基础上 从没设置密码 把一个变成另一个从的主
[root@redis-slave2 ~]# vim /etc/redis.confreplicaof 192.168.157.169 6379#验证
[root@redis-slave2 ~]# redis-cli -h 192.168.157.181
192.168.157.181:6379> keys *
1) "z"
2) "a"
3) "aaaa"
4) "m"
5) "bbb"
6) "kk"
7) "v"
192.168.157.181:6379> info
....
# Replication
role:slave
#master_host:192.168.157.169
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_read_repl_offset:4270
slave_repl_offset:4270
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:414177665a85393439e43298cd8c6bb03073aaa3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:4270
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:4117
repl_backlog_histlen:154
....
##测试
#主
[root@redis-master ~]# redis-cli -h 192.168.157.168
192.168.157.168:6379> keys *
(error) NOAUTH Authentication required.
192.168.157.168:6379> auth 123.com
OK
192.168.157.168:6379> keys *
1) "aaaa"
2) "m"
3) "a"
4) "bbb"
5) "v"
6) "kk"
7) "z"
192.168.157.168:6379> flushall
OK
192.168.157.168:6379> set a 1
OK
192.168.157.168:6379> set b 2
OK
192.168.157.168:6379>
#新主
[root@redis-slave1 ~]# redis-cli -h 192.168.157.169
192.168.157.169:6379> keys *
1) "a"
2) "b"
#小从
[root@redis-slave2 ~]# redis-cli -h 192.168.157.181
192.168.157.181:6379> keys *
1) "b"
2) "a"
二、哨兵模式
redis-master:192.168.157.168
redis-slave1:192.168.157.169
redis-slave2:192.168.157.181
一主两从模式 都不设置密码(生成环境要设)
#每个节点启动一个redis进程一个哨兵进程
#####主
[root@redis-master ~]# vim /etc/redis.conf
#注解密码
#修改哨兵配置
[root@redis-master ~]# vim /etc/redis-sentinel.conf
#后台运行
daemonize yes
#设置监控IP 端口号 从数量
sentinel monitor mymaster 192.168.157.168 6379 2
#启动哨兵
[root@redis-master ~]# systemctl start redis-sentinel.service
##检测是否启动
[root@redis-master ~]# netstat -anptu | grep redis
tcp 0 0 0.0.0.0:26379 0.0.0.0:* LISTEN 43779/redis-sentine
tcp 0 0 192.168.157.168:6379 0.0.0.0:* LISTEN 43012/redis-server
tcp 0 0 192.168.157.168:6379 192.168.157.168:58704 ESTABLISHED 43012/redis-server
tcp 0 0 192.168.157.168:6379 192.168.157.168:58706 ESTABLISHED 43012/redis-server
tcp 0 0 192.168.157.168:58704 192.168.157.168:6379 ESTABLISHED 43779/redis-sentine
tcp 0 0 192.168.157.168:58706 192.168.157.168:6379 ESTABLISHED 43779/redis-sentine
tcp6 0 0 :::26379 :::* LISTEN 43779/redis-sentine
###redis-slave1
[root@redis-slave1 ~]# vim /etc/redis-sentinel.conf
sentinel monitor mymaster 192.168.157.168 6379 2
[root@redis-slave1 ~]# vim /etc/redis.confreplicaof 192.168.157.168 6379[root@redis-slave1 ~]# systemctl restart redis-sentinel.service
[root@redis-slave1 ~]# systemctl restart redis
###redis-slave1
[root@redis-slave2 ~]# vim /etc/redis-sentinel.conf
sentinel monitor mymaster 192.168.157.168 6379 2
[root@redis-slave2 ~]# systemctl start redis-sentinel.service
[root@redis-slave2 ~]# systemctl restart redis
#验证
[root@redis-master ~]# redis-cli -h 192.168.157.168
192.168.157.168:6379> info
....
# Replication
role:master
connected_slaves:2
#slave0:ip=192.168.157.169,port=6379,state=online,offset=54518,lag=1
#slave1:ip=192.168.157.181,port=6379,state=online,offset=54663,lag=1
...
模拟故障转移
#停主服务
[root@redis-master ~]# systemctl stop redis
#slave1 变成主了
[root@redis-slave1 ~]# redis-cli -h 192.168.157.169
192.168.157.169:6379> info
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.157.181,port=6379,state=online,offset=199099,lag=1
#slave2验证
[root@redis-slave2 ~]# redis-cli -h 192.168.157.181
192.168.157.181:6379> info
# Replication
role:slave
master_host:192.168.157.169
###自动切换主节点成功
###此时在开启主服务 变成从了
[root@redis-master ~]# redis-cli -h 192.168.157.168
192.168.157.168:6379> info
# Replication
role:slave
master_host:192.168.157.169
master_port:6379
#宕掉现有主节点 大概率会回到以前主节点
三、cluster集群
#在上述实验基础上 一主两从配置还在
#主从都停止 redis进程和哨兵进程
#三台都添加cluster配置
root@redis-master redis]# vim /etc/redis.conf
cluster-enabled yes
cluster-config-file nodes-6379.conf 最好绝对路径
cluster-node-timeout 15000
root@redis-master redis]# systemctl start redis
root@redis-master redis]# netstat -anptu | grep redis
tcp 0 0 192.168.157.168:16379 0.0.0.0:* LISTEN 5402/redis-server 1
tcp 0 0 192.168.157.168:6379 0.0.0.0:* LISTEN 5402/redis-server 1
#集群模式不需要手动配置主从
#关闭 从上的相关配置
[root@redis-slave ~]# vim /etc/redis.conf#replicaof 192.168.157.168 6379