ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
>[info] 一主一从 博客链接:https://www.jianshu.com/p/ba3cc187da9c ***** 如图所示左边是Master节点,右边是slave节点,即主节点和从节点。从节点也是可以对外提供服务的,主节点是有数据的,从节点可以通过复制操作将主节点的数据同步过来,并且随着主节点数据不断写入,从节点数据也会做同步的更新。 整体起到的就是数据备份的效果。 ![](https://img.kancloud.cn/62/78/62786a090408f96e5d8c20f3b56d04a2_710x327.png) >[info] 一主多从 除了一主一从模型之外,redis还提供了一主多从的模型,也就是一个master可以有多个slave,也就相当于有了多份的数据副本。 这样可以做一个更加高可用的选择,例如一个master和一个slave挂掉了,还能有其他的slave数据备份。 ![](https://img.kancloud.cn/c0/5f/c05f1b7f49b25c59d64b7977abbc798b_630x368.png) >[info] 读写分离 除了作为数据备份,主从模型还能做另外一个功能,就是读写分离。 让master节点负责提供写服务,而将数据读取的压力进行分流和负载,分摊给所有的从节点。 ![](https://img.kancloud.cn/e6/76/e6762b769a71c88d371a230b4f51ee75_669x292.png) >[info] 树状结构 ![](https://img.kancloud.cn/fe/c5/fec5d562333d37801ec789fd53ce793b_539x367.png) >[info] 配置主从 1. 主开启 redis 访问(0.0.0.0)设置 `密码` ![](https://img.kancloud.cn/9d/74/9d749d2ebfe291ebab0f79c9b084f13e_613x558.png) 2. slaveof命令 如图,想让6380节点成为6379的从节点,只需要执行`slaveof`命令即可,此复制命令是异步进行的,redis会自动进行后续数据复制的操作。 ![](https://img.kancloud.cn/ee/65/ee6579795a771934f3b7e5a15909cba4_678x278.png) **取消复制:** 如果6380节点不希望成为6379的从节点,可以执行 `slave of on one` 命令,取消后6380节点的数据不会被清除,只是说后续6379节点新写入的数据不会再同步到该节点了。 **注意:** 如果取消复制后想slave一个新的主节点,新的主节点在同步给slave节点数据时,会先将从节点的数据全部清除。 ![](https://img.kancloud.cn/60/69/6069908faa0acb61cc2c58a047b726ab_681x282.png) ***** 2. 修改 `redis.conf` 配置 ~~~bash # 配置主节点的IP和端口号 slaveof ip port # 设置主密码 masterauth 123456 # 从节点只做读的操作,保证主从数据的一致性 slave-read-only yes ~~~ 3. 重启 redis ``` service redis restart ``` 5. 进入 redis-cli 查看 状态 ``` info replication ``` ![](https://img.kancloud.cn/9d/5a/9d5ac8668f1ca9fc7be748484bfbdc5b_444x357.png) ***** **对比:** ![](https://img.kancloud.cn/76/2a/762a20780867f9b628713bf6f195e950_646x141.png) ``` # 把下面这行加入到从服务器的 redis.conf 配置文件中即可。 slaveof 192.168.1.1 6379 命令配置: slaveof host port replicaof host port masterauth <master-password> ``` >[info] 主从原理 **主从节点建立复制流程图:** ![](https://img.kancloud.cn/05/92/05924024fd0792a5d1e6dcdb7228418e_522x472.png) **主从节点建立复制流程图:** ![](https://img.kancloud.cn/50/c9/50c9c5f3ae22758626d89ef67a0a0da3_805x357.png) **主从心跳检测:** 连接建立成功后从节点发送 ping 请求进行首次通信,ping 请求主要目的如下: * 检测主从之间网络套接字是否可用。 * 检测主节点当前是否可接受处理命令。 * 如果发送 ping 命令后,从节点没有收到主节点的 pong 回复或者超时,比如网络超时或者主节点正在阻塞无法响应命令,从节点会断开复制连接,下次定时任务会发起重连。 * 从节点发送的 ping 命令成功返回,Redis 打印如下日志,并继续后续复制流程: ![](https://img.kancloud.cn/04/96/04963f337a5887dfc470df1c66c6f06b_611x42.png) ![](https://img.kancloud.cn/c7/ed/c7ede2c97e7a358937265a78fbe0237a_737x357.png)