Redis+Keepalived高可用環境部署記錄
阿新 • • 發佈:2018-05-07
db文件 做了 ini 一個 keepalive red off -o BE
Keepalived 實現VRRP(虛擬路由冗余)協議,從路由級別實現VIP切換,可以完全避免類似heartbeat腦裂問題,可以很好的實現主從、主備、互備方案,尤其是無狀態業務,有狀態業務就需要額外花些功夫了。既然Mysql可以使用Keepalived很好的做到主從切換,那麽Redis自然可以使用這種方式實現高可用。
Redis主從實現完全沒有Mysql成熟,僅僅是可用而已,經過測試主從也不是那麽完全不靠譜,主要問題在於同步連接斷開之後需要重新全量同步,如果頻繁進行會對主服務帶來很大性能影響。 但現實中主從機器往往要求放在一個機櫃同一臺交換設備下,網絡閃斷情況極低;再者主從同步在同步數量量大情況下,需要將緩存區調得足夠大,不然也容易造成連接斷開。
實現切換邏輯如下:A和B兩臺機器
1)A 、B機器依次啟動,A機作為主、B機為從
2)主A機掛掉,B機接管業務並作為主。
3)A機起來,作為從SLAVEOF B
4)B機掛掉,A機再切回主
在Keepalived 有兩個角色:Master(一個)、Backup(多個),如果設置一個為Master,但Master掛了後再起來,必然再次業務又一次切換,這對於有狀態服務是不可接受的。解決方案就是兩臺機器都設置為Backup,而且優先級高的Backup設置為nopreemt 不搶占。
部署記錄:
0)服務器信息
192.168.10.205 redis-master 需要安裝redis(3.2.0版本)、keepalived(1.3.2版本) 192.168.10.206 redis-slave 需要安裝redis(3.2.0版本)、keepalived(1.3.2版本) 192.168.10.230 VIP
1)安裝redis服務(兩個節點機都要操作)
[root@redis-master ~]# cd /usr/local/src/ [root@redis-master src]# wget http://download.redis.io/releases/redis-3.2.0.tar.gz [root@redis-master src]# tar -zvxf redis-3.2.0.tar.gz [root@redis-master src]# cd redis-3.2.0 [root@redis-master redis-3.2.0]# make 添加相關文件及命令 [root@redis-master redis-3.2.0]# mkdir -p /usr/local/redis/bin/ [root@redis-master redis-3.2.0]# cd src [root@redis-master src]# cp redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel /usr/local/redis/bin/ [root@redis-master src]# cd ../ [root@redis-master redis-3.2.0]# cp redis.conf /etc/ 添加redis啟動腳本 [root@redis-master redis-3.2.0]# vim /etc/init.d/redis #!/bin/bash #chkconfig: 2345 10 90 #description: Start and Stop redis REDISPORT=6379 EXEC=/usr/local/redis/bin/redis-server REDIS_CLI=/usr/local/redis/bin/redis-cli PIDFILE=/var/run/redis.pid CONF="/etc/redis.conf" case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed" else echo "Starting Redis server..." $EXEC $CONF fi if [ "$?"="0" ] then echo "Redis is running..." fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE does not exist, process is not running" else PID=$(cat $PIDFILE) echo "Stopping ..." $REDIS_CLI -p $REDISPORT SHUTDOWN while [ -x ${PIDFILE} ] do echo "Waiting for Redis to shutdown ..." sleep 1 done echo "Redis stopped" fi ;; restart|force-reload) ${0} stop ${0} start ;; *) echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2 exit 1 esac 添加執行權限 [root@redis-master redis-3.2.0]# chmod 755 /etc/init.d/redis 設置開機自啟動 [root@redis-master redis-3.2.0]# chkconfig --add redis [root@redis-master redis-3.2.0]# chkconfig redis on 創建redis狀態日誌 [root@redis-master redis-3.2.0]# mkdir /var/log/redis/ [root@redis-master redis-3.2.0]# touch /var/log/redis/redis.log redis主從配置(先看下redis-master主節點的配置) [root@redis-master redis-3.2.0]# vim /etc/redis.conf ....... port 6379 ....... daemonize yes #這個修改為yes ....... bind 0.0.0.0 #綁定的主機地址。說明只能通過這個ip地址連接本機的redis。最好綁定0.0.0.0;註意這個不能配置成127.0.0.1,否則復制會失敗!用0.0.0.0或者本機ip地址都可以 ....... pidfile /var/run/redis.pid ....... logfile /var/log/redis/redis.log ....... dir /var/redis/redis #redis數據目錄 ....... appendonly yes #啟用AOF持久化方式 appendfilename "appendonly.aof" #AOF文件的名稱,默認為appendonly.aof appendfsync everysec #每秒鐘強制寫入磁盤一次,在性能和持久化方面做了很好的折中,是受推薦的方式。 ..... save 900 1 #啟用RDB快照功能,默認就是啟用的 save 300 10 save 60 10000 #即在多少秒的時間內,有多少key被改變的數據添加到.rdb文件裏 ....... slave-serve-stale-data yes #默認就會開啟 slave-read-only yes ...... dbfilename dump.rdb #快照文件名稱 ...... 另一個從節點redis-slave的redis.conf配置和上面基本差不多,只是多了下面一行配置: slaveof 192.168.10.205 6379 接著創建redis的數據目錄 [root@redis-master redis-3.2.0]# mkdir -p /var/redis/redis 然後啟動兩個節點的redis服務 [root@redis-master redis-3.2.0]# /etc/init.d/redis start Starting Redis server... Redis is running... [root@redis-master redis-3.2.0]# lsof -i:6379 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME redis-ser 17265 root 4u IPv4 59068 0t0 TCP *:6379 (LISTEN)
Redis+Keepalived高可用環境部署記錄