redis主从复制实际操作

一、主从复制说明

在实际的场景当中单一节点的redis容易面临风险。
比如:
机器故障。我们部署到一台 Redis 服务器,当发生机器故障时,需要迁移到另外一台服务器并且要保证数据是同步的。而数据是最重要的,如果你不在乎, 基本上也就不会使用 Redis 了。
1.2 什么是主从复制
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到 从节点。
默认情况下,每台Redis服务器都是主节点,且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
二、主从复制的作用
主从复制的作用主要包括:
1、数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
2、故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
3、负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据 时应用连接从节点) 分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

4、读写分离:可以用于实现读写分离,主库写、从库读,读写分离不仅可以提高服务器的负载能力,同时可根据需求的变化,改变从库的数量;
5、高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
三、启动主从redis容器

1、创建主从redis容器并启动进入容器

#主节点
docker run -itd -v /docker/redis/master:/usr/src/redis -p 6380:6379 --network=mynetwork --ip 172.18.0.2 --name redis-master redis

#从节点
docker run -itd -v /docker/redis/slave:/usr/src/redis -p 6381:6379 --network=mynetwork --ip 172.18.0.4 --name redis-slave redis

#创建好了容器,然后进入主节点容器
docker exec -it redis-master bash(如果用的是centos系统则用这个命令)
docker exec -it redis-master sh(如果用的是alpine系统则用这个命令)

2、修改配置(主从配置:需要在从机上配置,主机不需要配置)

 

3、进入主从redis

#进入主机命令
docker exec -it redis-master bash(centos系统命令)
docker exec -it redis-master sh(alpine系统命令)


#进入从机命令
docker exec -it redis-slave bash(centos系统命令)
docker exec -it redis-slave sh(alpine系统命令)

redis-cli -a 密码

 4、在从机上配置

SLAVEOF 外网ip地址 主机映射端口
SLAVEOF 139.159.141.107 6380

info replication #查看主从配置是否成功

master_repl_offset :主机偏移量

5、验证主从机写入数据和读取数据

 

四、主从复制原理

主从配置之后的日志记录也可以看出这个流程

五、、主从复制的常用相关配置

1、从数据库配置
1) slaveof <masterip> <masterport>
slave实例需要配置该项,指向master的(ip, port)。


2) masterauth <master-password>
如果master实例启用了密码保护,则该配置项需填master的启动密码;若master未启用密码,该配置项需要注释掉


3) slave-serve-stale-data
指定 slave 与 master 连接中断时的动作。默认为yes,表明slave会继续应答来自client的请求,但这些数据可能已经过期(因为连接中断导致无法从 master 同步)。 若配置为no,则slave除正常应答"INFO"和"SLAVEOF"命令外,其余来自客户端的请求命令均会得到" SYNC with master in progress "的应答,直到该 slave 与 master 的连接重建成功或该 slave 被提升为 master 。

4) slave-read-only
指定slave是否只读,默认为yes。若配置为no,这表示slave是可写的,但写的内容在主从同步完成后会被删掉。


5) repl-disable-tcp-nodelay
指定向slave同步数据时,是否禁用 socket 的 NO_DELAY 选项。若配置为yes,则禁用 NO_DELAY ,则TCP协议栈会合并小包统一发送,这样可以减少主从节点 间的包数量并节省带宽,但会增加数据同步到slave的时间。 若配置为no,表明启用 NO_DELAY ,则TCP协议栈不会延迟小包的发送时机,这样数据同步的延时会减少,但需要更大的带宽。通常情况下,应该配置为no以降 低同步延时,但在主从节点间网络负载已经很高的情况下,可以配置为yes。


6) slave-priority
指定 slave 的优先级。在不只1个 slave 存在的部署环境下,当 master 宕机时, Redis Sentinel 会将priority值最小的slave提升为master。需要注意的是,若 该配置项为0,则对应的slave永远不会被 Redis Sentinel 自动提升为 master 。

2、主库配置

1)在slave和master同步后(发送psync/sync),后续的同步是否设置成TCP_MODELAY加入设置成yes,则redis会合并小的TCP包从而节省带宽,签字关注性能,后者关注一致性

repl-disable-tcp-nodelay no

2)从库按照一个小时时间间隔向主库发送PING命令来判断主服务器是否在线,默认是10s

repl-ping-slave-period 10

3)复制积压缓冲区大小设置

repl-backlog-size 1mb

4)master没有slave一段时间会释放复制缓冲区的内存,redis-backlog-ttl用来设置该时间长度。单位为秒。

repl-backlog-ttl 3600

5)设置某个时间段内,如果从库数量小于该某个值则不允许主机进行写操作,以上参数标书10秒内如果主库的从节点小于3个,则主库不接受写请求

min-slaves-to-write 3

min-slaves-max-lag 10

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值