楼主: jieforest

Redis主从复制

[复制链接]
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
11#
 楼主| 发表于 2015-3-24 23:42 | 只看该作者
修改配置文件中成相应的配置。只需要把原来的端口7000,替换成相应的端口,可以使用相应的vim的命令,

如下,全文替换7000为9000。
  1. %s/7000/9000/g

  2. 语法为 :[addr]s/源字符串/目的字符串/[option]

  3. 全局替换命令为::%s/源字符串/目的字符串/g

  4. [addr] 表示检索范围,省略时表示当前行。

  5. 如:“1,20” :表示从第1行到20行;

  6. “%” :表示整个文件,同“1,$”;

  7. “. ,$” :从当前行到文件尾;

  8. s : 表示替换操作

  9. [option] : 表示操作类型

  10. 如:g 表示全局替换;

  11. c 表示进行确认

  12. p 表示替代结果逐行显示(Ctrl + L恢复屏幕);

  13. 省略option时仅对每行第一个匹配串进行替换;

  14. 如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义
复制代码

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
12#
 楼主| 发表于 2015-3-24 23:44 | 只看该作者
复制启动脚本,
  1. [root@121 redis]# cp /etc/init.d/redis_7000 /etc/init.d/redis_7001
  2. [root@121 redis]# cp /etc/init.d/redis_7000 /etc/init.d/redis_7002
  3. [root@121 redis]# cp /etc/init.d/redis_7000 /etc/init.d/redis_8000
  4. [root@121 redis]# cp /etc/init.d/redis_7000 /etc/init.d/redis_8001
  5. [root@121 redis]# cp /etc/init.d/redis_7000 /etc/init.d/redis_8002
  6. [root@121 redis]# cp /etc/init.d/redis_7000 /etc/init.d/redis_9000
  7. [root@121 redis]# cp /etc/init.d/redis_7000 /etc/init.d/redis_9001
  8. [root@121 redis]# cp /etc/init.d/redis_7000 /etc/init.d/redis_9002
复制代码
启动脚本也要进行相应的替换

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
13#
 楼主| 发表于 2015-3-24 23:44 | 只看该作者
替换完成了,把所有的实例都启动起来,如下,
  1. [root@121 redis_7000]# ps -ef |grep 7000
  2. root     27449     1  0 15:26 ?        00:00:00 /usr/local/bin/redis-server *:7000              
  3. root     28424 24088  0 15:59 pts/0    00:00:00 grep 7000
  4. [root@121 redis_7000]# redis-cli -p 7000 shutdown
  5. [root@121 redis_7000]# ps -ef |grep 7000
  6. root     28436 24088  0 15:59 pts/0    00:00:00 grep 7000
  7. [root@121 redis_7000]#
复制代码

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
14#
 楼主| 发表于 2015-3-24 23:45 | 只看该作者
先把原来启动的7000端口杀掉,启动所有的实例,
  1. [root@121 redis_7000]# /etc/init.d/redis_7000 start
  2. Starting Redis server...
  3. [root@121 redis_7000]# /etc/init.d/redis_7001 start
  4. Starting Redis server...
  5. [root@121 redis_7000]# /etc/init.d/redis_7002 start
  6. Starting Redis server...
  7. [root@121 redis_7000]# /etc/init.d/redis_8000 start
  8. Starting Redis server...
  9. [root@121 redis_7000]# /etc/init.d/redis_8001 start
  10. Starting Redis server...
  11. [root@121 redis_7000]# /etc/init.d/redis_8002 start
  12. Starting Redis server...
  13. [root@121 redis_7000]# /etc/init.d/redis_9000 start
  14. Starting Redis server...
  15. [root@121 redis_7000]# /etc/init.d/redis_9001 start
  16. Starting Redis server...
  17. [root@121 redis_7000]# /etc/init.d/redis_9002 start
  18. Starting Redis server...
  19. [root@121 redis_7000]# ps -ef | grep redis
  20. root     28465     1  0 16:00 ?        00:00:00 /usr/local/bin/redis-server *:7000              
  21. root     28470     1  0 16:00 ?        00:00:00 /usr/local/bin/redis-server *:7001              
  22. root     28477     1  0 16:00 ?        00:00:00 /usr/local/bin/redis-server *:7002              
  23. root     28489     1  0 16:01 ?        00:00:00 /usr/local/bin/redis-server *:8000              
  24. root     28500     1  0 16:01 ?        00:00:00 /usr/local/bin/redis-server *:8001              
  25. root     28506     1  0 16:01 ?        00:00:00 /usr/local/bin/redis-server *:8002              
  26. root     28511     1  0 16:01 ?        00:00:00 /usr/local/bin/redis-server *:9000              
  27. root     28516     1  0 16:01 ?        00:00:00 /usr/local/bin/redis-server *:9001              
  28. root     28523     1  0 16:01 ?        00:00:00 /usr/local/bin/redis-server *:9002              
  29. root     28535 24088  0 16:01 pts/0    00:00:00 grep redis
复制代码

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
15#
 楼主| 发表于 2015-3-24 23:46 | 只看该作者
好了,有点小激动,所有的实例都启动成功了。这时可以检查一下配置的日志文件,pid文件,是否都存在,如下,
  1. [root@121 log]# pwd
  2. /var/redis/log
  3. [root@121 log]# ls -l
  4. total 44
  5. -rw-r--r--. 1 root root  768 Mar 20 14:30 redis_6379.log
  6. -rw-r--r--. 1 root root 7015 Mar 20 16:00 redis_7000.log
  7. -rw-r--r--. 1 root root 1864 Mar 20 16:00 redis_7001.log
  8. -rw-r--r--. 1 root root 1864 Mar 20 16:00 redis_7002.log
  9. -rw-r--r--. 1 root root 1864 Mar 20 16:01 redis_8000.log
  10. -rw-r--r--. 1 root root 1864 Mar 20 16:01 redis_8001.log
  11. -rw-r--r--. 1 root root 1864 Mar 20 16:01 redis_8002.log
  12. -rw-r--r--. 1 root root 1864 Mar 20 16:01 redis_9000.log
  13. -rw-r--r--. 1 root root 1864 Mar 20 16:01 redis_9001.log
  14. -rw-r--r--. 1 root root 1864 Mar 20 16:01 redis_9002.log
  15. [root@121 run]# pwd
  16. /var/redis/run
  17. [root@121 run]# ls -l
  18. total 36
  19. -rw-r--r--. 1 root root 6 Mar 20 16:00 redis_7000.pid
  20. -rw-r--r--. 1 root root 6 Mar 20 16:00 redis_7001.pid
  21. -rw-r--r--. 1 root root 6 Mar 20 16:00 redis_7002.pid
  22. -rw-r--r--. 1 root root 6 Mar 20 16:01 redis_8000.pid
  23. -rw-r--r--. 1 root root 6 Mar 20 16:01 redis_8001.pid
  24. -rw-r--r--. 1 root root 6 Mar 20 16:01 redis_8002.pid
  25. -rw-r--r--. 1 root root 6 Mar 20 16:01 redis_9000.pid
  26. -rw-r--r--. 1 root root 6 Mar 20 16:01 redis_9001.pid
  27. -rw-r--r--. 1 root root 6 Mar 20 16:01 redis_9002.pid
复制代码
嗯,配置也应该没有问题。

这块其实可以写到一个脚本里,有点麻烦也没写过太多的脚本,现就这样吧。

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
16#
 楼主| 发表于 2015-3-29 14:10 | 只看该作者
主从复制的配置

下面就来看一下如何进行主从复制的配置。要把7001和7002端口的redis实例配成7000端口的redis的slave,7000端口的redis为master。其他依次类推。

slave 7001
  1. [root@121 run]# redis-cli -p 7001
  2. 127.0.0.1:7001> slaveof 127.0.0.1 7000
  3. OK
  4. 127.0.0.1:7001> get testkey
  5. (nil)
  6. 127.0.0.1:7001> get testkey
  7. "testdata"
  8. 127.0.0.1:7001>
复制代码

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
17#
 楼主| 发表于 2015-3-29 14:11 | 只看该作者
slave 7002
  1. [root@121 ~]# redis-cli -p 7002
  2. 127.0.0.1:7002> slaveof 127.0.0.1 7000
  3. OK
  4. 127.0.0.1:7002> get testkey
  5. (nil)
  6. 127.0.0.1:7002> get testkey
  7. "testdata"
  8. 127.0.0.1:7002>
复制代码
master 7000
  1. [root@121 ~]# redis-cli -p 7000
  2. 127.0.0.1:7000> get testkey
  3. (nil)
  4. 127.0.0.1:7000> set testkey testdata
  5. OK
  6. 127.0.0.1:7000>
复制代码

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
18#
 楼主| 发表于 2015-3-29 14:11 | 只看该作者
可以看到主从复制也配置好了。这时候可以到redis实例的文件找一个dump.rdb的文件,这个文件和主从复制有关系。
  1. [root@121 redis_7000]# pwd
  2. /var/redis/redis_7000
  3. [root@121 redis_7000]# ls
  4. dump.rdb
复制代码

使用道具 举报

回复
论坛徽章:
46
目光如炬
日期:2015-05-25 17:31:392017金鸡报晓
日期:2017-02-08 14:09:13弗兰奇
日期:2017-02-17 10:52:09目光如炬
日期:2017-06-18 22:00:00妮可·罗宾
日期:2018-01-16 16:54:11ITPUB社区OCM联盟徽章
日期:2018-03-07 13:51:55ITPUB18周年纪念章
日期:2018-09-17 10:09:49ITPUB元老
日期:2019-04-09 21:48:17授权会员
日期:2019-04-09 21:50:2519周年集字徽章-19
日期:2020-06-16 21:48:06
19#
发表于 2015-4-3 14:52 | 只看该作者
楼主,有个问题咨询下

主备keepalived来进行配置,当数据量太大的时候,比如内存达到5G,手工关闭主服务的keepalived,查看IP是否漂移到备库时发现备库的keepalived会出现问题导致挂掉,导致主备切换的时候IP不会漂移到备的,问题信息如下LOADING Redis is loading the dataset in memory,这个加载内存时出现备库keepalived直接stop
目前还在了解什么是什么原因
但是当数据量很小的时候不会出现问题,手工切换很顺利就可以进行

使用道具 举报

回复
论坛徽章:
46
目光如炬
日期:2015-05-25 17:31:392017金鸡报晓
日期:2017-02-08 14:09:13弗兰奇
日期:2017-02-17 10:52:09目光如炬
日期:2017-06-18 22:00:00妮可·罗宾
日期:2018-01-16 16:54:11ITPUB社区OCM联盟徽章
日期:2018-03-07 13:51:55ITPUB18周年纪念章
日期:2018-09-17 10:09:49ITPUB元老
日期:2019-04-09 21:48:17授权会员
日期:2019-04-09 21:50:2519周年集字徽章-19
日期:2020-06-16 21:48:06
20#
发表于 2015-4-3 14:58 | 只看该作者
主备的自动迁移就算小数据量时也遇到了问题

redis主备通过keepalived进行虚拟ip映射,当插入数据到主备对应的虚拟ip时,如果插入过程中主的挂掉,虚拟ip会切换到备的,插入这个进程就失效了,插入过程中瞬间主的挂掉那刻之后的数据不会继续插入,之前已经插入进去的数据都正常不丢失,也就是主的挂掉,切换到备的的时候,期间的所有操作都会中断,需要重新运行,就没有达到完全自动迁移
不知道如何才能实现完全自动迁移,即会话不会中断

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表