Redis主从复制
主从复制原理
1.从库向主库发起同步请求
2.主库接收到从库的同步请求
3.主库开始bgsave生成rdb文件
4.主库生成完成之后,保存在磁盘成功
5.主库将RBD文件发送给从库
6.从库接收主库的rdb文件
7.从库清空自己所有数据
8.从库将接受的rdb文件载入到内存中
主从复制日志讲解
危险操作
如果主库不小心同步了空的从库,会导致主库的数据全部丢失!!!
请谨慎操作,尽量可以使用配置文件中修改的方式来进行。
主机信息
-
db1 192.168.40.1 master -
db2 192.168.40.4 slave
主从复制操作方法一
第一个方法的直接在redis库中执行命令让数据库同步这样的操作有一定的风险如果数据库方向操作则会导致数据丢失。
#首先启动redis,然后向主库中插入数据。
[root@localhost redis_6379]# redis-cli
#我这之前插入的还有两千条数据
127.0.0.1:6379> DBSIZE
(integer) 20001
搭建redis从库
#可以直接将主库的redis文件复制到从库的服务器
rsync -avz redis_cluster/ 192.168.40.4:/opt/
#因为主从的配置文件中设计到的本地ip是不一样的需要手动改一下,找到以下内容手动修改成本地ip
### 绑定的主机地址
bind 127.0.0.1 192.168.40.4
#然后启动从库的redis
使用命令实现主从复制
这样操作的问题是临时同步的如果数据库重启那主从关系就不存在了。
#在保证主库有数据的情况下,连接从库
[root@localhost redis_6379]# redis-cli
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379>
#从库的数据是空的就可以执行同步的命令把主库的数据同步到从库
#redis的主从复制操作比较简单就只有“SLAVEOF”这么一条命令
127.0.0.1:6379> SLAVEOF 192.168.40.1 6379
OK
#然后过一会就可以查看到所有的数据都同步过来了,同步的原理可以看最前面的
127.0.0.1:6379> DBSIZE
(integer) 20001
临时关闭主从的命令
#使用SLAVEOF no one命令可以关闭数据库的主从关系
127.0.0.1:6379> SLAVEOF no one
OK
127.0.0.1:6379> CONFIG GET slaveof
1) "slaveof"
2) ""
主从复制方法二
方法二比较稳定是通过修改从库的conf配置文件
#vim打开配置文件在最下面添加这一行
vim conf/redis_6379.conf
slaveof 192.168.40.1 6379
#然后我们删除本地的redis_6379.rdb文件
#关闭在启动reidis
[root@localhost redis_6379]# redis-cli shutdown
#启动redis
[root@localhost redis_6379]# redis-server conf/redis_6379.conf
#查询可以看到同步已经生效
127.0.0.1:6379> DBSIZE
(integer) 20001
127.0.0.1:6379> CONFIG GET slaveof
1) "slaveof"
2) "192.168.40.1 6379"
主从复制效果测试
#在主库db1上创建了name zhangsan
127.0.0.1:6379> set name zhangsan
OK
#在从库上查询
127.0.0.1:6379> get name
"zhangsan"
|