热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

keepalived双BACKUP加nopreempt失效、手动监控服务脚步。

keepalived双BACKUP加nopreempt不起作用,两个机器同时拥有vip,排查几天发现是防火墙问题,啃爹。打开vietcsysconfigiptables插入一条

keepalived双BACKUP加nopreempt不起作用,两个机器同时拥有vip,

排查几天发现是防火墙问题,啃爹。

打开  vi /etc/sysconfig/iptables

插入一条:-A RH-Firewall-1-INPUT -i eth0 -p 112 -j ACCEPT

保存后,

然后重启防火墙,就恢复正常。

要么把防火墙关掉。

-----------------------------------

我们这里仅仅是监控了网络故障和keepalived本身进程,在网络或者keepalived进程出现问题的时候会切换,但是我的节点A里面还有很多服务呢,例如nginx,PHP,mysql进程出问题或高负载的时候相应过慢怎么办,怎么切换的呢,这时就要用到脚本了,下面我们来看看keepalived是如何控制脚本来实现对服务器的监控和切换的

写个脚本来实时监控三个服务,若有一个出现问题遍切换mkdir /root/shell/
cd /root/shell
vi keepcheck.sh

#!/bin/bash
while :
do
mysqlcheck=`/usr/local/lnmp/mysql/bin/mysqladmin -uroot ping 2>&1`
mysqlcode=`echo $?`
phpcheck=`ps -C php-fpm --no-header | wc -l`
nginxcheck=`ps -C nginx --no-header | wc -l`
keepalivedcheck=`ps -C keepalived --no-header | wc -l`
if [ $nginxcheck -eq 0 ]|| [ $phpcheck -eq 0 ]||[ $mysqlcode -ne 0 ];then
  if [ $keepalivedcheck -ne 0 ];then
    killall -TERM keepalived
  else
    echo "keepalived is stoped"
  fi
else
  if [ $keepalivedcheck -eq 0 ];then
    /etc/init.d/keepalived start
  else
    echo "keepalived is running"
  fi
fi
sleep 5
done

注意,用/etc/init.d/keepalived start如果起不来,可以用/usr/local/keepalived/sbin/keepalived二进制文件直接执行启动即可
启动脚本:

  1. chmod +x /root/shell/keepcheck.sh
  2. nohup sh /root/shell/keepcheck.sh &

节点B也用这个脚本

节点A和节点B 都写入/etc/rc.local开机自动启动

  1. echo "nohup sh /root/shell/keepcheck.sh &" >> /etc/rc.loal
节点A和B的时间同步:

更改时间,并配置时间自动同步
crontab -e
加入下面一行:
*/30 * * * * ntpdate 210.72.145.44

配置时间:
date --set "06/10/2011 13:56"

即把时间调整为2011年06月10日,13点56分(以当你前时间为准)
保存时间,即保存到coms里
clock -w

--------------------------------------

一、keepalived环境搭建

1.硬、软件需求

keepalived-1.2.12.tar.gz

两台Linux服务器(kernel版本在2.4.18以上)

172.16.0.252、172.16.0.253

关闭防火墙:

service iptables stop

chkconfig --level 235 iptables off

关闭selinux:

vi /etc/selinux/config

SELINUX=disabled

2.安装步骤

2.1解压安装软件(两台服务器)

tar -zxvf keepalived-1.2.12.tar.gz

cd keepalived-1.2.12

./configure --prefix=/usr/local/keepalived --disable-lvs(没有ipvs负载均衡时,可以disable掉) --with-kernel-dir=/usr/src/kernels/2.6.32-358.el6.x86_64/(kernel版本根据实际情况)

make && make install

 

2.2 复制相关文件(两台服务器)

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

mkdir /etc/keepalived

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

 

2.3 编辑配置文件(两台服务器)

主服务器:

vi /etc/keepalived/keepalived.conf

global_defs {

   notification_email {

     root@localhost.localdomain

   }

   notification_email_from notification_email_from root@localhost.localdomain

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

   vrrp_sync_group VGM {

      group {

      VI_1

      }

   }

   vrrp_script chk_tomcat {

      script "/root/tomcat.pid"

      interval 1

      #weight -20

   }

}

 

vrrp_instance VI_1 {

    state BACKUP     #只在Master上修改

    interface eth0         #心跳,网络监控端口

    virtual_router_id 51

    priority 100

    advert_int 1

    nopreempt          #只在Master上添加

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    track_interface {

        eth0     #需要监控的网口

        eth1

    }

    virtual_ipaddress {

        172.16.0.254/23 dev eth1  #vip绑定在业务网口上,提供用户访问的ip地址

    }

    track_script {

       chk_tomcat

    }

}

 

备服务器:

! Configuration File for keepalived

 

global_defs {

   notification_email {

     root@localhost.localdomain

   }

   notification_email_from root@localhost.localdomain

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

   vrrp_sync_group VGM {

      group {

      VI_1

      }

   }

   vrrp_script chk_tomcat {

      script "/root/tomcat.pid"

      interval 1

      #weight -20

   }

}

 

vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    virtual_router_id 51

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    track_interface {

        eth0

        eth1  

    }

    virtual_ipaddress {

        172.16.0.254/23 dev eth1

    }

    track_script {

       chk_tomcat

    }

}

 

新增tomcat.pid文件(两台服务器一样)

vim /root/tomcat.pid

#!/bin/bash

JAVA_PRO=`ps -C java --no-headers|wc -l`

if [ $JAVA_PRO -eq 0 ];then

         /etc/init.d/keepalived stop

fi

 

chmod a+x tomcat.pid

3.启动服务(两台服务器):

先启动tomcat,再启动keepalived(service keepalived start)

 

4.检查vip

#ip addr

#tail -f /var/log/messages

 

http://www.tuicool.com/articles/7NjEjm

http://www.linuxidc.com/Linux/2015-03/114981.htm

http://www.ipython.me/centos/keepalived-config-using.html

排查:

1.是否需要添加默认网关或路由
3.是否开启了iptables和selinux

4.内核参数
net.ipv4.ip_forward = 1
开启IP转发功能

net.ipv4.ip_nonlocal_bind = 1
开启允许绑定非本机的IP

如果使用LVS的DR或者TUN模式结合Keepalived需要在后端真实服务器上特别设置两个arp相关的参数。这里也设置好。
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

5.如果Keepalived所在网络不允许使用组播,可以使用VRRP单播

6.怀疑是keepalived启动脚本/etc/init.d/keepalived的问题
关键是这一行
daemon $exec $KEEPALIVED_OPTIONS

由于没有复制/etc/sysconfig/keepalived,所以将直接执行damon /data/app_platform/keepalived/sbin/keepalived
由于keepalived默认使用的是/etc/keepalived/keepalived.conf作为配置文件,而这里指定了不同的配置文件,所以要修改成为
daemon $exec -D -f $config

如果前面没有定义config变量
就把$config换成配置文件的绝对位置


7.需要注意主备的weight和priority的值,这两个值如果设置不合理可能会影响VIP的切换。
8.如果使用的配置文件不是默认的配置文件,在启动Keepalived的时候需要使用 -f 参数指定配置文件。

9.两台服务器的时间是否一致。
10.重启网络

 


推荐阅读
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文介绍了将mysql从5.6.15升级到5.7.15的详细步骤,包括关闭访问、备份旧库、备份权限、配置文件备份、关闭旧数据库、安装二进制、替换配置文件以及启动新数据库等操作。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • 如何利用 Myflash 解析 binlog ?
    本文主要介绍了对Myflash的测试,从准备测试环境到利用Myflash解析binl ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
author-avatar
不想与你见面_637
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有