雙機熱備特指基於高可用系統中的兩臺服務器的熱備(或高可用),因兩機高可用在國內使用較多,故得名雙機熱備,雙機高可用按工作中的切換方式分爲:主-備方式(Active-Standby方式)和雙主機方式(Active-Active方式),主-備方式即指的是一臺服務器處於某種業務的激活狀態(即Active狀態),另一臺服務器處於該業務的備用狀態(即Standby狀態)。而雙主機方式即指兩種不同業務分別在兩臺服務器上互爲主備狀態(即Active-Standby和Standby-Active狀態)。
大白話就是,當主服務器掛了之後,從服務器立馬切換爲主服務器繼續工作,當原先主服務器修復完善啓動後,會自動充當從服務器的角色繼續工作。這樣就很好的避免了,由於一臺主機出現故障,系統掛點的現象出現。
Sentinel(哨兵)是用於監控redis集羣中Master狀態的工具,已經集成在redis官方版本中,可以直接配置使用。
1. 兩個linux系統,ip分別爲192.11.3.1 和 192.11.3.2;
2. 兩個linux分別安裝redis
#網絡下載redis壓縮包
wget http://download.redis.io/releases/redis-4.0.6.tar.gz
#解壓下載完成的redis包
tar -xzvf redis-4.0.6.tar.gz
#進入到redis目錄內
cd redis-4.0.6
#編譯
make
3.修改redis的redis.conf
1.在 redis.conf 中,
2.找到 bind 127.0.0.1 註釋掉(不註釋只能本機訪問)
3.找到 protected-mode yes ,修改yes爲no (關閉保護模式)
4.主從複製
- 192..11.3.1(master) 192.11.3.2(slave)
- 是什麼:redis中的複製(master/slave)主從複製,主機數據更新後根據配置和策略自動同步到備機的master/slaver機制,master以寫爲主,slaver以讀爲主
- 作用:讀寫分離、容災恢復
在 192.11.3.2 的 redis.conf 文件底部添加 slaveof 192.11.3.1 6379,使其成爲192.11.3.1的slave,會自動保持和master的數據保持一致
5.雙機熱備
找到兩個redis的 sentinel.conf (和redis.conf同目錄),修改如下:
1. 找到 sentinel monitor mymaster 127.0.0.1 6379 2 ,替換爲 sentinel monitor mymaster 192.11.3.1 6379 1 (兩個conf都需要替換)(配置內容說明 參考 http://blog.csdn.net/a1282379904/article/details/52335051 )
2. 找到 # protected-mode no 去掉#
6.啓動
依次啓動兩機的redis 服務和sentinel服務
7. java 連接 redis
Set<String> sentinels = new HashSet<String>();
String hostAndPort1 = "192.11.3.1:26379";
String hostAndPort2 = "192.11.3.2:26379";
sentinels.add(hostAndPort1);
sentinels.add(hostAndPort2);
String clusterName = "mymaster";
JedisSentinelPool redisSentinelJedisPool = new JedisSentinelPool(clusterName, sentinels);
Jedis jedis = null;
try {
jedis = redisSentinelJedisPool.getResource();
jedis.set("RNG", "niubi");
System.out.println(jedis.get("RNG"));
} catch (Exception e) {
e.printStackTrace();
} finally {
redisSentinelJedisPool.returnBrokenResource(jedis);
}
當kill掉192.11.3.1的redis服務後,192.11.3.2的redis會自動升爲成爲master,redis服務依然可用。