• keepalived +mysql 实战


    keepalived高可用可以用在很多应用上,比如keepalived+反向代理著名的nginx。keepalived+数据库主从。keepalived+文件分布等等。。。

    安装keepalived  楼主使用keepalived1.2.19

    #基础环境

    yum -y install gcc gcc-c++ pcre-devel zlib-devel openssl-devel

     

    #内核开发包keepalived要用,一定要安装

    yum –y install kernel-devel kernel  (kernerl?)

    ln -s /usr/src/kernels/2.6.32-573.12.1.el6.x86_64/ /usr/src/linux

    tar –zxvf keep***

    cd keep***

    ./configure --with-kernel-dir=/usr/src/kernels/2.6.32-573.3.1.el6.x86_64/  (如果你发现你的kernels 下面没有。那就是内核开发包没有安装 kernel-devel)

    make && make install

     

    #将安装完成的keepalived拷贝进常用目录

    DIR=/usr/local/

    cp $DIR/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ && cp $DIR/etc/sysconfig/keepalived /etc/sysconfig/ && mkdir -p /etc/keepalived && cp $DIR/sbin/keepalived /usr/sbin/

     

    chkconfig keepalived on

    http://www.linuxidc.com/Linux/2014-08/105884.htm  keepalived选举问题   (从此不怕脑裂)

     

    IPTABLES问题

     

    如果开了iptables但是你放行了vrrp协议例如:iptables –A INPUT –p vrrp –j ACCEPT

    因为这个命令-A 是将语句添加到最后一行的iptables规则里。Iptables规则里有个bug就是最后一行有可能会默认拒绝。所以需要使用-I(大写的i)

    如:iptables –I INPUT –p vrrp –j ACCEPT

    写完使用service iptables save 保存配置。

     

    默认情况下keepalived的日志输出在/var/log/message中,当然这个是可以自定义的。

    /etc/keepalived/keepalived.conf 如下    (这个文件默认没有,需要自己创建。)

     

    这个是主的keepalived配置文件。

     

    ! Configuration File for keepalived
    
    #by:v
    
     global_defs {
    
     }
    
     vrrp_script chk_run {
    
        script "/root/my.sh"  #这里的脚本可以自己设置, 你可以把它定义成检查nginx的 那就成了 keepalived+nginx高可用。  你也可以把它定义成mysql 自然就成了 keepalived+mysql高可用了
    
        interval 2
    
        weight 2
    
     }
    
     # VIP1
    
     vrrp_instance VI_1 {
    
         state MASTER
    
         interface eth0
    
         lvs_sync_daemon_inteface eth0
    
         virtual_router_id 151
    
         priority 102
    
         advert_int 1  #检测频率 发送VRRP包     1秒
    
         authentication {
    
             auth_typePASS        同组也就是同serverid 之间通信的验证
    
             auth_pass  1111
    
         }
    
         virtual_ipaddress {
    
             192.168.0.43
                            #这里也可以写多个VIP
         }
    
         track_script {
    
         chk_run
    
        }
    
     }
    

     

     

    这个是备的keepalived配置文件

    ! Configuration File for keepalived
      #by:V
     global_defs {
    
    
     }
    
     vrrp_script chk_run {
    
        script "/root/my.sh"
    
        interval 2
    
        weight 2
    
     }
    
     # VIP1
    
     vrrp_instance VI_1 {
    
         state BACKUP
    
         interface eth0
    
         lvs_sync_daemon_inteface eth0
    
         virtual_router_id 151
    
         priority 100
    
         advert_int 1
    
    
         authentication {
    
             auth_typePASS
    
             auth_pass  1111
    
         }
    
         virtual_ipaddress {
    
             192.168.0.43
    
         }
    
         track_script {
    
         chk_run
    
        }
    
     }
    

    这里做的是mysql+keepalived ,如果要做nginx,可以把mysqld换成nginx。当然这样检查mysql显然有些不全面。下图是 my.sh 脚本的内容

    #!/bin/bash
    A=`ps -C mysqld --no-header |wc -l`
    if [ $A -eq 0 ];then
                    service mysqld start
                    sleep 3
                    if [ `ps -C mysqld --no-header |wc -l` -eq 0 ];then
                           killall keepalived
                    fi
    fi
    

     我们来看一下 杀掉进程之后,VIP是否会票已到另外一台机器,我们tail -fn100 /var/log/message 日志。  先把my.sh里的service mysqld start 这一行注释掉,不然看不到效果哦

    开始停止mysql

     

    这样VIP就到了从上的 193上去了。日志里会显示chk_run 也就是我们配置文件里面定义的脚本检查模块了,然后发送vrrp包给同组ID的VRRP成员,进行从新选举master。

    我们在来看看BACKUP上从 BACKUP变成MASTER的日志过程

    红色方框为我刚在MASTER上停止mysql 从而触发了MASTER上的健康检查,进而MASTER脚本 kill掉keepalived进程,导致VIP漂移到BACKUP上,上图为BACKUP的日志。

    如果此时我们需要恢复之前MASTER的VIP绑定,就需要start keepalived,但是keepalived起来又会去健康检查脚本,之后又会kill掉keepalived,所以有些人会说我的keepalived怎么起不来,这个时候就要去查看脚本了。

    排错思路:  (time:2015年12月14日13:38:18)

        1、验证keepalived配置文件是否OK的方法 我自己总结了一个。不管2个keepalived机器是否谁主谁备,如果你需要验证A机器(假设只backup)的keepalived配置文件是否有问题时,你可以开启A机器的iptables,当然策略自然是不放行VRRP协议。  此时 如果A机器能够绑定成功VIP 说明配置文件OK,当主挂掉的时候,BACKUP会去抢到VIP。(有的人经查会出现为什么VIP不去漂移的情况适合这种思路排错)

        2、当然也可以使用tcpdump 来查看,感觉效果不怎么样。

        3、更换keepalived的版本(有可能也会出现这个问题)

        4、如果你发现VIP绑定不了,也有可能是内核开发包没有安装

     

    小菜写总结,怕以后忘掉。      大神多多指点,多多交流学习。 如有疑问请留言。

  • 相关阅读:
    (转)Paint类的主要方法介绍
    (转)实时对讲机
    (转)Android:Layout_weight的深刻理解
    好的网址
    自定义控件模板,不用依赖属性---------------------WPF
    asyns和await实现传统的异步---------C#
    线程访问wpf的控件(与winform有差异)---------------WPF
    C#多线程之Task------------ C#
    换肤功能的实现-------------WPF
    访问嵌入的资源----图片实例-------C#
  • 原文地址:https://www.cnblogs.com/shiyiwen/p/5045027.html
Copyright © 2020-2023  润新知