private void Failover(WatchGroup group) { var toLift = SelectOneSlave(group.Slaves.Values); if (toLift == null) { throw new Exception("no slave selected"); } Console.WriteLine("failover lift {0} to master", toLift.EndPoint); toLift.Server.MakeMaster(ReplicationChangeOptions.Broadcast); foreach (var slave in group.Slaves.Values) { if (slave != toLift) { slave.Server.SlaveOf(toLift.EndPoint); } } }
static void InitService() { AutoInit.Init(); zkAdaptor = new ZkAdaptor(); amqpAdaptor = new AmqpAdaptor(ConfigManager.MQIP(), ConfigManager.AMQPPort(), ConfigManager.MQUser(), ConfigManager.MQPass()); ServiceImplementStub.Bind <IWatcherServiceNotifyImpl>(amqpAdaptor, new WatcherServiceImpl()); //dbClientNotifyDelegate = new DbClientNotifyDelegate(zkAdaptor); watcherServiceNotifyDelegate = new WatcherServiceNotifyDelegate(amqpAdaptor); amqpAdaptor.BeginReceive(); zkAdaptor.BeginReceive(); var toWatch = ConfigManager.Instance.Read <int>("WatcherService", "WatchNum"); var watchGroups = new List <WatchGroup>(); for (int i = 1; i <= toWatch; i++) { var group = new WatchGroup() { GroupName = ConfigManager.Instance.Read <string>("WatcherService", "WatchName" + i), Quorum = ConfigManager.Instance.Read <int>("WatcherService", "WatchQuorum" + i), DownAfterPeriod = ConfigManager.Instance.Read <int>("WatcherService", "WatchDownAfter" + i), ParallelSync = ConfigManager.Instance.Read <int>("WatcherService", "WatchParallelSync" + i), FailoverTime = ConfigManager.Instance.Read <int>("WatcherService", "WatchFailoverTimeout" + i), }; group.SetCurrentMaster(new MasterInstance(group) { EndPoint = ConfigManager.Instance.Read <EndPoint>("WatcherService", "WatchAddr" + i), }); watchGroups.Add(group); } watcherManager = new WatcherManager(watchGroups); }
public MasterInstance(WatchGroup @group) : base(@group) { }
public RedisInstanceBase(WatchGroup group) { Group = group; }
public SlaveInstance(WatchGroup @group) : base(@group) { }