目录
1.主从复制的原理
slave启动成功连接到master后会发一个sync命令。
master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步。
2.实战redis主从复制
192.168.150.19 | 主服务器 |
192.168.150.10 | 从服务器 |
192.168.150.11 | 从服务器 |
注意防火墙 selinux iptables 时间同步等。
2.1 安装redis
2.2 配置主服务器
![](https://i-blog.csdnimg.cn/blog_migrate/63456e73a249a8ba3bd6124ed47d26a1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b210e51d42b13d750e41f58a89fef4a5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fd528542deb0a6820c3cdd71d7114e65.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e7783bec62b45e6d196731db618804cf.png)
2.3 测试
[root@192 redis-6.2.3]# src/redis-cli
127.0.0.1:6379> auth 201104
OK
127.0.0.1:6379> keys *
1) "name"
2) "num"
127.0.0.1:6379> set key1 1
OK
127.0.0.1:6379>
[root@192 redis-6.2.3]# src/redis-cli
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 201104
OK
127.0.0.1:6379> keys *
1) "key1"
2) "name"
3) "num"
127.0.0.1:6379> set key2 2
(error) READONLY You can't write against a read only replica.
127.0.0.1:6379> get key1
"1"
[root@192 redis-6.2.3]# src/redis-cli
127.0.0.1:6379> auth 201104
OK
127.0.0.1:6379> keys *
1) "num"
2) "name"
3) "key1"
127.0.0.1:6379> set key2 2
(error) READONLY You can't write against a read only replica.
127.0.0.1:6379> get key2
(nil)
127.0.0.1:6379> get key1
"1"
3. 哨兵模式
3.1 哨兵模式的定义
sentinel可以让redis实现主从复制,当一个集群中的master失效之后,sentinel可以选举出一个新的master用于自动接替master的工作,集群中的其他redis服务器自动指向新的master同步数据。一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换。
3.2 哨兵模式的架构框图
3.3 功能作用
3.4 故障切换的过程
3.5 工作方式
![](https://i-blog.csdnimg.cn/blog_migrate/7732ae80c04d6d30e5a6449b5926311e.png)
4. 搭建哨兵模式
在主从复制的基础上搭建哨兵模式
192.168.150.19 | slave |
192.168.150.10 | master |
192.168.150.11 | slave |
4.1 三个节点修改哨兵配置文件sentinel.conf
可使用scp命令将主节点的cp过去,都不用变
scp sentinel 192.168.150.11:/root/redis-6.2.3/
4.2 开启sentinel
注意启动的顺序。首先是主机(server1)的Redis服务进程,然后启动从机的Redis服务进程src/redis-server redis.conf,最后启动3个哨兵的服务进程。
src/redis-server redis.conf
src/redis-server sentinel.conf --sentinel
4.2.1 常见报错与警告
提示socket连接数设置的太低了,需要修改后重启服务就不会有警告提示了
echo 1024 > /proc/sys/net/core/somaxconn
![](https://i-blog.csdnimg.cn/blog_migrate/089caea1299b527f0759890c9ad3e61a.png)
原因是没有设置节点认证的密码,也就是我的redis设置了节点通信的密码,那么在哨兵里面也是需要配置的。
主节点可以查看到如下信息,slave两个节点已经加入
5. 在master上查看信息
[root@192 redis-6.2.3]# src/redis-cli
127.0.0.1:6379> auth 201104
OK
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.150.19,port=6379,state=online,offset=102691,lag=1
slave1:ip=192.168.150.11,port=6379,state=online,offset=102834,lag=0
master_failover_state:no-failover
master_replid:21d1d39c51f28ec83b4f2336e5a09b3202d91152
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:102834
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:102834
6. 模拟主机宕机
此时我们,在slave上,可以看到订阅的消息
此时,我们可以看到192.168.150.19变为master。
我们在将192.168.150.10的redis恢复
src/redis-server redis.conf
此时,在10上,我们可以看到,10重新上线后,是(192.168.42.19)的备机。
7. 再次查看配置文件
查看slave(192.168.150.10)redis.conf
说明10是19的slave
哨兵文件自动添加
查看192.168.150.11的文件
说明11是19的slave
8.故障转移的具体步骤介绍
- 从下线的主服务的所有从服务里面挑选一个从服务,将其转成主服器
- 已下线主服务的所有从服务改为复制新的主服务
- 将已下线的主服务设置成新的主服务的从服务,当其回复正常时,复制新的主服务,变成新的主服务的从服务
9. sentinel 模拟下的几个事件