我这里装的是一主三从,其中有一个从一直不能切换到主,因此这台机器上不须要配置keepalived,只须要在redis.conf文件配置上加上slaveof 20.200.45.95 6479,这个IP配置的是虚拟IP的地址,由于你不知道主机到时候会是哪一台IP地址。c++
机器信息:20.200.45.72 主redis
20.200.45.73 从安全
20.200.45.74 从ruby
20.200.45.75 从(永远不能升为主)bash
申请的虚拟IP:20.200.45.95app
yum install gcc zib ruby rubygems tcl测试
解压:tar -zxvf redis-4.0.2.tar.gzspa
> cd redis-4.0.2rest
> make日志
> make test
> make install
安装成功后,在/usr/local/bin/目录下,会出现6个文件,以下图
你能够在redis-4.0.2目录下,建立bin文件夹,把/usr/local/bin/下的文件拷贝到
redis-4.0.2/bin目录下,在建立个logs文件夹,步骤以下:
> cd redis-4.0.2
> mkdir bin
> mkdir logs
> cp /usr/local/bin /home/user1/redis-4.0.2/bin
给其中三个文件赋予高一点的权限,最高是777
>chmod 777 redis-cli
>chmod 777 redis-server
>chmod 777 redis-sentinel
每一个redis配置文件都一致,注意:永远不能升为主的机器上,再加上slaveof 20.200.45.95 6479 这个配置就行了,别的机器不须要这个配置。
redis.conf基本配置:
bind 0.0.0.0
port 6479
protected-mode no
daemonize yes
pidfile "app/redis1z3c/redis/redis_6479.pid"
logfile "app/redis1z3c/redis/logs/redis.log"
stop-writes-on-bgsave-error no
dir "app/redis1z3c/redis/bin"
slave-serve-stale-data yes
slave-read-only no
slave-priority 80
appendonly yes
我redis安装在/app/redis1z3c/redis目录下
启动72机器:后面73,74,75依次都是这个命令
> cd /app/redis1z3c/redis/bin
> ./redis-server ../redis.conf ##启动redis
> /redis-cli -h 20.200.45.72 -p 6479
输入info,能够看到redis信息,
会发现除了75的机器,每一台都是master
75机器显示是slave,如图:
由于keepalived没有启动,因此虚拟IP显示的是down机状态。
yum install kernel-devel openssl-devel popt-devel ipvsadm libnl libnl-devel
我是安装在/app/redis1z3c/目录下
解压:tar -zxvf keepalived-2.0.10.tar.gz
> cd keepalived-2.0.10
> ./configure --prefix=/usr/local/keepalived
> make && make install
在/usr/local/keepalived相应的生成4个文件夹,如图:
注意:keepalived启动,读取的配置文件必定是/etc/keepalived/keepalived.conf文件
> cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
> cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived
在/etc目录下,建立keepalived文件夹
> mkdir keepalived
> cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived ##这是keepalived配置文件
> cp /app/redis1z3c/keepalived-2.0.10/keepalived/etc/init.d/keepalived /etc/init.d ##这是启动脚本
默认是放在/var/log/message下面,可是这个文件有不少别的日志信息,因此咱们单独配置keepalived日志文件
修改/etc/sysconfig/keepalived文件:
> vi /etc/sysconfig/keepalived
把KEEPALIVED_OPTIONS="-D" 修改为KEEPALIVED_OPTIONS="-D -d -S 0",保存
修改 /etc/rsyslog.conf
在最后一行添加:
local0.* /etc/keepalived/keepalived.log
systemctl restart rsyslog ##重启rsyslog
脚本文件我放在/etc/keepalived/scripts文件下,在/etc/keepalived文件下在建立log文件
如图:
这是20.200.45.72的配置:
! Configuration File for keepalived
global_defs {
router_id ocs_keepalived
}
vrrp_script chk_redis {
script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379"
interval 2
}
vrrp_instance VI_1 {
state MASTER ###主节点,从机器要把MASTER 换成BACKUP
interface eth0 ###网卡
virtual_router_id 25 ###设置VRID,决定多播的MAC地址
mcast_src_ip 20.200.45.72 ###多播地址,73的机器上配置20.200.45.73的IP,74的机器上配置20.200.45.74的IP地址
priority 100 ###优先级,73的机器上配置98,74的机器上配置95
advert_int 1 ###检查间隔
authentication { ###设置的认证
auth_type PASS
auth_pass 1111
}
track_script {
chk_redis
}
virtual_ipaddress { ###虚拟IP地址
20.200.45.95
}
notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 20.200.45.95 6479"
notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 20.200.45.95 6479"
notify_fault /etc/keepalived/scripts/redis_fault.sh
notify_stop "/etc/keepalived/scripts/redis_stop.sh 127.0.0.1 20.200.45.95 6479"
}
#!/bin/bash
ALIVE=`/app/redis1z3c/redis/bin/redis-cli -h $1 -p $2 PING`
LOGFILE="/etc/keepalived/log/keepalived-redis-check.log"
echo "[CHECK]" >> $LOGFILE
date >> $LOGFILE
if [ $ALIVE == "PONG" ]; then :
echo "Success: redis-cli -h $1 -p $2 PING $ALIVE" >> $LOGFILE 2>&1
exit 0
else
echo "Failed:redis-cli -h $1 -p $2 PING $ALIVE " >> $LOGFILE 2>&1
exit 1
fi
#!/bin/bash
REDISCLI="/app/redis1z3c/redis/bin/redis-cli -h $1 -p $3"
LOGFILE="/etc/keepalived/log/keepalived-redis-state.log"
echo "[master]" >> $LOGFILE
echo "$2 $3" >>$LOGFILE
echo "关闭备份,转换成主机模式" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run SLAVEOF NO ONE cmd ... " >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
echo "close slaver ,become master " >> $LOGFILE
sleep 5
echo "发送消息给监控" >> $LOGFILE
#!/bin/bash
LOGFILE=/etc/keepalived/log/keepalived-redis-state.log
echo "[stop]" >> $LOGFILE
date >> $LOGFILE
echo "$2 $3" >> $LOGFILE
echo "keepalived 出现故障,redis变为备机">> $LOGFILE
REDISCLI="/app/redis1z3c/redis/bin/redis-cli -h $1 -p $3"
echo "Being slave...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE 2>&1
$REDISCLI SLAVEOF $2 $3 >> $LOGFILE
#!/bin/bash
REDISCLI="/app/redis1z3c/redis/bin/redis-cli -h $1 -p $3"
LOGFILE="/etc/keepalived/log/keepalived-redis-state.log"
echo "[BACKUP]" >> $LOGFILE
echo "$1 $3" >> $LOGFILE
echo "关闭主机模式,转为备机模式" >> $LOGFILE
date >> $LOGFILE
echo "Being slave...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE 2>&1
$REDISCLI SLAVEOF $2 $3 >> $LOGFILE
echo "发送消息给监控" >> $LOGFILE
#/bin/bash
LOGFILE="/etc/keepalived/log/keepalived-redis-state.log"
echo "[fault]" >> $LOGFILE
date >> $LOGFILE
echo "redis 出现故障,没法ping通,请检查redis服务" >> $LOGFILE
记住:虚拟IP在哪台机器上,哪台机器就会是主机,虚拟ip是按照优先级去区分主从。
只须要启动72,73,74机器,启动命令以下:
进入/etc/init.d文件夹下
> ./keepalived start
> ps -ef|grep keepalived
> ip a 看虚拟IP是否出来,72会显示虚拟IP
73和74的机器上, 是没有虚拟IP 的,如图:
72机器:
>./redis-cli -h 20.200.45.72 -p 6479
>info ##会看到72变成了主,73,74,75都是从
在任意看其中一台从的机器,好比74
> ./redis-cli -h 20.200.45.74 -p 6479
> info ##会看到74是虚拟IP的从
再看75机器
> ./redis-cli -h 20.200.45.75 -p 6479
> info ##会发现虚拟IP变成up状态
咱们也能够直接链接虚拟ip
> ./redis-cli -h 20.200.45.95 -p 6479
> info ##会发现虚拟IP是主机,跟72显示状态同样
这个时候我把72的机器停了,会发现73变成了主,74,75仍是从
若是再把72启动起来,会发现72又变回了主
下面我把redis配置文件和keepalived配置文件放上去
1.系统防火墙必须关掉
2.VIP使用须要在同一个网段
3.实现主备模式,须要先所有启动redis,以后按照优先级启动keepalived
4.redis备库掉了以后,从新加入机器须要先杀掉keepalived,以后重启启动redis和keepalived,
若是不这样作,有可能会出现双主。不过我这边测试安装没有出现双主的状况,因此这个按照当时状况再看。
5.结合项目,云平台可能会存在限制,主要是安全组件打开,keepalived没法正常使用,形成VIP出现两台机器上。