Redis+Keepalived高可用环境部署记录
Posted 散尽浮华
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis+Keepalived高可用环境部署记录相关的知识,希望对你有一定的参考价值。
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服务(两个节点机都要操作)
[[email protected] ~]# cd /usr/local/src/ [[email protected] src]# wget http://download.redis.io/releases/redis-3.2.0.tar.gz [[email protected] src]# tar -zvxf redis-3.2.0.tar.gz [[email protected] src]# cd redis-3.2.0 [[email protected] redis-3.2.0]# make 添加相关文件及命令 [[email protected] redis-3.2.0]# mkdir -p /usr/local/redis/bin/ [[email protected] redis-3.2.0]# cd src [[email protected] src]# cp redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel /usr/local/redis/bin/ [[email protected] src]# cd ../ [[email protected] redis-3.2.0]# cp redis.conf /etc/ 添加redis启动脚本 [[email protected] 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 添加执行权限 [[email protected] redis-3.2.0]# chmod 755 /etc/init.d/redis 设置开机自启动 [[email protected] redis-3.2.0]# chkconfig --add redis [[email protected] redis-3.2.0]# chkconfig redis on 创建redis状态日志 [[email protected] redis-3.2.0]# mkdir /var/log/redis/ [[email protected] redis-3.2.0]# touch /var/log/redis/redis.log redis主从配置(先看下redis-master主节点的配置) [[email protected] 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的数据目录 [[email protected] redis-3.2.0]# mkdir -p /var/redis/redis 然后启动两个节点的redis服务 [[email protected] redis-3.2.0]# /etc/init.d/redis start Starting Redis server... Redis is running... [[email protected] 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高可用环境部署记录的主要内容,如果未能解决你的问题,请参考以下文章
SuSE11环境下Redis+Keepalived实现高可用技术
Redis集群高可用(Keepalived+Twemproxy)