keepalived+redis的高可用部署步骤
wget http://www.keepalived.org/software/keepalived-1.2.15.tar.gz
2.解压安装:
yum install ipvsadm
tar -zxvf keepalived-1.2.15.tar.gz
cd keepalived-1.2.15
./configure --prefix=/usr/local/keepalived-1.2.15 --disable-fwmark --sysconfdir=/etc
make && make install
cd /usr/local;
ln -s keepalived-1.2.15 keepalived
3.配置keepalive:
cp /usr/local/keepalived/sbin/keepalived /sbin/
echo 'export PATH=/usr/local/keepalived/sbin:$PATH;' >/etc/profile.d/keepalived.sh
具体keepalived配置文件如下:
-----------------------------------------
! Configuration File for keepalived
global_defs {
lvs_id LVS_redis
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_redis {
script "/etc/keepalived/scripts/redis_check.sh"
weight -20
interval 2
}
vrrp_instance VI_1 {
state backup
interface eth0
virtual_router_id 51
#设置原主机恢复正常时,服务不漂移;
nopreempt
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_redis
}
virtual_ipaddress {
192.168.16.77/24 dev eth0 label eth0:1
}
notify_master "/etc/keepalived/scripts/redis_script.sh master"
notify_backup "/etc/keepalived/scripts/redis_script.sh backup"
notify_fault "/etc/keepalived/scripts/redis_script.sh fault"
}
----------------------------------------
SLAVER上与MASTER上大致相同,改下这两个就可以了 state BACKUP
priority 80
4.keepalive自定义监控功能说明:
notify_master keepalived切换到master时执行的脚本
notify_backup keepalived切换到backup时执行的脚本
notify_fault keepalived出现故障时执行的脚本
vrrp_script代码块是用来定义监控脚本,脚本执行时间间隔以及脚本的执行结果导致优先级变更幅度的。
vrrp_script chk_redis {
script "/etc/keepalived/scripts/redis_check.sh" #指定执行脚本的路径
interval 1 #指定脚本的执行时间间隔
weight 10 #脚本结果导致的优先级变更:10表示优先级+10;-10则表示优先级-10
}
#定义好vrrp_script代码块之后,就可以在instance中使用了
track_script {
chk_redis
}
注意:VRRP脚本(vrrp_script)和VRRP实例(vrrp_instance)属于同一个级别
5.建立相关脚本:
redis服务状态检测脚本redis_check.sh
#!/bin/bash
#auth desheng
export REDIS_CLI="/usr/local/bin/redis-cli"
export REDIS_SER="/usr/local/bin/redis-server"
export LOGFILE="/var/log/keepalived-redis-state.log"
export MASTER_HOST="192.168.16.131"
export MASTER_PORT="6379"
export ETH_FLAG='eth0:3'
REDIS_ROLE=`$REDIS_CLI info|grep role|sed 's/\r//g'`;
REDIS_STATUS=`$REDIS_CLI PING 2>&1`;
VIP_CNT=`ifconfig |grep ${ETH_FLAG}|wc -l`;
PRINT_LOG() {
LAST_MSG=`tail -1 $LOGFILE|awk -F']' '{print $2}'`;
if [ "${LAST_MSG}" != $1 ] ;then
echo "`date '+%F %T'`[check]$1" >>$LOGFILE;
fi;
}
if [ "$REDIS_STATUS" == "PONG" ] ;then
PRINT_LOG "sucess...$REDIS_STATUS";
if [ "$VIP_CNT" -eq 0 -a "${REDIS_ROLE}" != "role:slave" ] ;then
$REDIS_CLI SLAVEOF $MASTER_HOST $MASTER_PORT;
echo "`date '+%F %T'`[check]Starting Slaveof $MASTER_HOST $MASTER_PORT...">>$LOGFILE;
fi;
exit 0;
elif [ "$REDIS_STATUS" != "PONG" -a ${VIP_CNT} -eq 1 ] ;then
sleep 1;
REDIS_STATUS=`$REDIS_CLI PING 2>&1`;
if [ "$REDIS_STATUS" == "PONG" ] ;then
PRINT_LOG "sucess...$REDIS_STATUS";
exit 0;
else
PRINT_LOG "faild...$REDIS_STATUS";
ps aux|grep redis-server|grep -v grep|awk '{print "kill -9 " $2}'| sh
exit 1;
fi;
elif [ "$REDIS_STATUS" != "PONG" -a ${VIP_CNT} -eq 0 ] ;then
sleep 1;
REDIS_STATUS=`$REDIS_CLI PING 2>&1`;
if [ "$REDIS_STATUS" == "PONG" ] ;then
PRINT_LOG "sucess...$REDIS_STATUS";
exit 0;
elif [ "$REDIS_STATUS" == "LOADING Redis is loading the dataset in memory" ] ;then
while [ "$REDIS_STATUS" == "LOADING Redis is loading the dataset in memory" ] ;do
sleep 2;
REDIS_STATUS=`$REDIS_CLI PING 2>&1`;
done;
REDIS_STATUS=`$REDIS_CLI PING 2>&1`;
if [ "$REDIS_STATUS" == "PONG" ] ;then
PRINT_LOG "sucess...$REDIS_STATUS";
exit 0;
else
PRINT_LOG "faild...$REDIS_STATUS";
ps aux|grep redis-server|grep -v grep|awk '{print "kill -9 " $2}'| sh
$REDIS_SER /etc/redis/6379.conf
exit 1;
fi;
else
PRINT_LOG "faild...$REDIS_STATUS";
ps aux|grep redis-server|grep -v grep|awk '{print "kill -9 " $2}'| sh
$REDIS_SER /etc/redis/6379.conf
exit 1;
fi;
fi;
redis服务状态处理脚本redis_script.sh
#!/bin/bash
#auth desheng
export REDIS_CLI="/usr/local/bin/redis-cli"
export REDIS_SER="/usr/local/bin/redis-server"
export LOGFILE="/var/log/keepalived-redis-state.log"
export MASTER_HOST="192.168.16.131"
export MASTER_PORT="6379"
check_redis(){
REDIS_STATUS=`$REDIS_CLI PING 2>&1`;
if [ "$REDIS_STATUS" != "PONG" ] ;then
sleep 1;
REDIS_STATUS=`$REDIS_CLI PING 2>&1`;
if [ "$REDIS_STATUS" != "PONG" ] ;then
ps aux|grep redis-server|grep -v grep|awk '{print "kill -9 " $2}'| sh
$REDIS_SER /etc/redis/6379.conf
echo "`date '+%F %T'`[$1]restart redis...">>$LOGFILE;
fi;
elif [ "$REDIS_STATUS" == "PONG" ] ;then
echo "`date '+%F %T'`[$1]redis is running...">>$LOGFILE;
fi;
}
echo "[$1]...">>$LOGFILE;
case $1 in
master)
check_redis master;
$REDIS_CLI SLAVEOF NO ONE >> $LOGFILE 2>&1;
echo "`date '+%F %T'`[master]Slaveof no one...">>$LOGFILE;
;;
backup)
check_redis backup;
REDIS_ROLE="role:slave";
REDIS_MASTER_HOST="master_host:$MASTER_HOST";
NOW_REDIS_ROLE=`${REDIS_CLI} info|grep role|sed 's/\\r//g'`;
NOW_REDIS_MASTER=`${REDIS_CLI} info|grep master_host|sed 's/\\r//g'`;
if [ "$REDIS_ROLE" == "$NOW_REDIS_ROLE" -a "$REDIS_MASTER_HOST" == "$NOW_REDIS_MASTER" ] ;then
echo "`date '+%F %T'`[backup]Slaveof $MASTER_HOST $MASTER_PORT...">>$LOGFILE;
else
$REDIS_CLI SLAVEOF $MASTER_HOST $MASTER_PORT >> $LOGFILE 2>&1;
echo "`date '+%F %T'`[backup]Starting Slaveof $MASTER_HOST $MASTER_PORT...">>$LOGFILE;
echo "`date '+%F %T'`[backup]Redis status is `$REDIS_CLI info|grep role`" >> $LOGFILE;
fi;
;;
fault)
check_redis fault;
;;
*)
echo "####error">>$LOGFILE;
;;
esac
6.验证测试:
service keepalived start
ifconfig
pkill -9 redis-server
ifconfig
转载于:https://blog.51cto.com/webseven/1649879
keepalived+redis的高可用部署步骤相关推荐
- Redis M/S + Keepalived 主从备份高可用
目录 文章目录 目录 高可用 Redis 的高可用 Redis 主从复制配置 Redis 主从切换(手动方式) SLAVEOF 指令 Redis M/S + Keepalived 故障的 3 种情况 ...
- 基于keepalived对redis做高可用配置---转载
关于keepalived的详细介绍,请移步本人相关博客:http://wangfeng7399.blog.51cto.com/3518031/1405785 功能 ip地址 安装软件 主redis 1 ...
- 转载--CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
源地址:http://www.cnblogs.com/mchina/archive/2012/08/27/2644391.html 一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台: ...
- Redis Cluster高可用(HA)集群环境搭建详细步骤
1.为什么要有集群 由于Redis主从复制架构每个数据库都要保存整个集群中的所有数据,容易形成木桶效应,所以Redis3.0之后的版本添加特性就是集群(Cluster) 2.Redis集群架构说明 架 ...
- Redis Sentinel安装与部署,实现redis的高可用
Redis Sentinel安装与部署,实现redis的高可用 原文:Redis Sentinel安装与部署,实现redis的高可用 前言 对于生产环境,高可用是避免不了要面对的问题,无论什么环境.服 ...
- Redis 集群搭建(三):Docker 部署 Redis + Sentinel 高可用集群
Redis 集群搭建(三):Docker 部署 Redis + Sentinel 高可用集群 前言 建议 官方译文 什么是 Sentinel? Sentinel 优点 Redis 配置文件 maste ...
- 【7W字长文】使用LVS+Keepalived实现Nginx高可用,一文搞懂Nginx
往期文章一览 分布式会话与单点登录SSO系统CAS,包含完整示例代码实现 [15W字长文]主从复制高可用Redis集群,完整包含Redis所有知识点 使用LVS+Keepalived实现Nginx高可 ...
- saltstack实现haproxy+keepalived负载均衡+高可用(二)
一键部署haproxy+keepalived实现负载均衡+高可用 实验环境: !!!! 特别注意: www.westos.org为test1的minion名字 test1: 172.25.1.1 ...
- Pod在多可用区worker节点上的高可用部署
一. 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布 ...
- Redis|Sentinel 高可用架构
一 前言 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端 ...
最新文章
- (各种均衡算法在MIMO中的应用对比试验)最小均方误差(MMSE)原理推导以及在MIMO系统中对性能的改善。
- 巧用二进制,让性能提升100倍,让存储空间减少100倍
- python使用fpdf创建pdf文件包含:页眉、页脚并嵌入logo图片、设置使用中文字体
- .net开发框架比较
- python下载安装教程mac-mac上如何安装python3
- echarts 图表配置tooltip 的formatter
- ui设计颜色的使用_UI设计中颜色使用的10条原则
- 程序员管理思维修炼,只需要反复阅读本篇
- SDK中利用COM打印helloworld时报错DONE pin is not high on target FPGA的一种可能的解决办法
- 详解:物理地址,虚拟地址,内存管理,逻辑地址之间的关系
- win7 共享计算机 网络密码怎么设置,win7局域网共享设置密码 win7局域网如何设置密码【详细步骤】...
- 【技能】前端技能列表
- 基于Scrapy的交互式漫画爬虫
- 瑞萨78K0单片的调试与使用(Minicube2)
- poi读取excel表
- 学习笔记 计算机组成原理_名词解释
- vu3响应式原理 代码分析
- 该内存不能为written或read的解决方案
- ubuntu1604安装sougou输入法
- 逼死程序员的翟欣欣方首度发声了,居然这样说,你信不?
热门文章
- facade(外观)模式
- 【Window】使用技巧
- Confluence 6 数据库表-杂项(Miscellaneous)
- 20155204《网络对抗》Exp 6 信息搜集与漏洞扫描
- Linux下的帮助命令
- CSS3知识点总结---transitionend
- lua定义一个简单的类
- mysql Packet for query is too large (1185 1024)异常
- WAMP(Windows+Apache+Mysql+PHP)环境搭建
- Effective C++(6) 如何拒绝编译器的自动生成函数