Redis集群与高可用
Redis单机服务存在数据和服务的单点问题,而且单机性能也存在着上限,可以利用Redis的集群相关技术来 解决这些问题.
Redis主从复制实验准备
10.0.0.101 为master
10.0.0.102 为slave1
10.0.0.103 为slave2
要求三台redis服务器密码相同,版本一致
配置过程
第一步:
在master上建一个key,用于测试
[root@master ~]#redis-cli -a 123456
127.0.0.1:6379> set name mengfanchao
OK
127.0.0.1:6379> get name
"mengfanchao"
第二步:
1、slave1和slave2成为master的从节点
[root@slave1 ~]#redis-cli -a 123456
127.0.0.1:6379> slaveof 10.0.0.101 6379
OK
[root@slave2 ~]#redis-cli -a 123456
127.0.0.1:6379> slaveof 10.0.0.101 6379
OK
2、slave1和slave2通过master密码验证
127.0.0.1:6379> CONFIG SET masterauth 123456
OK
第三步:
查看是否完成主从复制
1、在slave是否能查看master的key
[root@slave1 ~]#redis-cli -a 123456
127.0.0.1:6379> get name
"mengfanchao"
可以看到
2、在主节点建立新的key,看在slave上是否能查看
[root@master ~]#redis-cli -a 123456
127.0.0.1:6379> set age 27
OK
slave查看
127.0.0.1:6379> get age
"27"
3、slave查看复制状态
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:10.0.0.101
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5 #每10s做一次io通讯
master_sync_in_progress:0 #0表示同步完成,1表示正在同步
slave_repl_offset:557
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:b77f425446997b9e511c8fa33a5ee415dc335f05 ()
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:557
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:557
以上为命令行做的主从复制,重启redis便失去了主从复制相关信息
修改slave配置文件,做到主从复制的持久化保存
修改slave配置文件
[root@slave1 ~]#vim /apps/redis/etc/redis.conf
replicaof 10.0.0.101 6379 #指向主节点IP和端口号
masterauth 123456 #设置主节点得密码
requirepass 123456 #和masterauth保持一致,用于将来从节点提升主节点用
[root@slave1 ~]#systemctl restart redis.service
slave只能读不能写
删除主从同步
在从节点执行 REPLICAOF NO ONE 指令可以取消主从复制
#取消复制,在slave上执行REPLICAOF NO ONE,会断开和master的连接不再主从复制, 但不会清除slave 上已有的数据
127.0.0.1:6379> REPLICAOF no one
以上是临时修改,完全取消需要修改配置文件
主从复制故障恢复
如主节点出了故障,应该要将一个从节点变成新主
第一步:
slave取消主从同步,从节点会自动切换为主节点
127.0.0.1:6379> REPLICAOF no one
第二步:
修改其他从节点指向新的主节点
实现Redis的级联复制
即实现slave的slave
10.0.0.101 为master
10.0.0.102 为slave1
10.0.0.103 为slave2
要求三台redis服务器密码相同
第一步:
修改slave1配置文件
[root@slave1 ~]#vim /apps/redis/etc/redis.conf
replicaof 10.0.0.101 6379
masterauth 123456
requirepass 123456
[root@slave1 ~]#systemctl restart redis.service
第二步:
修改slave2配置文件
[root@slave1 ~]#vim /apps/redis/etc/redis.conf
replicaof 10.0.0.102 6379
masterauth 123456
requirepass 123456
[root@slave1 ~]#systemctl restart redis.service