Redis+Keepalived 实现交互缓存 Redis主从交换脚本出错.

KING_Liu 2012-10-19 11:02:38
环境

192.168.10.1 VIP
192.168.10.2 Keepalived & Redis 的主服务器
192.168.10.3 Keepalived & Redis 的从服务器

想法:
当10.2(即主服务器)挂掉的时候,keepalived 的VIP会自动转到10.3
这个时候利用keepalived的notify_master 来调用一个setSelfIsMaster.sh

setSelfIsMaster.sh内容为:
#!/bin/sh
#########将自己设为Redis的主机
redis-cli -h 127.0.0.1 -p 6379 slaveof NO ONE

同时在启另外一个脚本检测原来10.2服务的Redis是否正常
如果正常
--->将10.2(Redis的Master)重新设置为Master
redis-cli -h 192.168.10.2 -p 6379 slaveof NO ONE

--->再将自己设置为10.2的Slave
redis-cli -h 192.168.10.3 -p 6379 slaveof 192.168.10.2 6379

但上面两个脚本不会写!!!


10.2设置同上


问题:

1.当10.2挂掉了,
10.3设置变成Redis的Master.
如果此时进行了大量的Set操作(set aaaa bbbb),VIP连接到的10.3,所能正常get,set
一段时间后,10.2恢复正常.那么此时VIP会连接到10.2.
而且也会将10.2重新设置为Redis的Master,将10.3设置为10.2的slave.

那么此时会不会有数据丢失的问题.比如还能get 到aaaa(注意此时VIP连接的是10.2,但aaaa是set在原来的10.3上面)


2.shell的脚本的问题
#!/bin/sh
#########将自己设为Redis的主机
redis-cli -h 127.0.0.1 -p 6379 slaveof NO ONE

--->1.报错:
: No such file or directory: ?#!/bin/sh
OK
求指导,第一个错是什么原因

--->2.问题:
从上面结果看
redis-cli -h 127.0.0.1 -p 6379 slaveof NO ONE
这条命令是执行成功的.
但是看后台运行记录,实际是失败的,信息如下.
[30295] 19 Oct 18:35:09 * Connecting to MASTER...
[30295] 19 Oct 18:35:09 # Unable to connect to MASTER: Success
[30295] 19 Oct 18:35:09 - Accepted 192.168.36.53:57765
[30295] 19 Oct 18:35:09 - Client closed connection
[30295] 19 Oct 18:35:10 * Connecting to MASTER...
[30295] 19 Oct 18:35:10 # Unable to connect to MASTER: Success
[30295] 19 Oct 18:35:10 - Accepted 192.168.36.53:57768
[30295] 19 Oct 18:35:10 - Client closed connection
[30295] 19 Oct 18:35:11 - DB 0: 9 keys (0 volatile) in 16 slots HT.

但是这条命令,直接在命令行里面执行是没有问题的.
执行之后,后台信息如下:
[30295] 19 Oct 18:35:11 * MASTER MODE enabled (user request)
[30295] 19 Oct 18:35:11 - Client closed connection
[30295] 19 Oct 18:35:11 - Accepted 192.168.36.53:57772
[30295] 19 Oct 18:35:11 * Slave ask for synchronization
[30295] 19 Oct 18:35:11 * Starting BGSAVE for SYNC
[30295] 19 Oct 18:35:11 * Background saving started by pid 31201
[31201] 19 Oct 18:35:11 * DB saved on disk
[30295] 19 Oct 18:35:11 * Background saving terminated with success
[30295] 19 Oct 18:35:11 * Synchronization with slave succeeded


不知道,我把需求和问题描述清楚了没有.
还请了解的指导.
最好是能用即时工具QQ:181057908
...全文
454 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
a8509190 2012-10-20
  • 打赏
  • 举报
回复
不太懂,没人回答?
KING_Liu 2012-10-19
  • 打赏
  • 举报
回复
第一个问题:测试了一下不行的.

于是重新想了个办法.

只在从机上执行将自己改为Redis的Master即可.

主机加两句
1.将本机设置为从机(此时他还是独立的Master)的从机;
2.等待一定时间(等待与从机(此时的Master)同步数据);
3.将本机再次设置为Master(由于步聚1,所以它此时仍是从机的从机)
4.将从机设置为本地的从机(因此时,它仍是Master)

经测试OK.

所以,现在就剩shell脚本的问题了.

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧