飞道的博客

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

317人阅读  评论(0)

一、概念

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一些主要配置


   
  1. daemonize yes
  2. port 6379
  3. bind 192.168.230.21
  4. requirepass 123456

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


   
  1. daemonize yes
  2. port 6379
  3. bind 192.168.230.22
  4. requirepass 123456
  5. #连接主机和端口号
  6. slaveof master 6379
  7. #设置连接的主机密码
  8. masterauth 123456

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


   
  1. daemonize yes
  2. port 6379
  3. bind 192.168.230.23
  4. requirepass 123456
  5. #连接主机和端口号
  6. slaveof master 6379
  7. #设置连接的主机密码
  8. masterauth 123456

三、测试

1、连接主服务并设置值


   
  1. [root@master bin]# ./redis-server ./redis.conf
  2. [root@master bin]# netstat -lnp | grep 6379
  3. tcp 0 0 192.168.230.21:6379 0.0.0.0:* LISTEN 4065/./redis-server
  4. [root@master bin]# ./redis-cli -h 192.168.230.21 -a 123456
  5. 192.168.230.21:6379> DBSIZE
  6. (integer) 0
  7. 192.168.230.21:6379> set name zhangsanfeng
  8. OK
  9. 192.168 .230 .21: 6379> select 2
  10. OK
  11. 192.168 .230 .21: 6379[ 2]> set name zhangsan
  12. OK
  13. 192.168 .230 .21: 6379[ 2]>

2、连接从服务slaves1验证


   
  1. [root@slaves1 bin] # netstat -lnp | grep 6379
  2. [root@slaves1 bin] # ./redis-server ./redis.conf
  3. [root@slaves1 bin] # ./redis-cli -h 192.168.230.22 -a 123456
  4. 192.168.230.22:6379> DBSIZE
  5. (integer) 0
  6. 192.168.230.22:6379> DBSIZE
  7. (integer) 1
  8. 192.168.230.22:6379> get name
  9. "zhangsanfeng"
  10. 192.168.230.22:6379> select 2
  11. OK
  12. 192.168.230.22:6379[2]> DBSIZE
  13. (integer) 1
  14. 192.168.230.22:6379[2]> get name
  15. "zhangsan"
  16. 192.168.230.22:6379[2]>

3、 连接从服务slaves2验证


   
  1. [root@slaves2 bin]# netstat -lnp | grep 6379
  2. [root@slaves2 bin]# ./redis-server ./redis.conf
  3. [root@slaves2 bin]# ./redis-cli -h 192.168.230.23 -a 123456
  4. 192.168.230.23:6379> DBSIZE
  5. (integer) 0
  6. 192.168.230.23:6379> DBSIZE
  7. (integer) 1
  8. 192.168.230.23:6379> get name
  9. "zhangsanfeng"
  10. 192.168.230.23:6379> select 2
  11. OK
  12. 192.168 .230 .23: 6379[ 2]> DBSIZE
  13. ( integer) 1
  14. 192.168 .230 .23: 6379[ 2]> get name
  15. "zhangsan"
  16. 192.168 .230 .23: 6379[ 2]>
说明:
当一个从服务宕机期间,主服务做了好多操作,比如增加了一些数据。当这个从服务重新启动的时候,还会恢复宕机期间未同步复制的数据;

转载:https://blog.csdn.net/hyj_king/article/details/105135408
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场