Redis 主從配置密碼以及哨兵
Redis 主從介紹
主Redis寫入數據時,從Redis會通過Redis Sync機制,同步數據,確保數據一致。並且Redis有哨兵(Sentinel)機制,Redis主掛掉會自動幫我們提升從為主。
主從同步類型以及哨兵介紹
級聯復制
為避免主Redis同時讀寫壓力過大,三個包括以上節點的Redis,可以配置為級聯復制,如下圖所示,節點4可以同步節點3數據,也可以同步節點2數據。
一主多從
需要兩個以及以上節點。因為Redis是異步同步數據,數據寫入主節點並返回客戶端,並不代表從節點也已經寫入數據,而從節點同步的結果也並不會返回給主節點,而是會直接丟棄。所以(上圖)級聯復制從節點3同步從節點2數據,就又多了一層丟數據的風險,具體采用哪種方式看自己情況。
哨兵機制
有了主從,那我們需要對其進行監控,Sentinel會不斷地檢查你的主服務器和從服務器是否運作正常。某個節點故障後,Sentinel 會開始一次自動故障遷移操作, 它會將失效主服務器的其中一個從服務器升級為新的主服務器, 並讓失效主服務器的其他從服務器改為復制新的主服務器; 當客戶端試圖連接失效的主服務器時, 集群也會向客戶端返回新主服務器的地址, 使得集群可以使用新主服務器代替失效服務器。Redis Sentinel 是一個分布式系統, 你可以在一個架構中運行多個 Sentinel 進程(Progress), 這些進程使用流言協議(Gossip Protocols)來接收關於主服務器是否下線的信息, 並使用投票協議(Agreement Protocols)來決定是否執行自動故障遷移, 以及選擇哪個從服務器作為新的主服務器。雖然 Redis Sentinel 釋出為一個單獨的可執行文件 redis-sentinel , 但實際上它只是一個運行在特殊模式下的 Redis 服務器。
Redis 主從配置
系統環境 Debian,一主一從配置。
主節點IP:192.168.198.131
從節點IP:192.168.198.132
端口使用默認6379
節點1 節點2 全部執行以下命令,不同的地方有標註。
cd /data/ #我習慣把Redis 放在data目錄下
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar -xf redis-3.2.9.tar.gz
mv redis-3.2.9 redis
cd redis/
make && make install
cp src/redis-server /usr/bin/redis-server
cp src/redis-cli /usr/bin/redis-cli
mv redis.conf redis.conf~
cat redis.conf~ | grep -Ev "^$|^#" > redis.conf
vim redis.conf #修改以下內容,不是必須的
bind 192.168.198.131 #兩臺主機分別改為自己的IP
logfile "/data/redis/logs/redis.log"
daemonize yes #啟用守護模式
slave-read-only yes #slave 默認就是只讀的,這裏不用管。
protected-mode no #protected-mode 是3.2 之後加入的新特性,為了禁止公網訪問redis cache,加強redis安全的。根據自己需要配置,它啟用的條件,有兩個,沒有bind IP 以及沒有設置訪問密碼。
requirepass "admin.123" #設置redis登錄密碼
masterauth "admin.123" #主從認證密碼,否則主從不能同步
啟用主從模式只有Redis Slave 添加一行,啟動服務主從就配置好了。
slaveof 192.168.198.131 6379
檢查主從狀態
~]# redis-cli -c -h 192.168.198.131 -p 6379
192.168.198.131:6379> info
.......
# Replication #中間省略了內容,自己可以看看,主要是找到這一段,看主從狀態。
role:master
connected_slaves:1
slave0:ip=192.168.198.132,port=6379,state=online,offset=5700675,lag=0
master_repl_offset:5700675
repl_backlog_active:1
repl_backlog_size:10000000
repl_backlog_first_byte_offset:1
repl_backlog_histlen:5707674
.......
Redis Sentinel 配置
vim sentinel.conf #在redis的跟目錄下
port 26379
daemonize yes
protected-mode no #保護模式如果開啟只接受回環地址的ipv4和ipv6地址鏈接,拒絕外部鏈接,而且正常應該配置多個哨兵,避免一個哨兵出現獨裁情況,如果配置多個哨兵那如果開啟也會拒絕其他sentinel的連接。導致哨兵配置無法生效。
logfile "/data/redis/logs/sentinel.log" #指明日誌文件
dir "/data/redis/sentinel"
sentinel monitor mymaster 192.168.198.131 6379 1 #哨兵監控的master。
sentinel down-after-milliseconds mymaster 5000 #master或者slave多少時間(默認30秒)不能使用標記為down狀態。
sentinel failover-timeout mymaster 9000 #若哨兵在配置值內未能完成故障轉移操作,則任務本次故障轉移失敗。sentinel auth-pass mymaster tomredis.123 #如果redis配置了密碼,那這裏必須配置認證,否則不能自動切換
/data/redis/src/redis-sentinel /data/redis/sentinel.conf #啟動服務
如果有下面報錯 啟動命令後面要加上 --sentinel
*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 6
>>> ‘sentinel monitor mymaster 192.168.198.131 6379 1‘
sentinel directive while not in sentinel mode
多個哨兵配置文件一樣,正常情況下要配置奇數哨兵,避免切換時候票數相同,出現競爭,影響線上業務。
Redis 主從配置密碼以及哨兵