|
环境架构图:
环境部署
Redis-M10.20.0.100Redis-S10.20.0.200VIP10.20.0.150 1,redis安装软件(两台同时安装M S)
#mkdir /home/tools -p
#cd /home/tools
#wget http://download.redis.io/releases/redis-3.0.5.tar.gz
#yum -y install tcl
#tar zxvf redis-3.0.5.tar.gz
#cd redis-3.0.5
#make MALLOC=libc
#cd src && make all
#make PREFIX=/usr/local/redis install
#LANG=EN
#echo'export PATH=/usr/local/redis/bin/:$PATH' >> /etc/profile
#source /etc/profile
#mkdir /usr/local/redis/conf
#cd /home/tools/redis-3.0.5
#cp redis.conf /usr/local/redis/conf/
#sysctl vm.overcommit_memory=1 如果不执行的话 会报错
#echo never > /sys/kernel/mm/transparent_hugepage/enabled
#redis-server /usr/local/redis/conf/redis.conf & 后台启动
#lsof-i:6379 查看端口
#COMMAND PID USER FD TYPE DEVICE> #redis-ser5970 root 4u IPv6 36532 0t0 TCP *:6379 (LISTEN)
#redis-ser5970 root 5u IPv4 36534 0t0 TCP *:6379 (LISTEN)
#killall redis-server 杀掉redis进程 内存不够的话
#redis正确关闭方式
#redis-cli shutdown
设计思路:
当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby;
当 Master 挂掉,Slave 正常时,Slave接管服务,同时关闭主从复制功能;
当 Master 恢复正常,则从Slave同步数据,同步数据之后关闭主从复制功能,恢复Master身份,于此同时Slave等待Master同步数据完成之后,恢复Slave身份。
然后依次循环。
需要注意的是,这样做需要在Master与Slave上都开启本地化策略,否则在互相自动切换的过程中,未开启本地化的一方会将另一方的数据清空,造成数据完全丢失。
2,keepalived安装(两台同时安装)
# wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz
# keepalived-1.2.19.tar.gz
# cd /software
# tar zxvf keepalived-1.2.19.tar.gz
# cd keepalived-1.2.19
# ./configure
# make && make install
# /bin/cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/ ##生成启动命令
# /bin/cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ ##配置启动脚本的参数
# mkdir /etc/keepalived ##创建默认的keepalived配置文件路径
# /bin/cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ ####把keepalived.conf模板拷贝到/etc/keepalived下
# /bin/cp /usr/local/sbin/keepalived /usr/sbin/
# /etc/init.d/keepalived start 或者/etc/init.d/keepalived stop
查看进程是否起来
#ps -ef | grep keepalived
添加日志
vi /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -d -S 0"
##参数解释都在#注释里面
2. 修改主从节点日志配置文件/etc/rsyslog.conf
#vi /etc/rsyslog.conf
加入如下配置:
#keepalived -S 0
local0.* /var/log/keepalived.log
3.重启日志服务
# /etc/init.d/rsyslog restart
4.检查/var/log/keepalived.log文件是否存在
3,设置master上面的配置文件
vim /etc/keepalived/keepalived.conf
global_defs {
router_id redis100
}
vrrp_script chk_redis {
script "/etc/keepalived/scripts/redis_check.sh"
interval 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_redis
}
virtual_ipaddress {
10.20.0.150
}
notify_master /etc/keepalived/scripts/redis_master.sh
notify_backup /etc/keepalived/scripts/redis_backup.sh
notify_fault /etc/keepalived/scripts/redis_fault.sh
notify_stop /etc/keepalived/scripts/redis_stop.sh
}
4,设置Slave配置
vim /etc/keepalived/keepalived.conf
global_defs {
router_id redis200
}
vrrp_script chk_redis {
script "/etc/keepalived/scripts/redis_check.sh"
interval 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_redis
}
virtual_ipaddress {
10.20.0.150
}
notify_master /etc/keepalived/scripts/redis_master.sh
notify_backup /etc/keepalived/scripts/redis_backup.sh
notify_fault /etc/keepalived/scripts/redis_fault.sh
notify_stop /etc/keepalived/scripts/redis_stop.sh
}
5,在Master和Slave上创建监控Redis的脚本
# mkdir/etc/keepalived/scripts
# vim/etc/keepalived/scripts/redis_check.sh
cat redis_check.sh
#!/bin/bash
ALIVE=`/usr/local/redis/bin/redis-cli PING`
if [ "$ALIVE" == "PONG" ]; then
echo $ALIVE
exit 0
else
echo $ALIVE
exit 1
fi
6,在slave从服务器创建redis的脚本
#!/bin/bash
ALIVE=`/usr/local/redis/bin/redis-cli PING`
if [ "$ALIVE" == "PONG" ]; then
echo $ALIVE
exit 0
else
echo $ALIVE
exit 1
fi
编写以下负责运作的关键脚本:
notify_master/etc/keepalived/scripts/redis_master.sh
notify_backup /etc/keepalived/scripts/redis_backup.sh
notify_fault /etc/keepalived/scripts/redis_fault.sh
notify_stop /etc/keepalived/scripts/redis_stop.sh
因为Keepalived在转换状态时会依照状态来呼叫:
当进入Master状态时会呼叫notify_master
当进入Backup状态时会呼叫notify_backup
当发现异常情况时进入Fault状态呼叫notify_fault
当Keepalived程序终止时则呼叫notify_stop
7,首先,在Redis Master上创建notity_master与notify_backup两个文件脚本:
# vim/etc/keepalived/scripts/redis_master.sh
cat redis_master.sh
#!/bin/bash
REDISCLI="/usr/local/redis/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"
echo "[master]" >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 10.20.0.200 6379 >> $LOGFILE 2>&1
sleep 10
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
# vim /etc/keepalived/scripts/redis_backup.sh
cat redis_backup.sh
#!/bin/bash
REDISCLI="/usr/local/redis/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave...." >> $LOGFILE 2>&1
sleep 15
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 10.20.0.200 6379 >> $LOGFILE 2>&1
接着,在RedisSlave从服务器上创建notity_master与notify_backup脚本:
# vim/etc/keepalived/scripts/redis_master.sh
cat redis_master.sh
#!/bin/bash
REDISCLI="/usr/local/redis/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"
echo "[master]" >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 10.20.0.100 6379 >> $LOGFILE 2>&1
sleep 10
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
# vim /etc/keepalived/scripts/redis_backup.sh
cat redis_backup.sh
#!/bin/bash
REDISCLI="/usr/local/redis/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave...." >> $LOGFILE 2>&1
sleep 15
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 10.20.0.100 6379 >> $LOGFILE 2>&1
8,然后在master和slave服务器各自创建相同的脚本
# vim /etc/keepalived/scripts/redis_fault.sh
cat redis_fault.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE
# vim /etc/keepalived/scripts/redis_stop.sh
# cat redis_stop.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[stop]" >> $LOGFILE
date >> $LOGFILE
主从服务器:给脚本加上可执行的权限
# chmod +x/etc/keepalived/scripts/*.sh
# chmod +x/etc/keepalived/scripts/*.sh
9,脚本创建完成以后,我们开始按照如下流程进行测试:
1.启动Master上的Redis
2.启动Slave上的Redis
3.启动Master上的Keepalived
/etc/init.d/keepalivedstart
4.启动Slave上的Keepalived
/etc/init.d/keepalivedstart
|
|