Redis集群-主从复制搭建
主机规划
主机IP | 角色 | 端口 |
192.168.77.145 | master | 6379 |
192.168.77.146 | slave | 6379 |
192.168.77.147 | slave | 6379 |
redis安装
配置主节点
主节点无需做任何配置,按照单实例标准化规划部署即可。
配置从节点
方式一:通过修改配置文件指定主节点
在redis配置文件中使用replicaof
将该节点设置为从服务器,如将192.168.77.147:6379节点配置为192.168.77.145:6379主节点的从节点:
[root@dbc ~]# vim /opt/redis/conf/redis.conf
......
replicaof 192.168.77.145 6379
#此外还需配置masterauth安全认证,主要是针对master对应的slave节点设置的,在slave节点数据同步的时候用到
masterauth 123456
说明:在5.0.0之前的版本中使用
SLAVEOF
作为复制命令
配置完成后重启redis服务。
方式二:命令行通过replicaof命令设置从服务器
在redis配置文件中使用replicaof
将该节点设置为从服务器,如将192.168.77.146:6379节点配置为192.168.77.145:6379主节点的从节点:
127.0.0.1:6379> replicaof 192.168.77.145 6379
OK
127.0.0.1:6379> CONFIG set masterauth 123456
OK
127.0.0.1:6379> CONFIG REWRITE
OK
注意:在命令行使用
replicaof host port
方式配置从节点一定要记得配置masterauth
,因为在进行主从复制时需要进行身份验证,然后使用CONFIG REWRITE
将配置落盘到配置文件中。
验证
主节点验证,可以看到当前role为master,有2个从节点。
[root@dba ~]# redis-cli -a 123456 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.77.146,port=6379,state=online,offset=4718,lag=1
slave1:ip=192.168.77.147,port=6379,state=online,offset=4718,lag=1
master_failover_state:no-failover
master_replid:320bbe6cb606c948e80ba0d20e0e8b53f3fc1675
master_replid2:ce5017ebd60f1b313a11972194a74478093ed0c5
master_repl_offset:4718
second_repl_offset:4719
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2059
repl_backlog_histlen:2660
从节点1验证,可以看到当前role为slave,主节点为192.168.77.145:6379
[root@dbb ~]# redis-cli -a 123456 info replication
# Replication
role:slave
master_host:192.168.77.145
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_read_repl_offset:5446
slave_repl_offset:5446
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:320bbe6cb606c948e80ba0d20e0e8b53f3fc1675
master_replid2:ce5017ebd60f1b313a11972194a74478093ed0c5
master_repl_offset:5446
second_repl_offset:4719
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2157
repl_backlog_histlen:3290
从节点2验证,可以看到当前role为slave,主节点为192.168.77.145:6379
[root@dbc ~]# redis-cli -a 123456 info replication
# Replication
role:slave
master_host:192.168.77.145
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_read_repl_offset:3276
slave_repl_offset:3276
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:ce5017ebd60f1b313a11972194a74478093ed0c5
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3276
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:3277
repl_backlog_histlen:0
取消复制
在使用REPLICAOF命令或者replicaof配置选项将一个服务器设置为从服务器之后,可以通过执行replicaof no one
命令让从服务器停止复制,重新变回主服务器,且服务器在停止复制之后不会清空数据库,会继续保留复制产生的所有数据。