1、 主从复制的工作过程
Redis 的主从复制是自动进行的,并不需要用户的介入,slave 端会自动连接 master 并进行数据同步。如果同步连接时 slave 端短暂的与 master 端断开了连接,那连接恢复后 slave 端会与 master 端进行一次同步。从而保证数据一致。
2、 搭建 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 配置文件
改:69 bind 127.0.0.1
为:69 bind 0.0.0.0 #redis 监听的地址,默认监听在 127.0.0.1 地址上,改为 0.0.0.0 地
址或 192.168.1.63。
改:507 # requirepass foobared #启用此项,并指定密码即可。
为: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 行。
改: # replicaof <masterip> <masterport> #修改此项如下。
为: replicaof 192.168.8.131 6379
改: # masterauth <master-password>
为: masterauth 123456 #写上 redis 主的密码。如果 redis 主没有密码,这里可不写。
[root@redis132 ~]# systemctl start redis #启动 redis。
5、登录 redis132 主机上查看主从复制状态
[root@redis132 ~]# redis-cli #登录 redis。
127.0.0.1:6379> info replication
# Replication
role:slave #角色:slave。
master_host:192.168.1.63 #主服务器 IP。
master_port:6379 #主服务端口。
master_link_status:up #主服务器连接状态为 up,说明已经主从同步上了
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:3287
slave_priority:100
slave_read_only:1 #成为从服务以后,1 表示该服务器为只读。
。。。
6、登录redis131 主机上查看主从复制信息
[root@redis131 ~]# redis-cli #登录 Redis。
127.0.0.1:6379> AUTH 123456
OK
127.0.0.1:6379> info replication
# Replication
role:master #角色:master。
connected_slaves:1 #从服务器数量。
slave0:ip=192.168.1.64,port=6379,state=online,offset=3469,lag=1 #从服务器信息。
…
7、在 redis132 上验证主从复制
登录 Redis 主服务,并创建一个 user 键。
[root@redis131 ~]# redis-cli
127.0.0.1:6379> AUTH 123456
OK
127.0.0.1:6379> set user mk
OK
8、登录 Redis 从服务,获取在主服务上创建的 user 键
[root@redis132 ~]# redis-cli
127.0.0.1:6379> get user #可以查看到键值,说明主从数据同步成功。
"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 将拒绝接收用户的写请求 |