redis主从复制过程和实现主从复制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis主从复制过程和实现主从复制相关的知识,希望对你有一定的参考价值。

一.redis主从复制同步实现的过程
1.从服务发送一个sync同步命令给主服务要求全量同步
2.主服务接收到从服务的sync同步命令时,会fork一个子进程后台执行bgsave命令(非阻塞)快照保存,生成RDB文件,并将
RDB文件发送给从服务
3.从服务再将接收到的RDB文件载入自己的redis内存
4.待从服务将RDB载入完成后,主服务再将缓冲区所有写命令发送给从服务
5.从服务在将主服务所有的写命令载入内存从而实现数据的完整同步
6.从服务下次在需要同步数据时只需要发送自己的offset位置(相当于mysql binlog的位置)即可,只同步新增加的数据,再不需要全量同步

二.通过命令行实现redis主从同步

master 192.168.1.9
slave 192.168.1.9
注意:建议保持主从redis的版本一致,避免导致因版本差异无法建立主从连接

1.设置master的配置文件

[[email protected] ~]# vim /app/redis/etc/redis.conf
…
bind 127.0.0.0.1 192.168.1.9 #绑定监听地址
…
port 6379 #默认开启的端口号
….
daemonize yes  #以守护进程开启

supervised systemd  #由systemd管理服务的启动、停止.

pidfile /app/redis/run/redis_6379.pid  #进程的pid保存路径

logfile "/app/redis/log/redis_6379.log"  #日志文件保存路径
save 2 1              #每隔2秒进行一次快照保存
stop-writes-on-bgsave-error yes    #当快照保存失败会禁止写入redis,默认为yes,一般改为no不开启
dbfilename dump.rdb    #保存快照的文件名
dir /app/redis/data/             #保存快照的路径     
requirepass 123456     #设置redis登录的连接密码
…

2.开启redis主服务并查看内存中的数据

[[email protected] ~]# redis-server /app/redis/etc/redis.conf 
[[email protected] ~]# redis-cli 
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> keys *
1) "wang"
2) "dfd"
3) "lady"
4) "ddsds"
5) "name"
6) "zhang"
127.0.0.1:6379> 

3.先查看slave从服务状态,在未设置时,从服务默认也为master主服务

127.0.0.1:6379> info replication
#Replication
role:master
connected_slaves:0
master_replid:177a7792d02eb8e89c07b5441825a0f50d8ae8b8
master_replid2:37938cb9db73839bfc72e3fc805d42c56dc6352d
master_repl_offset:2240
second_repl_offset:2241
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:57
repl_backlog_histlen:2184

4.设置slave从服务的配置文件

[[email protected] ~]# vim /app/redis/etc/redis.conf
…
bind 127.0.0.0.1 192.168.1.106 #绑定监听地址
…
port 6379 #默认开启的端口号
….
daemonize yes  #以守护进程开启

dir /app/redis/data/             #保存快照的路径     
requirepass 123456     #设置redis登录的连接密码
…

5.slave从服务命令行操作实现主从连接

[[email protected] ~]# redis-server /app/redis/etc/redis.conf
[[email protected] ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> slaveof 192.168.1.9 6379   #设置为另一台服务的从服务
127.0.0.1:6379>config set masterauth 123456 #配置与主服务匹配的连接密码
127.0.0.1:6379> info replication   #查看主从连接是够成功
#Replication
role:slave                       #已经切换为从服务
master_host:192.168.1.9  #主服服主机的ip
master_port:6379
master_link_status:up  #主从连接建立成功
…..
…..
27.0.0.1:6379> keys *  #查看从主服器同步到的数据
1) "wang"
2) "name"
3) "dfd"
4) "zhang"
5) "ddsds"
6) "lady"

6.也可在命令行取消主从同步

127.0.0.1:6379> slaveof no one   #取消主从同步的命令
OK
127.0.0.1:6379> info replication  #查看是否取消成功
#Replication
role:master               #已切换到master
connected_slaves:0
master_replid:77eab93a7015b0d338d1c44040d632e698d0159b
master_replid2:37938cb9db73839bfc72e3fc805d42c56dc6352d
master_repl_offset:4004
second_repl_offset:4005
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2241
repl_backlog_histlen:1764  

三.通过配置文件实现主从同步

1.只需配置从服务配置文件

[[email protected] ~]# vim /app/redis/etc/redis.conf
…..
slaveof 192.168.1.9 6379  #添加属于某台主机的从 服务
…..
masterauth 123456  #从服务连接主服的密码
…… 
slave-read-only yes  #从服务只读,不可在命令行写入数据
……

2.重新启动从服务即实现主从连接

[[email protected] ~]# redis-server /app/redis/etc/redis.conf
[[email protected] ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
#Replication
role:slave
master_host:192.168.1.9
master_port:6379
master_link_status:up
……
……

以上是关于redis主从复制过程和实现主从复制的主要内容,如果未能解决你的问题,请参考以下文章

Redis主从复制的配置过程

Redis精华所在,一口气说完Redis的主从复制和哨兵模式

redis主从复制最好采用哪种结构

Redis主从复制丢失数据的情况分析

一文带你深入了解 redis 复制技术及主从架构

详解Redis主从复制