在Redis-Sentinel的client-reconfig-script指令碼中設定VIP
在Redis-Sentinel的client-reconfig-script指令碼中設定VIP
當使用Redis-Sentinel做冗餘時,如何以不同方式使用VIP,我認為使用client-reconfig-script指令碼是一種可行方法,讓我們試試。
環境
CentOS 6.5 x86_64
redis-2.8.9-1.el6.remi.x86_64
三臺機器構成一個可用的Redis叢集。
埠預設6379,在這三臺Redis中,分別安裝redis-sentinel。
redis1 192.168.0.1/24
redis2 192.168.0.2/24
redis3 192.168.0.3/24
VIP 192.168.0.4/24
Redis,Redis-Sentinel 安裝
使用yum安裝remi, redis 2.8。
設定Reids1作為Master,複製到其他Slave。
yum install --enablerepo=epel,remi redis -y
sed -i "s|bind 127.0.0.1|bind 0.0.0.0|g" /etc/redis.conf
service redis start
chkconfig redis on
設定Redis2, Redis3作為Slave。
redis-cli
127.0.0.1:6379> SLAVEOF 192.168.0.1 6379
VIP設定指令碼
這個是在failover時執行的指令碼。
如下所示的引數會傳遞給指令碼client-reconfig-script。
# The following arguments are passed to the script:
#
# <master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>
第6個增加VIP,將成為一個Master,其它的則刪除VIP。在failover時,僅僅使用ip命令可能會產生arp問題,因此使用arping命令來丟擲GRAP。在使用ip、arping命令時需要root許可權,這裡使用sudo來執行命令。
vim /var/lib/redis/failover.sh
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.d/redis
sed -i "s|Defaults.*requiretty|#Defaults\trequiretty|" /etc/sudoers
chmod 440 /etc/sudoers.d/redis
#!/bin/bash
MASTER_IP=${6}
MY_IP=‘192.168.0.1‘ # 每個Server本身的IP
VIP=‘192.168.0.4‘ # VIP
NETMASK=‘24‘ # Netmask
INTERFACE=‘eth0‘ # 介面
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
Redis-Sentinel設定
開始設定redis-sentonel。
你只需在第一次手工設定VIP。
vim /etc/redis-sentinel.conf
service redis-sentinel start
chkconfig redis-sentinel on
ip addr add 192.168.0.4/24 dev eth0
# sentinel.conf
port 26379
logfile /var/log/redis/sentinel.log
sentinel monitor mymaster 192.168.0.1 6379 2
sentinel down-after-milliseconds mymaster 3000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 60000
sentinel client-reconfig-script mymaster /var/lib/redis/failover.sh
結論
之後你可以嘗試kill master而不是當機來測試failover,我認為這是個比較好且容易實現的方法。
sentinel down-after-milliseconds mymaster 3000
大約在3秒左右會檢測到redis的當機。在更惡劣的環境,可以嘗試減小這個值。
原文:http://blog.youyo.info/blog/2014/05/24/redis-cluster/
b.com/benweet/stackedit
相關文章
- Redis中Lua指令碼的使用和設定超時坍淑Redis指令碼
- 在CMakeLists.txt中設定版本號,並在程式碼中呼叫
- 平臺設計中的指令碼管理指令碼
- PHP 在redis-sentinel模式下的使用總結PHPRedis模式
- 【Redis】獲取沒有設定ttl的key指令碼Redis指令碼
- 設定Linux伺服器IP地址的shell指令碼Linux伺服器指令碼
- RadioGroup 在TS schema 中的設定
- Windows ntp時間同步設定(bat指令碼)WindowsBAT指令碼
- Ubuntu 設定開機自啟動指令碼Ubuntu指令碼
- 什麼是Shell指令碼?Shell指令碼在Linux運維工作中的地位!指令碼Linux運維
- linux設定開機自啟動指令碼的最佳方式Linux指令碼
- 怎樣在windows上定時執行python指令碼WindowsPython指令碼
- ubuntu-18.04 設定開機啟動指令碼Ubuntu指令碼
- ubuntu14 設定開機啟動指令碼Ubuntu指令碼
- Linux開啟防火牆並設定策略指令碼Linux防火牆指令碼
- Shell指令碼在Linux運維工作中的地位!指令碼Linux運維
- flask,mysql如何設定資料庫中的VIP會員時長為一個月FlaskMySql資料庫
- 在 Linux 中執行.sh 指令碼 No such file or directoryLinux指令碼
- 在word中怎麼設定目錄 word設定目錄的方法
- Lua 指令碼在 Redis 事務中的應用實踐指令碼Redis
- Lua指令碼在Redis事務中的應用實踐指令碼Redis
- solaris中如何設定解析度?在solaris中設定解析度的方法教程
- linux啟定時指令碼Linux指令碼
- 在Docker中,如何更改Docker的預設儲存設定?Docker
- 8.4.9 在truffle環境中執行外部指令碼指令碼
- 在SSIS中自定義VB.Net指令碼(下)OF指令碼
- Jenkins的Pipeline指令碼在美團餐飲SaaS中的實踐Jenkins指令碼
- 設定msyqlphp-fpm開機自動啟動指令碼PHP指令碼
- 在 Visual Studio Code (VS Code) 中設定
- 在Linux中,如何設定網路路由?Linux路由
- 使用shell指令碼在Linux中管理Java應用程式指令碼LinuxJava
- win10系統下如何在word任意頁尾設定頁碼_win10在word中設定頁尾頁碼的方法Win10
- linux shell指令碼中 =~ 的作用Linux指令碼
- 在Oracle SQL中設定每週的起始日期IOOracleSQL
- Linux系統如何設定開機自動執行指令碼?Linux指令碼
- win10工作列圖示在中間怎麼設定 win10工作列圖示在中間的設定方法Win10
- Linux 定時執行指令碼、命令Linux指令碼
- Linux定時執行.sh指令碼Linux指令碼
- ORACLE常用定時備份指令碼Oracle指令碼