阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

146次阅读
没有评论

共计 2954 个字符,预计需要花费 8 分钟才能阅读完成。

一.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 的配置文件

[root@localhost ~]# 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 主服务并查看内存中的数据

[root@localhost ~]# redis-server /app/redis/etc/redis.conf
[root@localhost ~]# 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 从服务的配置文件

[root@localhost ~]# 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 从服务命令行操作实现主从连接

[root@localhost ~]# redis-server /app/redis/etc/redis.conf
[root@localhost ~]# 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. 只需配置从服务配置文件

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

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

[root@localhost ~]# redis-server /app/redis/etc/redis.conf
[root@localhost ~]# 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
……
……

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2954字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中