CentOS 7 Keepalive 脚本不执行解决
问题
起因是在测试部署 Altls + Keepalive 高可用读写分离,测试停止Atlas服务的时候,发现Keepalive不会自动主从切换,就是Keepalive还是正常运行,vip并没有被slave接管。
也就是文章: centos 7 Atlas keepalived 实现高可用 MySQL 5.7 MHA环境读写分离
后来通过查询,发现解决,这里总结一下(文章中的问题已经被解决
)。
一共发现两种问题
- 括号问题
- 脚本名称有问题
问题一 括号问题
第一个问题就是keepalive中配置的脚本不自动执行
首先需要检查脚本是否有问题,也就是需要手动执行脚本是否正常
首先需要检查脚本是否有问题,也就是需要手动执行脚本是否正常
以上述文章中的案例
! Configuration File for keepalived
global_defs {
router_id mysql_proxy_196
}
vrrp_script chk_atlas_proxy # 这里的大括号'{' 不能放在这里行,要换行顶头,前面不能有空格
{
script "/etc/keepalived/che_atlas.sh"
interval 2
weight -2
} # 这里的大括号前面也不能有空格
vrrp_instance VI_1 {
state BACKUP
interface bond0
virtual_router_id 151
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.20.198/24 dev bond0 label bond0:1
}
track_script {
chk_atlas_proxy
}
}
做到上述,基本上就可以了
问题二 脚本名称问题
以 Nginx + keepalive 高可用为案例
脚本名称为: check_nginx.sh
脚本内容
if [ `ps aux | grep nginx | grep -v grep | wc -l` -ne 3 ];then
systemctl stop keepalived
fi
如果在Keepalive配置文件中配置是下面的配置,会发现keepalive启动不了,查看message日志,启动后,就会立马被停止。
这里的问题经常性的被忽略,根据脚本的判断,nginx主进程加上ngxin的线程不等于3的时候,就会停止keepalive
手动执行ps
命令的时候,没问题,也是3个
有一个问题大家想过没有,当keepalive
启动后,会执行check_nginx.sh
脚本,而ps
命令中的grep
命令筛选条件是nginx
,而脚本名称中包含nginx
,当keepalive执行check_nginx.sh
脚本的时候,也会产生一个进程,其中就包含nginx
的字符,同样会被脚本中的grep
命令当做条件筛选出来,那么if
判断就会生效,执行if
内部的命令
这么说应该明白了吧。。。。不明白博客下面有我扣扣。。。。
所以要解决这个问题,要么更换if
条件,要么更换脚本名称,建议更换脚本名称为check_ngx.sh
,这样问题就迎刃而解了。
CentOS 7 Keepalive 脚本不执行解决的更多相关文章
- keepalived vrrp_script脚本不执行解决办法
首先打开日志观察: tail -f /var/log/messages 然后新开一个客户端重启keepalived , systemctl restart keepalived.service 看日志 ...
- 如何解决 shell 脚本重复执行的问题
在开发过程中,经常会使用shell脚本去完成定时备份的任务,普遍的做法是通过系统的定时任务定时执行备份脚本 设想这样一种场景,本次备份时间到了,自动执行备份脚本,如果备份比较耗时的话,会一直持续到下一 ...
- shell脚本中执行source命令不生效的解决办法
一个shell脚本文件中有一个source命令,使用bash a.sh命令执行后source命令进行验证没有生效. 这是因为在shell脚本中执行source会看到效果,但是shell脚本执行完后再次 ...
- Shell脚本中执行mysql的几种方式(转)
Shell脚本中执行mysql的几种方式(转) 对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用 ...
- shell脚本循环执行mysql语句
参考资料:Shell脚本中执行mysql语句 需求:数据库里有张数据表存储的是用户对电影的评价(user_id movie_id rating time),但是我现在要每部电影的总评分. 解决方法: ...
- [转]CentOS开机启动脚本
转载自http://www.2cto.com/os/201306/220559.html 我的一个Centos开机自启动脚本的制作 一.切换到/etc/init.d/ 二.制作sh脚本 v ...
- Centos开机自启动脚本的制作
原文地址:http://www.2cto.com/os/201306/220559.html 我的一个Centos开机自启动脚本的制作 一.切换到/etc/init.d/ 二.制作sh脚本 v ...
- 脚本可执行,但无HTML测试报告文件生成,其造成的原因是在PyCharm的执行模式错误
定义测试报告两种写法: 1)测试报告直接在本地绝对路径下生成 # 导入HTMLTestRunner模块 import HTMLTestRunner # 通过open()方法以二进制写模式('wb')打 ...
- Shell脚本中执行sql语句操作mysql的5种方法【转】
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
随机推荐
- CSPS模拟 85
WWB大佬的bitset映射真是太强了! %%% T1 观察样例,猜规律. T2 对题目的翻译工作用了很长时间 翻译错了好几次.. 观察到奇环没法染色,选的边必须把奇环弄断 如果在偶环上,偶环就变得没 ...
- 【IOS开发—视图控制器】
一.UIViewController 视图控制器是UIViewController类或者其子类对象,每个视图控制器都负责管理一个视图层次结构.在UIViewController中有一个重要的UIVie ...
- 奇怪的道路——状压DP
题目描述 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外. 考古学家已经知道,这个文明在全盛时期有n座城市,编号为1..n.m条道路连接在这些城市之间,每条道路将两个 ...
- NOIP 模拟17
最近状态有些不对劲,总是出现各种各样的小错误...... 这次可以说是很水的一套题(T3神仙题除外),T1就是一个优化的暴力,考场上打了一个n的四次方的程序,在距考试结束还有5分钟的时候猜想出来正解, ...
- java笔试面试第一天
好久未曾启用我的博客,最近来上海找工作,想将笔试面试的过程做个记录,毕竟有总结才有提高嘛.今天算是笔试面试正式开始第一天吧,以下就是我的笔试总结(没有原题了,只有知识点): 笔试题1:java sta ...
- nginx 根据不同url转发请求对应tomcat容器
根据前端请求的url,nginx转发到指定的tomcat容器 原理如图: 现在我们有2个tomcat,一个tomcat的端口为9001,另一个tomcat的端口为9002 1.找到nginx的配置文件 ...
- UEFI+GPT电脑Win10下安装openSUSE Leap 42.2双系统
安装过程仅供参考,最后实现方式不完美. 1 准备工具,一个8G以上U盘,已装好win10的UEFI+GPT电脑(本机为SSD+HDD双硬盘) 2 所需软件: 2.1 ...
- 利用Xshell配置ssh免密码登录虚拟机,进行虚拟机与物理机的传输
先说一下 Xshell如何无密连接虚拟机: ssh登录提供两种认证方式:口令(密码)认证方式和密钥认证方式.其中口令(密码)认证方式是我们最常用的一种,这里介绍密钥认证方式登录到linux的方法.使用 ...
- stdClass Object 数据的处理
stdClass Object 数据的处理 在调用接口的时候往往返回的是 stdClass Object 类型的数据,我们在取数据值的时候就阔以直接使用对象->属性值的方式操作值 $ret = ...
- 实现 Redis 协议解析器
本文是 <用 Golang 实现一个 Redis>系列文章第二篇,本文将分别介绍Redis 通信协议 以及 协议解析器 的实现,若您对协议有所了解可以直接阅读协议解析器部分. Redis ...