redis配置主從關係
1.在指定位置建立資料夾然後在裡面放入解壓後redis的配置檔案,然後cp多份改名分別為redis6379.conf、redis6380.conf、redis6381.conf
2.vi逐個修改配置檔案:修改埠為對應檔名埠,後臺執行模式,pid檔案 ,logfile,dbfilename,requirpass,masterauth
在主從伺服器配置主伺服器的登入密碼,如:
如:
port 6379
daemonize yes
pidfile /var/run/redis6379.pid
logfile "6379.log"
dbfilename dunmp6379.rdb
requirpass 123
slave-read-only yes(從機只能讀取)
注:slaveof 192.168.200.108 6380(從配置)注意:在使用sentinel監控主從節點的時候,從節點需要是使用動態方式配置的,如果直接修改配置檔案,後期sentinel實現故障轉移的時候會出問題
masterauth123(主從都配置,如果只是實現主從主機可以不用配置,但是要使用哨兵模式那就需要)
註釋掉#bind 127.0.0.1
protected-mode 把yes改為no
3.分別啟動這幾個redis服務用不用的埠連結這幾個服務,連結成功後輸入info replication 檢視都是master
4.手動建立從機,在連結上服務後使用slaveof ip 埠 把自己作為從機跟隨設定的主機混,此時從機中能讀不能寫,主機可以讀和寫,如果主機死掉從機可以繼續執行(讀取資料)主機一旦恢復將回到原來狀態,但是當從機死掉後再啟動就會失去之前的關係,如果需要繼續當從機這需要重新使用(slaveof ip 埠)命令。如果需要繼續新增其他從機可以直接使用剛才命令,資料回直接複製一份給新建的從機。
5.從機可以作為其他機器的主機,這樣可以實現傳遞下去
6.建立哨兵管理(如果只是把redis作為快取可以關掉持久化):
哨兵詳細知識:http://doc.redisfans.com/topic/sentinel.html
至少要保證有兩個哨兵在執行,要不然宕機後哨兵會找不到主節點。
在安裝redis目錄下找到sentinel.conf,複製該文件到單獨的資料夾下取名為其他埠檔案(sentinel6382.conf)編輯此檔案。包括port,protected-mode,dir,monitor,auth-pass,down-after-milliseconds,failover-timeout , parallel-syncs
port 6382
protected-mode no
dir "/usr/local/redis/redis-data"(預設是/tmp,可以檢視執行資料)
sentinel monitor mymaster 192.168.2.173 6379 1 (mymaster 可以隨便取,最後的1表示只要有一個哨兵發現主機死掉就判斷死亡開始切換)
sentinel auth-pass mymaster 123 (這個密碼需要和redis.conf中的masterauth一致)
sentinel down-after-milliseconds mymaster 15000(哨兵每秒對mymasterPing時,超15000毫秒認為主機宕機)
sentinel failover-timeout mymaster 900000(當主從切換多久後認為主從切換失敗)
sentinel parallel-syncs mymaster 1(執行故障轉移, 最多有幾個從伺服器同時對新主伺服器同步, 數字越小故障轉移時間越長
注:關掉持久化
(save "" 或者
#save 900 1
#save 300 10
#save 60 10000 )
要實現哨兵也後臺啟動需要在哨兵配置檔案加上如下2句:
daemonize yes
logfile "/var/log/sentinel_log.log"
Sentinel引數在執行時可以使用SENTINEL SET命令更改
上面配置中的mymaster為該主從的名字,程式碼中會使用
按照之前的命令把所有的機器按照主從的方式命令動態配置一遍建立主從機關係。
啟動哨兵 redis-sentinel sentinel6382.conf
請注意,當啟動redis-sentinel 後,哨兵會根據主機配置自動查詢叢機,會在主機的sentinel.conf檔案中自動生成叢機IP,所以不需要將所有叢機IP 列出來
當啟動redis-sentinel時,會在主機sentinel.conf和從機sentinel.conf中生成myid,建議重啟redis-sentinel時將兩個sentinel.conf中生成的myid刪除,不然主從切換時,會根據myid去找對應的從機,當新生成的myid和原來的myid不一致,將無法切換。(最好把後面的自動生成檔案一起刪除)
通過哨兵檢視叢集的資訊:
$ redis-cli -p 26379
sentinel master mymaster//檢視master的狀態
SENTINEL slaves mymaster //檢視salves的狀態
SENTINEL sentinels mymaster //檢視哨兵的狀態
SENTINEL get-master-addr-by-name mymaster//獲取當前master的地址
info sentinel//檢視哨兵資訊
程式碼測試:
public static void main(String[] args) {
Set<String> sentinels = new HashSet<String>();
sentinels.add(new HostAndPort("192.168.125.128", 26379).toString());
sentinels.add(new HostAndPort("192.168.125.129", 26379).toString());
sentinels.add(new HostAndPort("192.168.125.130", 26379).toString());
JedisSentinelPool sentinelPool = new JedisSentinelPool("mymaster", sentinels);
System.out.println("Current master: " + sentinelPool.getCurrentHostMaster().toString());
Jedis master = sentinelPool.getResource();
master.auth("pwdisadmin");
master.set("username","cczz");
Jedis master2 = sentinelPool.getResource();
master2.auth("pwdisadmin");
String value = master2.get("username");
System.out.println("username: " + value);
master2.close();
sentinelPool.close();
sentinelPool.destroy();
}