一谈为、redis 和 redis-sentinel 啟動時配置目錄權(quán)限的配置問題(redis采用yum安裝亡驰,不要用root用戶運(yùn)行redis)
- PID文件放置目錄的權(quán)限(/var/run/redis/)權(quán)限改為屬主屬組都是redis
- /etc/redis-sentinel.conf:屬主屬組都改為redis背率,因為redis-sentinel服務(wù)啟動后需要修改這個配置文件细层,沒權(quán)限的話服務(wù)啟動不了献雅。
二谤绳、架構(gòu)及redis主從配置說明
master:192.168.11.10:6379
slave1:192.168.11.12:6379
slave2:192.168.11.13:6379
# redis.conf
bind 0.0.0.0
protected-mode yes
port 6379
daemonize yes
pidfile /var/run/redis/redis.pid
logfile /var/log/redis/redis.log
stop-writes-on-bgsave-error yes
rdbcompression yes #是否壓縮持久化文件
rdbchecksum no #是否進(jìn)行文件md5檢測
dbfilename dump.rdb
dir /var/lib/redis
slave-serve-stale-data yes
slave-read-only yes
requirepass redis_pass
appendonly yes #該選項要打開占锯,RDB模式服務(wù)器異常時可能會丟失部分?jǐn)?shù)據(jù)袒哥,涉及到redis的兩種持久化方式的區(qū)別,分別是RDB和AOF模式
appendfilename "appendonly.aof"
appendfsync everysec
##############################
#從服務(wù)器上加上這兩條消略,主服務(wù)器上要把masterauth加上堡称,不讓主服務(wù)器掛掉后變成從服務(wù)器再同步主服務(wù)器后會失敗
slaveof 192.168.11.10 6379
masterauth redis_pass
reids 主從做好后在主服務(wù)器上連接redis執(zhí)行 info replication
可以看到如下結(jié)果
三、redis-sentinel 配置
#三個主機(jī)的 redis-sentine.conf 配置文件基本一致
# /etc/redis-sentinel.conf
protected-mode yes # redis3.2的安全設(shè)置艺演,沒有設(shè)置密碼是禁止遠(yuǎn)程連接
port 26379
sentinel myid dc91b154679b125aecbe3b04b54882dfc76f3ff9 #本機(jī)ID却紧,每一個sentinel不要把ID設(shè)置的一樣
sentinel monitor def_master 192.168.11.10 6379 2 #告訴sentinel去監(jiān)聽的地址,'def_master' 為master的名字胎撤,可以自定義晓殊。數(shù)字2表示當(dāng)有幾個sentinel認(rèn)為master失效時,master才失效
sentinel failover-timeout def_master 900000
sentinel auth-pass def_master redis_pass #設(shè)置slave和master的鏈接密碼,主從密碼要一致
sentinel config-epoch def_master 5 #故障轉(zhuǎn)移后伤提,最多有多少個從服務(wù)器可以同步數(shù)據(jù)巫俺,越少重新同步越快
dir '/tmp'
sentinel正常啟動后連接sentinel的端口,執(zhí)行 info sentinel
會看到以下結(jié)果
停掉redis主服務(wù)器的服務(wù)后肿男,主服務(wù)轉(zhuǎn)到192.168.11.13這臺服務(wù)器介汹,并且192.168.11.12的同步服務(wù)器變?yōu)?92.168.11.13
再把10上的redis服務(wù)啟動,13也開始向10進(jìn)行數(shù)據(jù)同步
三舶沛、使用VIP漂移解決 redis server IP 不固定的問題
??這里可以使用redis sentinel的一個參數(shù)client-reconfig-script嘹承,這個參數(shù)配置執(zhí)行腳本,sentinel在做failover的時候會執(zhí)行這個腳本如庭,并且傳遞6個參數(shù)<master-name>叹卷、 <role>、 <state>坪它、 <from-ip>骤竹、 <from-port>、 <to-ip> 哟楷、<to-port>瘤载,其中<to-ip>是新主redis的IP地址,可以在這個腳本里做VIP漂移操作
# vi /var/lib/redis/failover.sh
#!/bin/bash
set -u
set -e
MASTER_IP=${6}
MY_IP='192.168.11.12' # 每個Server本身的IP
VIP='192.168.11.100' # VIP
NETMASK='24' # Netmask
INTERFACE='eth0' # 接口
echo $INTERFACE
if [ ${MASTER_IP} = ${MY_IP} ]; then
sudo /sbin/ip addr add ${VIP}/${NETMASK} dev ${INTERFACE}
sudo /sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE}
exit 0
else
sudo /sbin/ip addr del ${VIP}/${NETMASK} dev ${INTERFACE}
exit 0
fi
exit 1
??賦予腳本執(zhí)行權(quán)限并且添加redis用戶對于ip卖擅,和arping命令的sudo權(quán)限
chmod 755 /var/lib/redis/failover.sh
chown redis: /var/lib/redis/failover.sh
echo -e "redis\tALL=(ALL)\tNOPASSWD:/sbin/ip,NOPASSWD:/sbin/arping" >> /etc/sudoers
??最后開啟redis-sentinel并且初次手動設(shè)置VIP。(測試后client-reconfig-script這個參數(shù)好像沒有觸發(fā)墨技,最后自己寫了個VIP漂移腳本解決了這個問題)
#########################################################################
# File Name: /var/lib/redis/failover.sh
# Author: lcs
# mail: liuchengsheng95@qq.com
# Created Time: 2018-04-07 15:38:33
#########################################################################
# 一定要用root用戶運(yùn)行
#!/bin/bash
MY_IP='192.168.11.16' # 每個Server本身的IP
VIP='192.168.11.100' # VIP
NETMASK='24' # Netmask
INTERFACE='eth1' # 接口
while true;do
MASTER_IP=$(redis-cli -h 127.0.0.1 -p 26379 info sentinel | grep address | cut -d, -f3 | cut -d= -f2 | cut -d: -f1)
if [ ${MASTER_IP} = ${MY_IP} ]; then
ip -4 addr | grep $VIP || (/sbin/ip addr add ${VIP}/${NETMASK} dev ${INTERFACE};/sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE})
else
ip -4 addr | grep $VIP && /sbin/ip addr del ${VIP}/${NETMASK} dev ${INTERFACE}
fi
sleep 10;
done