什么是主从复制?
有多个redis实例,其中一个为master, 其它的为salve, master既可以读又可以写, master的数据也会写入slave库中,但salve则只能读不能写.
评价复制的原理是什么?
1. 从服务器向主服务器发送 SYNC 命令。
2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令。
3. 当主服务器执行完 BGSAVE 命令时,它会向从服务器发送 RDB 文件,而从服务器则会接收并载入这个文件。
4. 主服务器将缓冲区储存的所有写命令发送给从服务器执行。
可以看到,最开始同步时需要通过RDB模式复制原有的数据库,而后面的则是通过AOF模式.
主从复制有什么好处?
高可用,因为redis是保存在数据库中,通过主从复制,保证数据库高可用
master.conf
port 6380 daemonize yes pidfile /data/6380/redis.pid loglevel notice logfile "/data/6380/redis.log" dbfilename dump.rdb dir /data/6380 protected-mode no |
slave1.conf
port 6381 daemonize yes pidfile /data/6381/redis.pid loglevel notice logfile "/data/6381/redis.log" dbfilename dump.rdb dir /data/6381 protected-mode no |
slave2.conf
port 6382 daemonize yes pidfile /data/6382/redis.pid loglevel notice logfile "/data/6382/redis.log" dbfilename dump.rdb dir /data/6382 protected-mode no |
启动三个实例:
redis-server master.conf redis-server slave1.conf redis-server slave2.conf |
设置主从
redis-cli -p 6381 SLAVEOF 127.0.0.1 6380 #指明主的地址
redis-cli -p 6382 SLAVEOF 127.0.0.1 6380 #指明主的地址 |
检查主从的状态
127.0.0.1:6380> info replication 127.0.0.1:6381> info replication 127.0.0.1:6382> info replication |
当主库意外挂掉要怎么切换?
- 关掉从库6381的slave身份
- 关掉从库6382的slave身份
- 将6382设置为6381的slave
- 命令
-
redis-cli -p 6381
info replication
slaveof no one
redis-cli -p 6382
127.0.0.1:6382> SLAVEOF no one
127.0.0.1:6382> SLAVEOF 127.0.0.1 6381
-