问题

起因是在测试部署 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,这样问题就迎刃而解了。

最新文章

  1. Netty(一)引题
  2. WIN10 CMD 启动虚拟WIFI
  3. HTML兼容问题——HACK技术
  4. Mac OSX Java 编译时乱码问题
  5. HTML5 review
  6. 初次体验VS2015正式版,安装详细过程。
  7. win+r 快速启动应用程序
  8. C++ 类的静态成员详细讲解[转]
  9. Install mcrypt for php on Mac OSX 10.10 Yosemite for a Development Server
  10. 最简单例子图解JVM内存分配和回收
  11. iOS 对网络视频采集视频截图
  12. 开发设计模式(六)多例模式(Multition Pattern)
  13. 我所理解的设计模式(C++实现)——状态模式(State Pattern)
  14. html a标签打开邮件
  15. entity framework如何控制并发
  16. php扩展类开发实例
  17. 史上最全的synchronized解释
  18. python 中self理解
  19. linux centos ubentu安装IPython四种方法
  20. Quick Sort(三向切分的快速排序)(Java)

热门文章

  1. POI 生成 word 文档 简单版(包括文字、表格、图片、字体样式设置等)
  2. springboot---发送邮件
  3. TOMACT 各个版本集合
  4. SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列
  5. 暑期集训20190807 游戏(game)
  6. Python 中 -m 的典型用法、原理解析与发展演变
  7. [BZOJ2821][Luogu4135] 作诗
  8. python基础-函数作用域
  9. Android 4.2 获取应用缓存接口变化
  10. js基础总结02--字符串操作