Redis实例(9)—— 主从复制
一、Redis 的 Replication
这里首先需要说明的是,在Redis中配置Master-Slave模式真是太简单了(其实,在MySQL配置主从也很简单)
相信在阅读完这篇Blog之后你也可以轻松做到。
这里我们还是先列出一些理论性的知识,后面给出实际操作的案例。
下面的列表清楚的解释了Redis Replication的特点和优势。
1)同一个Master可以同步多个Slaves,例如 一主两从,就是一个Master主库同步两个Slave从库
2)Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。因此我们可以将Redis的Replication架构视为图结构。
3)Master Server是以非阻塞的fork子进程方式为Slaves提供服务,所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求。
4)Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据。
5)为了分载Master的读操作压力,Slave服务器可以为客户端提供只读操作的服务,写服务仍然必须由Master来完成。即便如此,系统的伸缩性还是得到了很大的提高。
6)Master可以将数据保存操作交给Slaves完成,从而避免了在Master中要有独立的进程来完成此操作。
二、Replication的工作原理
在Slave启动并连接到Master之后,它将主动发送一个SYNC命令。
此后Master将Fork启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件dump.rdb到Slave,以完成一次完全同步。
而Slave服务器在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master继续将所有已经收集到的修改命令和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。
如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。
三、如何配置Replication
见如下步骤:
1)同时启动两个Redis服务器,可以考虑在同一台机器上启动两个Redis服务器,分别监听不同的端口,如6379和6380。
2)在Slave服务器上执行一下命令:
/> redis-cli -p 6380 #这里我们假设Slave的端口号是6380
redis 127.0.0.1:6380> slaveof 127.0.0.1 6379 #我们假设Master和Slave在同一台主机,Master的端口为6379
OK
上面的方式只是保证了在执行slaveof命令之后,redis_6380成为了redis_6379的slave,一旦服务(redis_6380)重新启动之后,他们之间的复制关系将终止。
如果希望长期保证这两个服务器之间的Replication关系,可以在redis_6380的配置文件中做如下修改:
/> cd /etc/redis #切换Redis服务器配置文件所在的目录。
/> ls
6379.conf 6380.conf
/> vi 6380.conf
将
# slaveof <masterip> <masterport>
改为
slaveof 127.0.0.1 6379
保存退出。
这样就可以保证Redis_6380服务程序在每次启动后都会主动建立与Redis_6379的Replication连接了。
四、应用示例
这里我们假设Master-Slave已经建立。
#启动master服务器。
[root@Stephen-PC redis]# redis-cli -p 6379
redis 127.0.0.1:6379>
#情况Master当前数据库中的所有Keys。
redis 127.0.0.1:6379> flushdb
OK
#在Master中创建新的Keys作为测试数据。
redis 127.0.0.1:6379> set mykey hello
OK
redis 127.0.0.1:6379> set mykey2 world
OK
#查看Master中存在哪些Keys。
redis 127.0.0.1:6379> keys *
1) "mykey"
2) "mykey2"
#启动slave服务器。
[root@Stephen-PC redis]# redis-cli -p 6380
#查看Slave中的Keys是否和Master中一致,从结果看,他们是相等的。
redis 127.0.0.1:6380> keys *
1) "mykey"
2) "mykey2"
#在Master中删除其中一个测试Key,并查看删除后的结果。
redis 127.0.0.1:6379> del mykey2
(integer) 1
redis 127.0.0.1:6379> keys *
1) "mykey"
#在Slave中查看是否mykey2也已经在Slave中被删除。
redis 127.0.0.1:6380> keys *
1) "mykey"
Redis 主从复制及密码设置
1. 主从环境
主库文件: 13.57.78.100 /etc/conf/redis.conf 端口: 6380 密码: proxy-mimvp
从库文件: 15.29.237.18 /etc/conf/redis.conf 端口: 6380 密码: proxy-mimvp
2. 主库配置文件密码
bind 127.0.0.1 13.57.78.100 # 127.0.0.1(本地使用),13.57.78.100 (从库绑定)
pidfile /var/run/redis.pid
dir /var/lib/redis/ # 强烈推荐设置指定目录,重启redis后加载db文件
requirepass 'proxy-mimvp' # 主库密码
3. 从库配置文件密码及从库配置
bind 127.0.0.1 # 127.0.0.1(本地使用)
pidfile /var/run/redis.pid
dir /var/lib/redis/
requirepass 'proxy-mimvp' # 从库密码
slaveof 13.57.78.100 # 13.57.78.100(绑定主库)
masterauth 'proxy-mimvp' # 从库绑定主库的密码(注意:是主库的密码)
slave-read-only no # 只读为yes;如果从库有临时写入,必须设置为 no
4. 重启Redis,使其生效
方式1: 杀死redis进程,重启 /usr/local/bin/redis-server /etc/conf/redis.conf
方式2: /etc/init.d/redis restart 配置详见米扑博客 Centos 配置 Redis 启动脚本
5. redis 主从实例
米扑代理: http://proxy.mimvp.com
参考推荐:
redis-rdb-tools 解析 reids dump文件及内存使用量
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2021-01-24 00:00:00
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: Redis实例(9)—— 主从复制 (米扑博客)