搭建 Redis 主从复制架构

1、 主从复制的工作过程

Redis 的主从复制是自动进行的,并不需要用户的介入,slave 端会自动连接 master 并进行数据同步。如果同步连接时 slave 端短暂的与 master 端断开了连接,那连接恢复后 slave 端会与 master 端进行一次同步。从而保证数据一致。

2、 搭建 redis 主从架构

配置redis131 为 redis 主:

1. 在redis131 主机上安装 Redis

[root@redis131 ~]# yum -y install epel-release #安装 epel 源。
[root@redis131 ~]# yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm #安装 remi 源。
[root@redis131 ~]# yum —enablerepo=remi install -y redis #安装 Redis。

2、修改redis131 主机上的 Redis 配置文件

  1. 改:69 bind 127.0.0.1
  2. 为:69 bind 0.0.0.0 #redis 监听的地址,默认监听在 127.0.0.1 地址上,改为 0.0.0.0 地
  3. 址或 192.168.1.63
  4. 改:507 # requirepass foobared #启用此项,并指定密码即可。
  5. 为:507 requirepass 123456 #指定密码为123456。

[root@redis131 ~]# systemctl restart redis #重启服务。
[root@redis131 ~]# iptables -F
配置 redis132 为 redis 从,

3.在 redis132 主机上安装 Redis

[root@redis132 ~]# yum -y install epel-release #安装 epel 源。
[root@redis132 ~]# yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
#安装 remi 源。
[root@redis132 ~]# yum —enablerepo=remi install -y redis #安装 Redis。

4、修改 redis132 主机上的 Redis 配置文件

[root@redis132 ~]# vim /etc/redis.conf #修改第 286 行。

  1. 改: # replicaof <masterip> <masterport> #修改此项如下。
  2. 为: replicaof 192.168.8.131 6379
  3. 改: # masterauth <master-password>
  4. 为: masterauth 123456 #写上 redis 主的密码。如果 redis 主没有密码,这里可不写。

image.png
[root@redis132 ~]# systemctl start redis #启动 redis。

5、登录 redis132 主机上查看主从复制状态

  1. [root@redis132 ~]# redis-cli #登录 redis。
  2. 127.0.0.1:6379> info replication
  3. # Replication
  4. role:slave #角色:slave。
  5. master_host:192.168.1.63 #主服务器 IP。
  6. master_port:6379 #主服务端口。
  7. master_link_status:up #主服务器连接状态为 up,说明已经主从同步上了
  8. master_last_io_seconds_ago:7
  9. master_sync_in_progress:0
  10. slave_repl_offset:3287
  11. slave_priority:100
  12. slave_read_only:1 #成为从服务以后,1 表示该服务器为只读。
  13. 。。。

6、登录redis131 主机上查看主从复制信息

  1. [root@redis131 ~]# redis-cli #登录 Redis。
  2. 127.0.0.1:6379> AUTH 123456
  3. OK
  4. 127.0.0.1:6379> info replication
  5. # Replication
  6. role:master #角色:master。
  7. connected_slaves:1 #从服务器数量。
  8. slave0:ip=192.168.1.64,port=6379,state=online,offset=3469,lag=1 #从服务器信息。

7、在 redis132 上验证主从复制

登录 Redis 主服务,并创建一个 user 键。

  1. [root@redis131 ~]# redis-cli
  2. 127.0.0.1:6379> AUTH 123456
  3. OK
  4. 127.0.0.1:6379> set user mk
  5. OK

8、登录 Redis 从服务,获取在主服务上创建的 user 键

  1. [root@redis132 ~]# redis-cli
  2. 127.0.0.1:6379> get user #可以查看到键值,说明主从数据同步成功。
  3. "mk"

3、 查看 redis 从服务器上有关主从复制的高级配置参数

[root@redis131 ~]# vim /etc/redis.conf #保持默认参数就可以,不需要修改
#### SNAPSHOTTING #### #定义快照存储的策略,定义存到硬盘的持久化策略。

save #使用 save 指令,并指定每隔多少秒,如果发生多大变化,进行存储。
save 900 1 #表示在 900 秒(15 分钟内),如果至少有 1 个键发生改变,则做一次快照(持久化)
save 300 10 #表示在 300 秒(5 分钟内),如果至少有 10 个键发生改变,则做一次快照(持久化)
save 60 10000 #表示在 60 秒(1 分钟内),如果至少有 10000 个键发生改变,则做一次快照(持久化)。
307 replica-serve-stale-data yes #当 slave 端在主从复制的过程中与 master 端断开了连接,此时有 2 种处理方法:一种是继续提供服务即使数据可能不是最新的,另一种是对请求返回一个错误信息,默认配置是继续提供服务。replica [ˈˈreplɪɪkəə] 复制品 ; stale [steɪɪl] 不新鲜的
323 replica-read-only yes #redis 从只读。自 redis 2.6 版本开始,slave 端默认为 readonly
354 repl-diskless-sync no #默认不使用 diskless 同步方式 。
扩展:主从同步支持两种策略,即 disk 和 socket 方式(socket 方式尚不完善,还处于实验阶段)。
新的 slave 端和重连的 salve 端不允许去继续同步进程,这被称之为“完全同步”。
一个 RDB 文件从 master 端传到 slave 端,分为两种情况:
1、支持 disk:master 端将 RDB file 写到 disk,稍后再传送到 slave 端;
2、无磁盘 diskless:master 端直接将 RDB file 传到 slave socket,不需要与 disk 磁盘进行交互。无磁盘 diskless 方式适合磁盘读写速度慢但网络带宽非常高的环境。
366 repl-diskless-sync-delay 5 #无磁盘 diskless 方式在进行数据传递之前会有一个时间的延迟,以便 slave 端能够进行到待传送的目标队列中,这个时间默认是 5 秒 。
372 # repl-ping-replica-period 10 #slave 端向 server 端发送 pings 的时间区间设置,默认为10 秒
384 # repl-timeout 60 #设置超时时间
399 repl-disable-tcp-nodelay no #是否启用 TCP_NODELAY,如果启用则会使用少量的 TCP包和带宽去进行数据传输到 slave 端,当然速度会比较慢;如果不启用则传输速度比较快,但是会占用比较多的带宽。
412 # repl-backlog-size 1mb #设置 backlog 的大小,backlog 是一个缓冲区,在 slave 端失连时存放要同步到 slave 的数据,因此当一个 slave 要重连时,经常是不需要完全同步的,执行局部同步就足够了。backlog 设置的越大,slave 可以失连的时间就越长。
425 # repl-backlog-ttl 3600 #如果一段时间后没有 slave 连接到 master,则 backlog size 的内存将会被释放。如果值为 0 则表示永远不释放这部份内存。 默认是 3600 秒
440 replica-priority 100 #slave 端的优先级设置,值是一个整数,数字越小表示优先级越高。当master 故障时将会按照优先级来选择 slave 端进行恢复,如果值设置为 0,则表示该 slave 永远不会被选择。
456 # min-replicas-to-write 3
457 # min-replicas-max-lag 10 #这两行的意思是,设置当一个 master 端的可用 slave 少于 N个,延迟时间大于 M 秒时,不接收写操作。当 master 可用的从服务器少于 3 个或网络延迟时间大于 10秒时,master 将拒绝接收用户的写请求