利用redis replication实现redis服务器热迁移

利用redis replication实现redis服务器热迁移,第1张

利用redisreplication实现redis服务器热迁移

使用redis复制热迁移redis服务器

文章开头声明标题太高,主要是为了装逼。

某月的一个漆黑的夜晚,一个运维攻城狮和一个PHP成在长谈。只见PHP程盯着眼前屏幕上那坨类似代码的文字,突然问道:“你能做到这一点吗?”有一种成对运维行业的骄傲和鄙视。攻城狮明显感受到了空空气中的杀气,但为了不在这个行业丢脸,攻城狮骄傲地抬起头,冷冷地说了一句:“我来看看!”

问题是,程序员的公司最近想更换一台redis服务器,但是在更换的过程中无法关机。根据网上提供的方法,有两种方式。一种是下载数据库,然后将其放入新的redis服务器,然后切换。很明显,大家对这个方案的态度就是两个字:呵呵!

另一种方式是使用redis的主从同步方式,使新服务器与旧服务器实时同步。数据同步完成后,当所有请求都被旧服务器忽略时,Garben!去换一个新的服务器,然后做一个没有违和感的服务器更换。三笑成功地在欢呼声中占据了上风,哦耶!

想想剧情的跌宕起伏。攻城狮在夜色中兴奋起来,然后果断开启了虚拟机。然后...这是一个悲伤的故事。攻城狮百度搜了一堆文档,发现redis的主从同步配置简单得不可思议!只需在从属服务器的redis.conf配置文件中添加一行:

   slaveof <masterIP> <masterport>

这么简单的配置,攻城狮熟练的 *** 作虚拟机,他开机了!!他有IP地址!!他远程登录了。!他用yum安装了redis!!他开始配置redis了!!他粗壮的手指疯狂地按着键盘,嘴角微微上扬。他为即将到来的胜利做好了准备!!这个时候,他并不觉得孤单!他的背后是整个运维行业的关注!!看啊!!攻城狮开始服务了!!他开始测试了!!然后,测试失败了...

呵呵,好悲伤的故事!

我们来看看配置的流程和问题:

两台虚拟机:

Master的IP是192.168.31.118,没有更改,已经启动redis服务

slave的IP是192.168.31.200,在/etc/redis.conf文件中增加了一行新的配置:slaveof192.168.1.1186379。

然后启动了redis服务。

测试过程是在主服务器上用redis-cli客户端登录redis命令行界面,使用flushdb命令清除空所有key(此过程仅用于测试,在真实环境中不需要通过轻敲此命令进行任何热迁移),创建两个key-value对:

然后在从属服务器上,使用redis-cli命令登录redis,并使用command键*查看数据是否同步。结果是悲剧性的:

想象一下Duang~中同步的数据卡住了,数据不知道在哪里!文件上就是这么写的。不能用消肿吗?

无奈,查日志。幸运的是,redis记录了日志。由于slave没有同步数据,master也没有做任何其他更改,所以问题很可能出在slave身上。检查从属服务器上的redis日志。下面是日志内容:

看到了吗?多么痛苦的认识!居然链接被拒了?!你在做什么??!明明按照网上的文件,而且不止一个文件是这么配置的,为什么这么坚决的拒绝单身狗的一个合理要求?!怒摔!!

攻城狮再次被碾压。程眼角的光怎么了?明明觉得被歧视!夜深了,第二天要卖身的攻城狮带着恨意睡了。睡梦中,攻城狮梦见了自己成功解决问题的那一刻。很美,很美……

嗯,故事并没有结束。第二天,攻城狮终于有时间解决其他公司的问题了(老板没看我的博客,不然后果很严重!)攻城狮不愧是攻城狮。他把注意力转向了主服务器。主设备什么都不配置似乎是不正确的。仔细看配置文件的时候,攻城狮终于发光了!他在配置文件中看到这样一行:

绑定127.0.0.1

瞬间开悟,尼玛,坑爸,这个配置是用来限制哪些IP允许访问redis的。在线文档怎么能一致忽略这么关键的配置!尼玛,写文章能不能少转载点,走心点?嘿!!这些小贱人!!又怒摔!!

然后,攻城狮出大招,把这个配置改成:绑定0.0.0。是的,攻城狮开始疯狂报复这个社会!!改完之后重启redis,成功了,成功了!!!攻城狮的大眼镜框后面闪起了点点泪花,他喃喃道:“终于,TM的,混账!”终于主从配置成功了!

你以为这就是故事的结局?!你还是太年轻了!还有别的关键配置吗?也就是redis2.6以上,默认的从服务器不允许执行写 *** 作。所以,slave从工作的那一刻起就注定是备胎!哼,我们是来救备胎的,所以果断在slave的配置里修改以下配置:

slave-read-only no

允许对slave进行写 *** 作,对,就是这么任性!这样备胎就可以准备上位了,剩下的就交给开发者把redis服务器换成新的服务器。更改后,登录到新服务器上的redis并执行命令:

不奴役任何人

至此,slave正式从备胎中被解除!

虽然只是简单的配置,但作为一个运维工程师,不正是这点点滴滴的积累才一步步走上大牛路的吗?说到底,运维不是讲技术,而是讲经验!运维还是老辣!!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/782513.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存