一.Redis主从复制同步实现的过程 1.从服务发送一个sync同步命令给主服务要求全量同步 2.主服务接收到从服务的sync同步命令时,会fork一个子进程后台执行bgsave命令(非阻塞)快照保存,
一.Redis主从复制同步实现的过程
1.从服务发送一个sync同步命令给主服务要求全量同步2.主服务接收到从服务的sync同步命令时,会fork一个子进程后台执行bgsave命令(非阻塞)快照保存,生成RDB文件,并将RDB文件发送给从服务3.从服务再将接收到的RDB文件载入自己的redis内存4.待从服务将RDB载入完成后,主服务再将缓冲区所有写命令发送给从服务5.从服务在将主服务所有的写命令载入内存从而实现数据的完整同步6.从服务下次在需要同步数据时只需要发送自己的offset位置(相当于MySQL binlog的位置)即可,只同步新增加的数据,再不需要全量同步
二.通过命令行实现redis主从同步
master 192.168.1.9slave 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 123456OK127.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#Replicationrole:masterconnected_slaves:0master_replid:177a7792d02eb8e89c07b5441825a0f50d8ae8b8master_replid2:37938cb9db73839bfc72e3fc805d42c56dc6352dmaster_repl_offset:2240second_repl_offset:2241repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:57repl_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-cli127.0.0.1:6379> auth 123456OK127.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 #查看主从连接是够成功#Replicationrole:slave #已经切换为从服务master_host:192.168.1.9 #主服服主机的ipmaster_port:6379master_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 #取消主从同步的命令OK127.0.0.1:6379> info replication #查看是否取消成功#Replicationrole:master #已切换到masterconnected_slaves:0master_replid:77eab93a7015b0d338d1c44040d632e698d0159bmaster_replid2:37938cb9db73839bfc72e3fc805d42c56dc6352dmaster_repl_offset:4004second_repl_offset:4005repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:2241repl_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-cli127.0.0.1:6379> auth 123456OK127.0.0.1:6379> info replication#Replicationrole:slavemaster_host:192.168.1.9master_port:6379master_link_status:up…………