关于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节点默认配置的是只读模式。

相关推荐
龙门吹雪1 年前
阿里云环境下用docker搭建redis主从复制
redis·docker·数据同步·redis主从复制·一主二从
188_djh1 年前
# Redis 入门到精通(九)-- 主从复制(3)
数据库·redis·nosql·redis主从复制·key-value键值对数据库·redis开源键值对数据库·key-value
我可以将你更新哟2 年前
4-redis高级-redis持久化(RDB 持久化方案、AOF持久化、RDB和AOF混合持久化)、redis主从复制
redis·aof·rdb·redis主从复制