Redis主从复制原理及实战配置部署过程

redis-主从复制(简介):

(master-replicaset)

mysql是从库拉取主库的binlog实现主从复制

redis是主库推送到从库rdb文件实现主从复制

redis主从复制原理:
1)从库向主库发送sync命令。
2)主库接收到sync命令会调用bgsave命令,创建一个RDB文件,并使用缓冲区记录接下来执行的所有写命令
3)当主库执行完bgsave命令时,它会向从库发送RDB文件,而从库则接收RDB文件并载入RDB文件
4)主库将缓冲区储存的所有写命令发送给从库执行

-------------------------------------------------------------------------------------

1)在开启主从复制的时候,使用的RDB方式同步主从数据的
2)同步开始后,主库通过传送命令到从库的方式实现主从复制
3)2.8版本以后实现psync的机制,实现断线重连

复制一致性问题:

在读写分离环境下,客户端向主服务器发送写命令SETn10086,主服务器在执行这个写命令之后,向客户端返回回复,并将这个写命令传播给从服务器。

接到回复的客户端继续向从服务器发送读命令GETn,并且因为网络状态的原因,客户端的GET命令比主服务器传播的SET命令更快到达了从服务器。

因为从服务器键n的值还未被更新,所以客户端在从服务器读取到的将是一个错误(过期)的n值。

数据一致性参数:
min-slaves-to-write 1       #主库数据至少同步到1台从库(同步后返回确认)
min-slaves-max-lag 10       #主库与从库的网络延时不能超过10秒(超过10秒会返回失败)

断线重连过程:

redis-主从复制实战:

  • 在多实例或者多节点部署redis都可以做主从复制,两个redis也可以做,但之后会有哨兵集群需要用到此环境。

  • 当前文章基于redis部署之上进行部署,如为部署请移步:点击跳转

系统:CentOS-7.5
地址:

10.0.0.10   redis-01(master)
10.0.0.20   redis-02(slave)
10.0.0.30   redis-03(slave)
配置hosts文件:(所有节点)
cat >>/etc/hosts<<EOF
10.0.0.10 redis-01
10.0.0.20 redis-02
10.0.0.30 redis-03
EOF
配置模板:(所有节点)
daemonize yes
port 6379
logfile /data/6379/redis.log
bind 10.0.0.10 127.0.0.1
requirepass redhat
dir /data/6379
dbfilename dump.rdb
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec
配置从库master认证:(redis-02节点 与 redis-03节点)
#以下参数是告诉从库,主库的认证密码是redhat
vim /data/6379/redis.conf

masterauth redhat
开启主从:(redis-02节点 与 redis-03节点)
#这个命令是关键点,直接加入配置文件内-----------(建议)
slaveof 10.0.0.10 6379

或

#'redis-02执行
redis-cli -h 10.0.0.20 -a redhat slaveof 10.0.0.10 6379
#redis-03执行
redis-cli -h 10.0.0.30 -a redhat slaveof 10.0.0.10 6379

重启所有节点的Redis服务

查看主从状态:(redis-01节点)
[root@redis-01 ~]# redis-cli -h 10.0.0.10 -p 6379 -a redhat info replication

数据同步测试:
#redis-01节点
[root@redis-01 ~]# redis-cli -h 10.0.0.10 -p 6379 -a redhat set name olda
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
OK
#redis-02节点 与 redis-03节点
[root@redis-02 ~]# redis-cli -h 10.0.0.20 -a redhat get name
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
"olda"

[root@redis-03 ~]# redis-cli -h 10.0.0.30 -a redhat get name
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
"olda"
关闭复制:
  • 不关闭redis服务之命令交互方式关闭复制
slave of no one
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论