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

[经验分享] 【Redis二】Redis2.8.17搭建主从复制环境

[复制链接]

尚未签到

发表于 2016-12-20 07:47:48 | 显示全部楼层 |阅读模式
开始使用Redis2.8.17
  Redis第一篇在Redis2.4.5上搭建主从复制环境,对它的主从复制的工作机制,真正的惊呆了。不知道Redis2.8.17的主从复制机制是怎样的,Redis到了2.4.5这个版本,主从复制还做成那样,Impossible is nothing! 本篇把主从复制环境再搭一遍看看效果这次在Unbuntu上用官方支持的版本。

 

Ubuntu上安装Redis

$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ make
$ make install
   编译出二进制文件后存在于redis-2.8.17/src目录,不过Redis自动的在/usr/local/bin/redis-server建立了软连指向src目录下的redis-server,包括其他的可执行文件。
  需要说明的是,使用redis-server -v查看Redis的版本号是2.8.9,继上篇吐槽Redis2.4.5的主从复制机制外,对于Redis犯的这种错误,小伙伴们都惊呆了。
  启动Redis,有给了一个惊喜,在Ubuntu上,不带redis.conf配置文件启动没有问题,可以正常启动,带了配置文件,报各种directive问题,

Bad directive or wrong number of arguments
   
  先放弃Unbuntu上的环境,还是继续在Windos上搭建吧。
  找到解决的办法,make完了,再执行make install命令即可解决上面的问题

Redis主从复制搭建步骤
  Redis搭建主从复制的步骤十分简单,以下在Windows上操作。
  1. 解压Redis压缩包至E:\devsoftware\redis-2.8.17
  2.在Redis目录中复制两份redis.windows.conf,分别命名为redis.windows.conf.slave1,redis.windows.conf.slave2
  3.修改redis.conf.slave1文件,


  • port 6379 改为 port 6380
  • 打开slaveof指令,改为slaveof 127.0.0.1 6379
  • 将快照文件名改为dbfilename dump.slave1.rdb

  • 如果使用AOF方式持久化,则需要将appendfilename appendonly.aof改为appendfilename appendonly.slave1.aof
  4. 修改redis.conf.slave2文件


  • port 6379 改为 port 6381
  • 打开slaveof指令,改为slaveof 127.0.0.1 6379
  • 将快照文件名改为dbfilename dump.slave2.rdb

  • 如果使用AOF方式持久化,则需要将appendfilename appendonly.aof改为appendfilename appendonly.slave2.aof
  5. 启动三个Redis服务器,形成一主两从的主从复制副本集
  通过上面的启动过程,可见只需要redis-server一个启动脚本即可,它读取不同的配置文件,来完成初始化


  • Master启动时的日志输出

[21684] 25 Nov 20:54:16 * Slave ask for synchronization
[21684] 25 Nov 20:54:16 * Starting BGSAVE for SYNC
[21684] 25 Nov 20:54:16 * Foregroud saving started by pid 21684
[21684] 25 Nov 20:54:17 * DB saved on disk
[21684] 25 Nov 20:54:17 * Background saving terminated with suc
[21684] 25 Nov 20:54:17 * Synchronization with slave succeeded


  •  Slave1启动时的日志输出

[21068] 25 Nov 20:54:15 * Server started, Redis version 2.4.5
[21068] 25 Nov 20:54:15 * DB loaded from disk: 0 seconds
[21068] 25 Nov 20:54:15 * The server is now ready to accept connections on port
[21068] 25 Nov 20:54:16 - DB 0: 1 keys (0 volatile) in 4 slots HT.
[21068] 25 Nov 20:54:16 - 0 clients connected (0 slaves), 1180024 bytes in use
[21068] 25 Nov 20:54:16 * Connecting to MASTER...
[21068] 25 Nov 20:54:16 * MASTER <-> SLAVE sync started
[21068] 25 Nov 20:54:16 * Non blocking connect for SYNC fired the event.
[21068] 25 Nov 20:54:17 * MASTER <-> SLAVE sync: receiving 19 bytes from master
[21068] 25 Nov 20:54:17 * MASTER <-> SLAVE sync: Loading DB in memory
[21068] 25 Nov 20:54:17 * MASTER <-> SLAVE sync: Finished with success

主服务器写入从服务器读取数据测试


  •  往主服务器上写入一个数据,检查从服务器是否同步

E:\devsoftware\redis-2.4.5-win32-win64\64bit>redis-cli.exe -h 127.0.0.1 -p 6379
redis 127.0.0.1:6379> set  abc 1
OK
redis 127.0.0.1:6379> get abc
"1"
redis 127.0.0.1:6379>Ctrl + C
 

  • 两个从服务器的读取操作:

E:\devsoftware\redis-2.4.5-win32-win64\64bit>redis-cli.exe -h 127.0.0.1 -p 6380
redis 127.0.0.1:6380> get abc
"1"
redis 127.0.0.1:6380> ^C
E:\devsoftware\redis-2.4.5-win32-win64\64bit>redis-cli.exe -h 127.0.0.1 -p 6381
redis 127.0.0.1:6381> get abc
"1"
redis 127.0.0.1:6381>
 
从服务器写入,其它服务器读取数据测试


系统提示,



(error) READONLY You can't write against a read only slave.
 

只读slave不能写入数据,有只读的slave,就应该有可读写的slave的存在。这个看看配置文件,配置文件里有如下指令

slave-read-only yes


 配置文件对这个指令的注释是,


Since Redis 2.6 by default slaves are read-only.
Note: read only slaves are not designed to be exposed to untrusted clients on the internet. It's just a protection layer against misuse of the instance. Still a read only slave exports by default all the administrative commands
such as CONFIG, DEBUG, and so forth. To a limited extend you can improve security of read only slaves using 'rename-command' to shadow all the  administrative / dangerous commands.
 

主服务器挂了,是否会自动的Lead选举



 经测试发现,slave1和slave2已经处于无Lead状态了,测试方法根据前面的主服务器的特性,在slave1和slave2上分别插入一条数据,结果都提示是只读从服务器,不能写入,也就是说,slave1和slave2都不是主服务器。

当 主服务器起来之后,slave1和slave2又成为它的slave,也就是,不管主服务器什么情况,它永远是slave的master。但是此是slave1和slave2已经不能写入但是可读取,因此,Redis主从复制存在Master单点故障

 内存快照文件

在 Redis的当前目录下产生了三个rdb文件,分别是dump.rdb,dump.slave1.rdb和dump.slave2.rdb。rdb文件时 Redis的内存快照文件。rdb是二进制文件,不过用文本编辑器打开rdb文件,还是能隐隐约约的看到其中的一些内容,如dump.slave2.rdb


REDIS0002? def? abc?


Redis默认配置启用了内存快照的方式来进行内存数据持久化操作,这在redis.conf文件中定义

save 900 1 //900秒内,有1个key变化,则做快照
save 300 10 //300秒内,有10个key变化,则做快照
save 60 10000 //60秒内,有10000个key变化,则做快照
 计时时间点是从内存快照做完开始算起


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

运维网声明 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-316615-1-1.html 上篇帖子: Redis被bgsave和bgrewriteaof阻塞的解决方法(转) 下篇帖子: Redis + Jedis + Spring整合遇到的异常
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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