一、概述
Redis主从同步结构与Mysql类似[Mysql主从同步]https://blog.csdn.net/ck784101777/article/details/100898344
但是Redis并不需要binlog日志,也不需要进行多少配置,只需要指定当前主机是哪台主机的从服务器即可
主从复制工作原理:
1)slave向master发送sync命令
2)master启动后台存盘进程,并速记所有修改数据的命令
3)master完成后台存盘后,传输整个数据文件到slave
4)slave接受数据文件,加载到内存中完成首次完全同步
5)后续有新数据产生时,master继续收集数据修改命令一次传给slave,完成同步
对比Mysql主从复制的流程
1)主服务器执行完全备份
2)将完全备份数据导入从服务器,从服务器执行完全备份文件,完成第一次数据同步
3)主服务器上开启binlog日志,指定唯一id号,确定偏移量
4)从服务器确定唯一id好,通过命令指定主服务器信息
我们可以看到相似性,即都完成了一次完全同步,在这个基础上从服务器继续收集主服务器数据
二、配置Redis主从复制
[安装Redis服务器教程]https://blog.csdn.net/ck784101777/article/details/101294306
1.拓扑图
2.将主机192.168.4.51配置为主服务器
每台redis服务器,默认都是主服务器;所以主服务器不需要配置。
- [root@redisA ~]# redis-cli -h 192.168.4.51 –p 6351
- 192.168.4.51:6351> info replication //查看复制信息
- # Replication
- role:master //是master 服务器
- connected_slaves:0 //从服务器个数零台
- master_replid:eaa14478158a71c41f947eaea036658c2087e8f2
- master_replid2:0000000000000000000000000000000000000000
- master_repl_offset:0
- second_repl_offset:-1
- repl_backlog_active:0
- repl_backlog_size:1048576
- repl_backlog_first_byte_offset:0
- repl_backlog_histlen:0
- 192.168.4.51:6351>
3.将主机192.168.4.52配置为192.168.4.51的从服务器
1)命令行配置(马上生效)
命令行配置非常简单,一条命令即可:slaveof 主服务器ip 端口
- [root@redisB ~]# redis-cli -h 192.168.4.52 –p 6352
- 192.168.4.52:6352> slaveof 192.168.4.51 6351 //指定主服务器ip地址与端口
- OK
- 192.168.4.52:6352> info replication //查看复制信息
- # Replication
- role:slave //从服务器
- master_host:192.168.4.51 //主服务器ip地址
- master_port:6351 //主服务器端口
- master_link_status:up //连接状态开启
- master_last_io_seconds_ago:3
- master_sync_in_progress:0
2)永久配置(重新redis服务后,依然有效)
- [root@redisB ~]# vim /etc/redis/6379.conf
- slaveof 192.168.4.51 6351 //在文件末尾添加或在原有配置项上修改都可以
- :wq
3)在主服务器确认复制信息
- [root@redisA ~]# redis-cli -h 192.168.4.51 –p 6351
- 192.168.4.51:6351> info replication //查看复制信息
- # Replication
- role:master
- connected_slaves:1 //从服务器个数 1台
- slave0:ip=192.168.4.52,port=6352,state=online,offset=14,lag=1 //从服务器信息
- master_replid:db7932eb0ea4302bddbebd395efa174fb079319f
- master_replid2:0000000000000000000000000000000000000000
- master_repl_offset:14
- second_repl_offset:-1
- repl_backlog_active:1
- repl_backlog_size:1048576
- repl_backlog_first_byte_offset:1
- repl_backlog_histlen:14
- 192.168.4.51:6351>
4.测试
1)客户端连接主服务器存储数据
- [root@client50 ~]# redis-cli -h 192.168.4.51 –p 6351
- 192.168.4.51:6351> set x 9
- OK
- 192.168.4.51:6351> set y 8
- OK
- 192.168.4.51:6351> set z 7
- OK
- 192.168.4.51:6351>
2)在从服务器本机登录,查看数据(与主服务器数据一致)
- [root@redisB ~]# redis-cli -h 192.168.4.52 –p 6352
- 192.168.4.52:6352> keys *
- 1)“x”
- 2)“y”
- 3)“z”
- 192.168.4.52:6352>
三、带验证的主从复制
通过以上案例我们知道主从复制非常简单,只需要一台装有Redis的服务器,通过一条命令即可实现,但是这样非常的危险,因为任何一个知道主服务器ip和端口的操作员都可以通过配置主从复制来盗取主服务器上的数据,所以我们需要带验证的主从复制,即在进行主从配置的时候加入验证信息(输入验证密码)来确保安全性
1.设置主服务器192.168.4.51 设置连接密码123456
修改主服务器的配置文件,设置密码。
- [root@redisA ~]# vim +501 /etc/redis/6379.conf
- requirepass 123456 //设置密码
- :wq
- [root@redisA ~]# vim +43 /etc/init.d/redis_6379 //修改脚本
- $CLIEXEC -h 192.168.4.51 -p 6351 -a 123456 shutdown //添加密码
- :wq
- [root@redisA ~]# /etc/init.d/redis_6379 stop //停止服务
- [root@redisA ~]# /etc/init.d/redis_6379 start //启动服务
- Starting Redis server...
- [root@redisA ~]#
- [root@redisA ~]# netstat -utnlp | grep :6351 //查看端口
- tcp 0 0 192.168.4.51:6351 0.0.0.0:* LISTEN 11523/redis-server
2.配置从服务器192.168.4.52
1) 修改配置文件,设置从服务器连接密码。
- [root@redisB ~]# /etc/init.d/redis_6379 stop //停止服务
- [root@redisB ~]# vim +289 /etc/redis/6379.conf
- masterauth 123456 //设置密码
- :wq
- [root@redisA ~]# /etc/init.d/redis_6379 start //启动服务
- Starting Redis server...
- [root@redisA ~]#
- [root@redisA ~]# netstat -utnlp | grep :6351 //查看端口
- tcp 0 0 192.168.4.51:6351 0.0.0.0:* LISTEN 11523/redis-server
2) 在从服务器本机连接服务,查看复制信息
- [root@redisB ~]# redis-cli -h 192.168.4.52 –p 6352
- 192.168.4.52:6352> info replication //查看复制信息
- # Replication
- role:slave //从服务器
- master_host:192.168.4.51 //主服务器ip地址
- master_port:6351 //主服务器端口
- master_link_status:up //连接状态开启
- master_last_io_seconds_ago:3
- master_sync_in_progress:0
- ……
- ……
- 192.168.4.52:6352>