通常狀況下yum安裝redis的啓動目錄在:/usr/sbin ;配置目錄在/etc/redis/在其目錄下會有默認的redis.conf和redis-sentinel.conf
node
redis高可用配置:
配置哨兵(redis-sentinel),個人全部配置文件都放在/etc/redis-cluster/目錄下git
#基本配置 port 26379 daemonize yes logfile "/var/log/redis/sentinel_26379.log" protected-mode no dir /var/lib/redis-cluster/sentinel #檢查配置 sentinel monitor mymaster 127.0.0.1 6379 1 (指向master服務器或端口) #sentinel auth-pass mymaster passwd sentinel parallel-syncs mymaster 1 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 18000
#基本配置 port 26380 daemonize yes logfile "/var/log/redis/sentinel_26380.log" protected-mode no dir /var/lib/redis-cluster/sentinel #檢查配置 sentinel monitor mymaster 127.0.0.1 6379 1 (指向master服務器或端口) #sentinel auth-pass mymaster passwd sentinel parallel-syncs mymaster 1 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 18000
sentinel monitor的參數聲明的含義以下所示:
sentinel monitor [master-group-name] [ip] [port] [quorum]
第一行用於告訴Redis監控一個master叫作mymaster,它的地址在127.0.0.1,端口爲6379,法定人數是2。每一個參數都很容易理解,可是quorum須要解釋一下:
一、quorum是Sentinel須要協商贊成master是否可到達的數量。爲了真正的標記slave爲失敗,並最終是否須要啓動一個故障轉移進程。
二、不管怎樣,quorum只用於檢測故障。爲了實際執行故障轉移,Sentinel須要選舉leader並進行受權。這隻發生在大多數Sentinel進程的選舉。
daemonize yes protected-mode no port 6379 #requirepass "passwd" #masterauth "passwd"
protected-mode no port 6380 daemonize yes #requirepass "passwd" #masterauth "passwd" slaveof 127.0.0.1 6379
cd /usr/sbin/ #啓動master redis redis-server /etc/redis-cluster/redis-master-6379.conf #啓動slave redis redis-server /etc/redis-cluster/redis-slave-6380.conf #啓動redis-sentinel redis-sentinel /etc/redis-cluster/redis-sentinel_26379.conf redis-sentinel /etc/redis-cluster/redis-sentinel_26380.conf
咱們能夠在/var/log/redis/sentinel_26379.log
目錄下查看響應的日誌。redis
來單機的配置註釋掉 #spring.redis.host=127.0.0.1 # Redis服務器鏈接端口 #spring.redis.port=6379 增長高可用配置 #哨兵監聽redis server名稱 spring.redis.sentinel.master=mymaster #哨兵的配置列表 spring.redis.sentinel.nodes=127.0.0.1:26379,127.0.0.1:26380 代碼中就能夠在RedisUtils直接用了,如: @Autowired private RedisTemplate redisTemplate; 後面在控制器能夠直接用RedisUtils定義的方法了
具體RedisUtils代碼見下面的地址:
https://coding.net/u/evening/...spring
如今就已經部署成功了,咱們能夠斷掉一臺redis-sentinel或者redis測試一下,會自動切換的。服務器
這個過程也遇到了不少坑,總結一下。
1:所有配置完成後啓動項目報:All sentinels down, cannot determine where is mymaster master is running…
這個可能有兩個緣由:端口沒有開放或者redis-sentinel文件中沒有加protected-mode no
2:集成spring boot後redis存值會多個xacxedx00x05tx00x0c東西。
這個是由於使用了默認的序列化,咱們使用jackson2JsonRedisSerializer就能夠了,詳見上面鏈接地址。測試