redis哨兵配置主從

redis哨兵的啓動和redis實例的啓動沒有關係。因此能夠在任何機器上啓動redis哨兵。至少要保證有兩個哨兵在運行,要否則宕機後哨兵會找不到主節點。java

配置步驟:redis

1.在redis的配置文件中添加鑑權和驗證(添加requirepass和masterauth),redis主從都須要配置,配置的密碼通常相同。服務器

2.redis通常都在內網運行,因此註釋掉#bind 127.0.0.1測試

3.關閉保護模式,protected-mode 把yes改成noui

4.添加sentinel.conf配置文件:spa

#sentinel端口
port 26379
#工做路徑,注意路徑不要和主重複
dir "/usr/local/redis-6379"
# 守護進程模式
daemonize yes
#關閉保護模式
protected-mode no
# 指明日誌文件名
logfile "./sentinel.log"
#哨兵監控的master,主從配置同樣,這裏只用輸入redis主節點的ip/port和法定人數。
sentinel monitor mymaster 192.168.125.128 6379 1
# master或slave多長時間(默認30秒)不能使用後標記爲s_down狀態。
sentinel down-after-milliseconds mymaster 5000
#若sentinel在該配置值內未能完成failover操做(即故障時master/slave自動切換),則認爲本次failover失敗。
sentinel failover-timeout mymaster 18000
#設置master和slaves驗證密碼
sentinel auth-pass mymaster 123456 
sentinel parallel-syncs mymaster 1//指定了在執行故障轉移時, 最多能夠有多少個從服務器同時對新的主服務器進行同步

Sentinel參數在運行時能夠使用SENTINEL SET命令更改日誌

上面配置中的mymaster爲該主從的名字,代碼中會使用。code

經過哨兵查看集羣的信息:server

$ 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//查看哨兵信息

啓動哨兵:blog

方式一:redis-sentinel /path/to/sentinel.conf(推薦,這種方式啓動和redis實例沒有任何關係)
方式二:redis-server /path/to/sentinel.conf --sentinel

java測試代碼:

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();
    }
相關文章
相關標籤/搜索