关于Redis的主从复制功能
目录
一、主从配置管理
1.1、建立复制
1.2、断开复制
1.3、安全性
1.4、只读(默认)
1.5、传输延迟
二、部署Redis主从复制
2.1、案例环境
2.2、案例步骤推荐
一、主从配置管理
1.1、建立复制
主从复制配置方式有三种:
-
在配置文件中加入slaveof {masterHost} {masterPort}随Redis启动生效,CONFIG SET masterauth "your_master_password"配置密码
-
在redis-server启动命令后加入--slaveof {masterHost} {masterPort}
-
直接使用命令redis-cli -h IP slaveof {masterHost} {masterPort}生效。
1.2、断开复制
slaveof命令不但可以建立复制,也可以执行slaveof no one来断开与主节点复制关系。
1.3、安全性
主节点通常会设置requirepass参数进行密码验证,这时所有的客户端访问必须使用auth命令实行校验。因此需要在从节点配置masterauth参数与主节点密码保持一致。
1.4、只读(默认)
默认情况下,从节点使用slave-read-only=yes配置为只读模式。由于复制只能从主节点到从节点,对于从节点的任何修改主节点都是无法感知的,修改从节点会造成主从数据不一致。因此建议线上将从节点设置为只读模式。
1.5、传输延迟
主从节点一般在不同机器上,复制时的网络延迟就成为需要考虑的问题,Redis为我们提供了repl-disable-tcp-nodelay参数用于控制是否关闭TCP_NODELAY,默认为no,为开启状态。
设置为no时,表示开启TCP_NODELAY,允许小包发送,使得网络延迟变小,但是会增加网络带宽消耗。
设置为yes时,表示关闭TCP_NODELAY,主节点会将小包合并发送,默认发送时间间隔取决于Linux内核,一般为40ms。节省了带宽,但是增大了延迟。
二、部署Redis主从复制
2.1、案例环境
| 系统 | IP地址 | Redis角色及端口 |
|---|---|---|
| openEuler 24.03 | 192.168.150.34 | master:6379 |
| openEuler 24.03 | 192.168.150.35 | slave:6379(6379.conf)slave:6380(6380.conf) |
2.2、案例步骤推荐
-
安装并配置master角色的redis服务;
-
安装并配置slave角色的redis服务(双实例);
-
验证主从复制功能;
环境准备
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install -y redis
配置slave角色的redis服务
[root@localhost ~]# vim /etc/redis.conf# replicaof <masterip> <masterport>replicaof 192.168.150.34 6379 #指定masterIP地址及监听端口#bind 127.0.0.1 -::1
bind 192.168.150.35 #设置监听IP地址protected-mode no #关闭redis保护模式
启动服务
[root@localhost ~]# systemctl start redis
登录slave查看信息
[root@localhost ~]# redis-cli -h 192.168.150.35
192.168.150.35:6379>
192.168.150.35:6379> info
# Replication
role:slave
master_host:192.168.150.34
master_port:6379
master_link_status:up
master_last_io_seconds_ago:9
master_sync_in_progress:0
slave_read_repl_offset:126
slave_repl_offset:126
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:2c3a929a473738253bc95422b4e0c02228c3079e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:126
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:126
在redis-server启动命令后加入--slaveof {masterHost} {masterPort} 配置第二台slave
[root@localhost ~]# vim /etc/redis.conf#bind 127.0.0.1 -::1
bind 192.168.150.36 #设置监听IP地址protected-mode no #关闭redis保护模式
[root@localhost ~]# redis-cli -h 192.168.150.36
192.168.150.36:6379> SLAVEOF 192.168.150.34 6379
OK
192.168.150.36:6379> info
# Replication
role:slave
master_host:192.168.150.34
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_read_repl_offset:1050
slave_repl_offset:1050
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:2c3a929a473738253bc95422b4e0c02228c3079e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1050
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:981
repl_backlog_histlen:70
验证主从复制
master
[root@localhost ~]# redis-cli -h 192.168.150.34
192.168.150.34:6379> keys *
1) "d"
192.168.150.34:6379> get d
"hello"
slave1
192.168.150.35:6379> keys *
1) "d"
192.168.150.35:6379> get d
"hello"
slave2
192.168.150.36:6379> keys *
1) "d"
192.168.150.36:6379> get d
"hello"
192.168.150.35:6379> set a hello
(error) READONLY You can't write against a read only replica.
可以发现在slave节点上无法执行写操作,因为slave节点默认配置的是只读模式。
