redis主从同步
redis 主从同步
原理:
1. 从服务器向主服务器发送 SYNC 命令。
2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令。
3. 当主服务器执行完 BGSAVE 命令时,它会向从服务器发送 RDB 文件,而从服务器则会接收并载入这个文件。
4. 主服务器将缓冲区储存的所有写命令发送给从服务器执行。
-------------
1、在开启主从复制的时候,使用的是RDB方式的,同步主从数据的
2、同步开始之后,通过主库命令传播的方式,主动的复制方式实现
3、2.8以后实现PSYNC的机制,实现断线重连
实验
准备三个redis配置文件,通过端口的区分,启动三个redis数据库实例,然后配置主从复制
1 . 新建三个文件 :
[root@localhost redis-4.0.10]#touch redis-6379.conf [root@localhost redis-4.0.10]#touch redis-6380.conf [root@localhost redis-4.0.10]#touch redis-6381.conf
2 . 配置各个文件
[root@localhost redis-4.0.10]# redis-6379.conf port 6379 daemonize yes pidfile /data/6379/redis.pid loglevel notice logfile "/data/6379/redis.log" dbfilename dump.rdb dir /data/6379
3 . 创建存放 6380,6381的文件
mkdir -p /data/{6380,6381}
4 . 快速创建 6380,6381的 redis.conf 的配置
redis-6380.conf : #通过命令快速生成配置文件 (s=替换,g=全局,将6379全部替换成6380,然后写入到redis-6380.conf) [root@localhost redis-4.0.10]# sed "s/6379/6380/g" redis-6379.conf > redis-6380.conf [root@localhost redis-4.0.10]# echo "slaveof 127.0.0.1 6379 " >> redis-6380.conf #追加写入 指明主库的身份ip 和端口 redis-6381.conf : #通过命令快速生成配置文件 [root@localhost redis-4.0.10]# sed "s/6379/6381/g" redis-6379.conf > redis-6381.conf [root@localhost redis-4.0.10]# echo "slaveof 127.0.0.1 6379 " >> redis-6381.conf #追加写入 指明主库的身份ip 和端口
5 . 启动三个数据库实例,坚持redis主从同步方案
启动三个redis
redis-server redis-6379.conf redis-server redis-6380.conf redis-server redis-6381.conf
查看各个端口的详细信息
[root@localhost redis-4.0.10]# redis-cli -p 6379 info # 查看Replication 授权信息 # role: master 角色:主人/主库 # connected_slaves:2 从库有2个 [root@localhost redis-4.0.10]# redis-cli -p 6380 info # 查看Replication 授权信息 # role: slave 角色:奴隶/从库 # master_host:127.0.0.1 # master_host:6379 主人信息 [root@localhost redis-4.0.10]# redis-cli -p 6381 info # 查看Replication 授权信息 # role: slave 角色:奴隶/从库 # master_host:127.0.0.1 # master_host:6379 主人信息
6 . 手动进行主从复制故障切换
# 1.杀死6379的主库实例 kill -9 主库 # 2.手动切换主从身份 1.登录 redis-6380 ,通过命令,去掉自己的从库身份,等待连接 127.0.0.1:6380 > slaoveof no one 127.0.0.1:6380 > info replication #查看状态 2.登录redis-6381 ,通过命令,生成新的主人 slaveof 127.0.0.1 6380 # 3.测试新的主从数据同步 #在主库中添加数据 127.0.0.1:6380 > set name hhh 127.0.0.1:6380 > set age 18 127.0.0.1:6380 > keys * "name" "age" 127.0.0.1:6380 > # 在登录从库 127.0.0.1:6380 > keys * "name" "age" 127.0.0.1:6380 >