Redis主从架构(实现读写分离)

复制过程

主库会基于pingcheck方式检查从库是否在线,如果在线则直接同步数据文件至从服务端,从服务端也可以主动发送同步请求到主服务端,主库如果是启动了持久化功能时,会不断的同步数据到磁盘上,主库一旦收到从库的同步请求时,主库会将内存中的数据做快照,然后把数据文件同步给从库,从库得到以后是保存在本地文件中(磁盘),而后则把该文件装载到内存中完成数据重建,链式复制也如此同步,因为主是不区分真正的主,还是另外一个的从

1
2
3
1、启动slave
2、slave会向master发送同步命令,请求主库上的数据,不论从是第一次连接,还是非第一次连接,master此时都会启动一个后台的子进程将数据快照保存在数据文件中,然后把数据文件发送给slave
3、slave收到数据文件以后会保存到本地,而后把文件重载装入内存

说明

使用Redis的主从复制,master必须启用持久化功能,否则master一重启,数据清空,同时也会同步到slave节点一块清空数据

特点

1
2
3
1、一个Master可以有多个Slave;
2、支持链式复制(一个slave也可以是其他的slave的slave);
3、Master以非阻塞方式同步数据至slave(master可以同时处理多个slave的读写请求,salve端在同步数据时也可以使用非阻塞方式);

拓扑

PjS8tP.png

一、主从复制—读写分离部署

1
2
Master:192.168.10.27
Slave:192.168.10.21
1、两台主机分别安装redis

可参考之前文章《Redis源码安装for centos7》

2、确认master上已经启用了持久化
1
2
3
4
5
6
vim /etc/redis/redis.conf

save 900 1
save 300 10
save 60 10000
appendonly yes
3、在master上设置监听本机IP,否则slave无法连接上master
1
2
3
vim /etc/redis/redis.conf

bind 127.0.0.1 192.168.10.27
4、在salve启用复制功能
1
2
3
4
5
6
7
8
9
10
11
vim /etc/redis/redis.conf

slaveof 192.168.10.27 6379 ##指定master的IP和端口
slave-read-only yes ##设定slave为只读
slave-serve-stale-data yes ##表示当主服务器不可以用时,则无法判定数据是否过期,此时从服务器仍然接收到读请求时,yes表示仍然响应(继续使用过期数据)
repl-diskless-sync no ##是否基于diskless机制进行sync操作,一般情况下如果disk比较慢,网络带宽比较大时,在做复制时,此项可以改为Yes
repl-diskless-sync-delay 5 ##指定在slave下同步数据到磁盘的延迟时间,默认为5秒,0表示不延迟
slave-priority 100 ##指定slave优先级,如果有多个slave时,哪一个slave将优先被同步
#min-slaves-to-write 3 ##此项表示在主从复制模式当中,如果给主服务器配置了多个从服务器时,如果在从服务器少于3个时,那么主服务器将拒绝接收写请求,从服务器不能少于该项的指定值,主服务器才能正常接收用户的写请求
#min-slaves-max-lag 10 ##表示从服务器与主服务器的时差不能够相差于10秒钟以上,否则写操作将拒绝进行
#masterauth <master-password> ##此项是如果master设置了密码认证功能,slave服务器要使用该参数来指定master的密码来进行密码认证,否则slave无法连接上master
5、重启

先重启master,然后再重启slava

6、查看

在slave上查看:

1
2
3
4
5
6
7
127.0.0.1:6379> info

# Replication
role:slave
master_host:192.168.10.27
master_port:6379
master_link_status:up

在master上查看:

1
2
3
4
5
6
127.0.0.1:6379> info

# Replication
role:master
connected_slaves:1
slave0:ip=192.168.10.21,port=6379,state=online,offset=322,lag=0
7、测试一下主从复制

在master上set:

1
2
3
4
127.0.0.1:6379> set nong kaige
OK
127.0.0.1:6379> get nong
"kaige"

在slave上查看:

1
2
127.0.0.1:6379> get nong
"kaige"
8、测试一下读写分离

master肯定是可读写了,试试slave能不能写就知道是否成功了

1
2
127.0.0.1:6379> set hlh nzy
(error) READONLY You can't write against a read only slave.

二、一主多从

上边已经做了一主一从,一主多从就是按照上边的配置方法,多配置几个slave即可,配置完之后去主查看一下:

1
2
3
4
5
6
7
127.0.0.1:6379> info

# Replication
role:master
connected_slaves:2
slave0:ip=192.168.10.21,port=6379,state=online,offset=12265,lag=1
slave1:ip=192.168.10.29,port=6379,state=online,offset=12265,lag=1
博主QQ:1012405802
技术交流QQ群:830339411
版权声明:网站内容有原创和转载,如有侵权,请联系删除,谢谢!!
感谢打赏,93bok因你们而精彩!!(支付宝支持花呗)
0%