设为首页 收藏本站
查看: 1205|回复: 0

[经验分享] Redis 主从同步

[复制链接]

尚未签到

发表于 2015-12-23 09:33:28 | 显示全部楼层 |阅读模式
主从功能:

   为了防止 Redis 磁盘损坏,导致数据丢失,Redis 提供了复制功能,将一个主数据库的数据自动同步到从数据库,防止数据丢失。
   同时还可以配置一主多从来分担主压力,主只接受写的操作,将读的操作给从来实现;其中从库也可以接受其它从库的同步请求。
   如果主、从因为网络原因出现连接断开,网络正常后从可以自动连接主,连接成功后主会将完整的数据同步一次给从,保证数据一致性。

主从原理:

   1、从数据库启动后,向主数据库发送 SYNC 命令
   2、主数据库收到 SYNC 命令后开始保存快照,在此期间所有发给主数据库的命令都被缓存起来
   3、快照保存完后,主数据库把快照和缓存的命令一起发给从数据库
   4、从数据库保存主数据发来的快照文件,并依次执行主数据库发来的缓存命令

   在同步过程中,主、从数据库都不会阻塞:

-----> 主库可以继续接受客户端提交的查询或修改请求;
-----> 从库默认使用同步之前的数据继续响应客户端发来的命令

一、配置 Redis 主从

## 这里可以使用一台服务器启动两个 Redis 服务,只需指定不同的配置文件,不同的端口即可
## 为了加入防火墙规则,我使用两台服务器来完成

Redis Master :192.168.1.88
Redis Slave  :192.168.1.80

1、Redis Master ( 这里不写安装过程了,写到 Slave 位置 )



  • [root@master ~]# vim /usr/local/redis/redis.conf


  • daemonize yes
  • port 6379
  • timeout 300
  • loglevel verbose
  • pidfile /usr/local/redis/logs/redis.pid
  • logfile /usr/local/redis/logs/redis.log

  • requirepass redispassword
  • databases 16

  • save 900 1
  • save 300 10
  • save 60 10000
  • rdbcompression yes
  • dbfilename dump.rdb

  • dir /usr/local/redis/data/

  • appendonly no
  • appendfilename appendonly.aof
  • appendfsync everysec

  • no-appendfsync-on-rewrite yes
  • auto-aof-rewrite-percentage 100
  • auto-aof-rewrite-min-size 64mb



  • [root@master ~]# redis-server /usr/local/redis/redis.conf

  • [root@master ~]# netstat -anpt | grep redis
  • tcp        0      0 0.0.0.0:6379                0.0.0.0:* LISTEN      1154/redis-server

  • [root@master ~]# iptables -I INPUT 4 -s 192.168.1.80 -p tcp --dport 6379 -j ACCEPT
2、Redis Slave



  • 下载地址:https://code.google.com/p/redis/downloads/list

  • [root@slave ~]# cd /usr/local/src/
  • [root@slave src]# tar zxf redis-2.6.10.tar.gz
  • [root@slave src]# cd redis-2.6.10
  • [root@slave redis-2.6.10]# make ; make install

  • [root@slave ~]# mkdir /usr/local/redis
  • [root@slave ~]# cd !$
  • cd /usr/local/redis
  • [root@slave redis]# cp ../src/redis-2.6.10/redis.conf .
  • [root@slave redis]# cp ../src/redis-2.6.10/src/redis-cli .
  • [root@slave redis]# cp ../src/redis-2.6.10/src/redis-server .
  • [root@slave redis]# cp ../src/redis-2.6.10/src/redis-sentinel .
  • [root@slave redis]# cp ../src/redis-2.6.10/src/redis-benchmark .
  • [root@slave redis]# cp ../src/redis-2.6.10/src/redis-check-aof .
  • [root@slave redis]# cp ../src/redis-2.6.10/src/redis-check-dump .

  • [root@slave redis]# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
  • [root@slave redis]# sysctl vm.overcommit_memory=1
  • [root@slave redis]# mkdir data logs
  • [root@slave redis]# vim redis.conf

  • daemonize yes
  • port 6379
  • timeout 300
  • loglevel verbose
  • pidfile /usr/local/redis/logs/redis.pid
  • logfile /usr/local/redis/logs/redis.log

  • #requirepass redispassword
  • databases 16

  • save 900 1
  • save 300 10
  • save 60 10000
  • rdbcompression yes
  • dbfilename dump.rdb

  • dir /usr/local/redis/data/

  • appendonly no
  • appendfilename appendonly.aof
  • appendfsync everysec

  • no-appendfsync-on-rewrite yes
  • auto-aof-rewrite-percentage 100
  • auto-aof-rewrite-min-size 64mb

  • masterauth redispassword
  • slaveof 192.168.1.88 6379

  • ## 直接复制 Master 的配置文件,添加最后两行即可



  • [root@slave ~]# redis-server /usr/local/redis/redis.conf


  • [root@slave ~]# netstat -anpt | grep redis
  • tcp        0      0 0.0.0.0:6379                0.0.0.0:* LISTEN      3442/redis-server
  • tcp        0      0 192.168.1.80:50799          192.168.1.88:6379           ESTABLISHED 3442/redis-server

  • ## 可以看到启动成功,并且建立了一条到 Master 的连接

  • [root@slave ~]# ls /usr/local/redis/data/
  • dump.rdb

  • ## data 目录下也有了 master 同步过来的数据( 虽然主库并没有写入数据 )
二、测试 Redis 主从



  • [root@master ~]# redis-cli -a redispassword

  • redis 127.0.0.1:6379> keys *
  • (empty list or set)
  • redis 127.0.0.1:6379> set name wang
  • OK
  • redis 127.0.0.1:6379> set id 8
  • OK
  • redis 127.0.0.1:6379> keys *
  • 1) "id"
  • 2) "name"
  • redis 127.0.0.1:6379> quit
## 这是在 master 上的操作,-a 指定认证密码



  • [root@slave ~]# redis-cli

  • redis 127.0.0.1:6379> keys *
  • 1) "id"
  • 2) "name"
  • redis 127.0.0.1:6379> get name
  • "wang"
  • redis 127.0.0.1:6379> get id
  • "8"
  • redis 127.0.0.1:6379> set cc 123
  • (error) READONLY You can't write against a read only slave.
  • redis 127.0.0.1:6379> quit
## 这是在从上的操作,其中 slave 没有设密码所以不用 -a 指定,可以查到同步过来的 keys ,因为要保持数据一致性,所以不能写入。
## 如果在主执行 del name  那么从上的 name 也被删除。
## 主从同步完成 !

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-155069-1-1.html 上篇帖子: Redis AOF 全持久化 下篇帖子: Redis实例之php与redis的连接
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表