Redis故障切换
更新:
今天,我会建议您检查出redis-sentinel,通过Redis的作者antirez用于监视和自动故障转移的工具。
原件回复:
检查SLAVEOF
命令:http://redis.io/commands/slaveof
当你发现你的主站出现故障,问题在你的奴隶之一SLAVEOF NO ONE
推动它掌握。然后把你的另一个奴隶指向它的新主人。另请参阅“无停机时升级或重新启动Redis实例”:http://redis.io/topics/admin
对于管理配置文件,您可以沿着这些方向执行某些操作(注意:未经测试,意为示例)。下面的示例假定两个配置文件为每个服务器(/etc/redis/server1.master.conf
,/etc/redis/server1.slave.conf
,等等),一个具有服务器作为一些预定义主的奴隶:
#!/bin/sh
master()
{
server_name=$1
redis-cli slaveof no one
ln -sf /etc/redis/$server_name.master.conf /etc/redis/$server_name.conf
}
# Usage: slave(server1 server2 6379)
slave()
{
server_name=$1
master=$2
master_port=$3
redis-cli slaveof $master $master_port
ln -sf /etc/redis/$server_name.slave.conf /etc/redis/$server_name.conf
}
而是具有预设的配置文件,您可以在编辑与例如飞行sed
。基本上,您要确保在配置文件中始终有一个slaveof
节,可以指向主节点或slaveof no one
。然后重写使用sed
配置(同样,没有测试,就意味着作为深思):(3.2版本为最新的稳定今天)
#!/bin/sh
master()
{
server_name=$1
config=$server_name.conf
redis-cli slaveof no one
sed -i "s/^slaveof.*/slaveof no one/" $config
}
# Usage: slave(server1 server2 6379)
slave()
{
server_name=$1
config=$server_name.conf
master=$2
master_port=$3
redis-cli slaveof $master $master_port
sed -i "s/^slaveof.*/slaveof $master $master_port/" $config
}
我会建议寻找到的Redis集群。集群这是一种新方法,不再哨兵。故障切换的原理是一样的,从设备在主设备停机的情况下提升主设备的性能,并增加新的功能,包括Redis支持的分条逻辑。应用程序只需要连接到具有一组节点的集群,就是这样。
如果我们正在谈论一般故障切换,请注意,Redis集群不保证高度一致性。
请找到片段来自: http://redis.io/topics/cluster-tutorial
“的Redis集群是不能够保证强一致性具体而言,这意味着,在一定条件下有可能Redis的集群将丢失是写操作。通过系统给客户确认。
的第一个原因的Redis集群可以输写是因为它使用异步复制。
还有一个值得注意的场景,Redis集群将丢失写入,这发生在网络分区中,客户端与包含至少一个主控的少数实例隔离。“
感谢莱纳斯,我曾尝试在Redis的客户其工作正常,但如何改变同样在上飞的Redis的conf,是否有可用的任何脚本?谢谢 – vijay 2012-02-13 04:28:53
太棒了!我不t知道你使用了哪个redis客户端库,但我猜它有一个'slaveof'命令。对于配置文件,你可以为每个服务器配置两个配置,一个用于slave,一个用于master,以及它们之间的符号链接。 – 2012-02-13 12:25:20