Redis三种集群方式_主从复制

一、概念

1、主从复制的原理

(1)从服务器向主服务器发送SYNC命令
(2)主服务器收到SYNC命令后,执行BGSAVE命令,在后台生成RDB文件,使用缓冲区记录从现在开始执行的所有的写命令。
(3)当主服务器的BGSAVE命令执行完毕后,主服务器后将BGSAVE命令生成的RDB文件发送给从服务器,从服务器接收并载入这个RDB文件,将自己的数据库状态更新至主服务器执行BGSAVE命令时的数据库状态。
(4)主服务器将记录在缓冲区里面的所有写命令发送给从服务器,从服务器执行这些写命令,将自己的数据库状态更新至主服务器数据库当前所处的状态。

2、一般规则

从数据库一般是只读的,并接受主数据库同步过来的数据。一个主数据库可以拥有多个从数据库,而一个从数据库只能拥有一个主数据库。

3、主服务从服务的区别

一个服务器去复制另一个服务器的数据。被复制的服务器称为Master主服务,对主服务器进行复制的服务器称为Slave从服务器。

4、主从复制的优点

(1)为了分载Master的读操作压力,Slave服务器可以为客户端提供只读操作的服务,写服务仍然必须由Master来完成,来进行读写分离;
(2)Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。
(3)Master Server是以非阻塞的方式为Slaves提供服务。所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求。
(4)Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据。

5、主从复制的缺点

(1)Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。
(2)主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
(3)Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。

二、搭建主从复制集群

1、主从复制主要有三种方式

(1)在配置文件中加入slaveof{masterHost}{masterPort}随着redis的启动生效。

(2)在redis-server启动命令之后加入--slaveof{masterHost}{masterPort}生效。

(3)直接使用命令:slaveof{masterHost}{masterPort}生效。

说明:本文操作使用第一种配置方式

2、服务节点说明

master : 主服务

slaves1 : 从服务

slaves2 : 从服务

3、在master上搭建redis,并更改redis.conf一些主要配置

daemonize yes
port 6379
bind 192.168.230.21
requirepass 123456

4、将在master上搭建好的redis,复制到slaves1相同位置,并更改redis.conf主要配置

daemonize yes
port 6379
bind 192.168.230.22
requirepass 123456

#连接主机和端口号
slaveof master 6379
#设置连接的主机密码
masterauth 123456

5、将在master上搭建好的redis,复制到slaves2相同位置,并更改redis.conf主要配置

daemonize yes
port 6379
bind 192.168.230.23
requirepass 123456

#连接主机和端口号
slaveof master 6379
#设置连接的主机密码
masterauth 123456

三、测试

1、连接主服务并设置值

[root@master bin]# ./redis-server ./redis.conf 
[root@master bin]# netstat -lnp | grep 6379
tcp        0      0 192.168.230.21:6379     0.0.0.0:*               LISTEN      4065/./redis-server 
[root@master bin]# ./redis-cli -h 192.168.230.21 -a 123456
192.168.230.21:6379> DBSIZE
(integer) 0
192.168.230.21:6379> set name zhangsanfeng
OK
192.168.230.21:6379> select 2
OK
192.168.230.21:6379[2]> set name zhangsan
OK
192.168.230.21:6379[2]> 

2、连接从服务slaves1验证

[root@slaves1 bin]# netstat -lnp | grep 6379
[root@slaves1 bin]# ./redis-server ./redis.conf 
[root@slaves1 bin]# ./redis-cli -h 192.168.230.22 -a 123456
192.168.230.22:6379> DBSIZE
(integer) 0
192.168.230.22:6379> DBSIZE
(integer) 1
192.168.230.22:6379> get name
"zhangsanfeng"
192.168.230.22:6379> select 2
OK
192.168.230.22:6379[2]> DBSIZE
(integer) 1
192.168.230.22:6379[2]> get name
"zhangsan"
192.168.230.22:6379[2]> 

3、 连接从服务slaves2验证

[root@slaves2 bin]# netstat -lnp | grep 6379
[root@slaves2 bin]# ./redis-server ./redis.conf 
[root@slaves2 bin]# ./redis-cli -h 192.168.230.23 -a 123456
192.168.230.23:6379> DBSIZE
(integer) 0
192.168.230.23:6379> DBSIZE
(integer) 1
192.168.230.23:6379> get name
"zhangsanfeng"
192.168.230.23:6379> select 2
OK
192.168.230.23:6379[2]> DBSIZE
(integer) 1
192.168.230.23:6379[2]> get name
"zhangsan"
192.168.230.23:6379[2]> 
说明:
当一个从服务宕机期间,主服务做了好多操作,比如增加了一些数据。当这个从服务重新启动的时候,还会恢复宕机期间未同步复制的数据;
redis.conf中设置:slave-read-only yes // 这个配置是强制性的读写分类 从节点只能做读操作
发布了143 篇原创文章 · 获赞 12 · 访问量 8602

猜你喜欢

转载自blog.csdn.net/hyj_king/article/details/105135408