• 使用KeepAlived搭建MySQL高可用环境


     



    使用KeepAlived搭建MySQL的高可用环境。
    首先搭建MySQL的主从复制
    在Master开启binlog,创建复制帐号,
    然后在Slave输入命令
     
    2016年7月25日
      配置安装技巧:
      1,使用yum install 安装keepAlived  
      2,安装完后,配置/etc/keepalived/keepalived.conf配置文件,一开始配置名字取错了,老有问题
      3,配置keepalived.conf好后要/root/shutdown.sh配置shell脚本,配置关闭本机的keepalived让其切换虚拟IP,不关闭keepalived
           不会切换IP
            service  keepalived stop
      
    1. change master to
    2. master_host='192.168.1.70',
    3. master_port=3306,
    4. master_user='xx',
    5. master_password='xx';
    然后使用start slave开启复制。

    然后编译安装KeepAlived
    进入keepalived-1.2.12目录
    然后使用
    ./configure
    make && make install

    然后在Master服务器编辑KeepAlived的配置文件
    vim /etc/keepalived/keepalived.conf
    global_defs {
         router_id HA_MySQL
    }
    
    vrrp_script check_mysql {                   ######定义监控mysql的脚本  
         script "/root/check_mysql.sh"  
         interval 2                             ######监控时间间隔  
         weight 2                               ######负载参数  
    
    }  
    vrrp_instance VI_1 {
         state BACKUP
         interface eth0
         virtual_router_id 51
         priority 100
         advert_int 1
         nopreempt
         authentication {
             auth_type PASS
             auth_pass 1111
         }
         virtual_ipaddress {
                192.168.113.215
         }
    }
    
    track_script {                              ######执行监控mysql进程的脚本  
         check_mysql  
    }  
    
    virtual_server 192.168.113.215 3306 {
         delay_loop 2
         lb_algo wrr
         lb_kind DR
         persistence_timeout 60
         protocol TCP
         real_server 192.168.113.145 3306 {
             weight 3
             notify_down /root/shutdown.sh
             TCP_CHECK {
                 connect_timeout 10
                 nb_get_retry 3
                 delay_before_retry 3
                 connect_port 3306
             } 
         }
    }

    然后编辑Slave的配置文件
    vim /etc/keepalived/keepalived.conf
    global_defs {
         router_id HA_MySQL
    }
    
    vrrp_script check_mysql {                   ######定义监控mysql的脚本  
         script "/root/check_mysql.sh"  
         interval 2                             ######监控时间间隔  
         weight 2                               ######负载参数  
    
    }  
    vrrp_instance VI_1 {
         state BACKUP
         interface eth0
         virtual_router_id 51
         priority 100
         advert_int 1
         nopreempt
         authentication {
             auth_type PASS
             auth_pass 1111
         }
         virtual_ipaddress {
                192.168.113.215
         }
    }
    
    track_script {                              ######执行监控mysql进程的脚本  
         check_mysql  
    }  
    
    virtual_server 192.168.113.215 3306 {
         delay_loop 2
         lb_algo wrr
         lb_kind DR
         persistence_timeout 60
         protocol TCP
         real_server 192.168.113.142 3306 {
             weight 3
             notify_down /root/shutdown.sh
             TCP_CHECK {
                 connect_timeout 10
                 nb_get_retry 3
                 delay_before_retry 3
                 connect_port 3306
             } 
         }
    }
    

     check_mysql.sh

    MYSQL=/usr/local/mysql/bin/mysql  
    MYSQL_HOST=localhost  
    MYSQL_USER=root  
    MYSQL_PASSWORD=cc.123  
      
      
    $MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD -e "show status;" >/dev/null 2>&1  
    #$mysqlclient --host=$host --port=$port --user=$user --password=$password  -e "show databases;" > /dev/null 2>&1  
    if [ $? == 0 ]  
    then  
        echo " $host mysql login successfully "  
        exit 0  
    else  
        #echo " $host mysql login faild"  
        /etc/init.d/keepalived stop  
        exit 2  
    fi 
    

     shutdown.sh

    #!/bin/bash
    #pkill keepalived
    service keepalived stop
    

      

    其中
    priority                      表示优先级
    virtual_ipaddress      虚拟的IP地址(VIP)
    delay_loop                每个2秒检查一次real_server状态
    notify_down              检测到服务down后执行的脚本 
    connect_timeout      连接超时时间
    nb_get_retry             重连次数
    delay_before_retry   重连间隔时间
    connect_port            健康检查端口

    shutdown.sh 可以考虑加入邮件告警的功能。

    1. #!/bin/bash
    2. pkill keepalived

    在两个服务器上启动MySQL和KeepAlived服务
    service mysql start
    service keepalived start

    Master的server_id为1
    Slave的server_id为2

    然后 连接VIP的MySQL,可以看到已经连接到了Master服务器(server_id为1)



    如果kill掉Master的MySQL,KeepAlived会自动转移到Slave

    在Master服务器上执行
    killall mysqld

    然后再次查看server_id,
    短暂的失去连接之后,再次连接上VIP,server_id已经变为2,说明VIP已经指向了Slave




    nopreempt参数表示Master恢复正常之后,是否将VIP继续指向Master
    这样的话,会再次引发切换。

    两台服务器的KeepAlived会有心跳检测,
    如果Master的MySQL服务挂了(3306端口挂了),那么他会选择自杀.
    Slave的KeepAlived通过心跳检测发现这个情况,就会将VIP的请求接管。


    KeepAlived还有很多参数没有明白是什么意思
    生产环境的切换脚本,在Slave提升为Master之后,应该等待所有的中继日志应用完毕,否则可能丢失数据
     
     配置备注:
         virtual_router_id 51   这个51在局域网里不要重复
         配置过程的文本,不能少{},关键字也不能少,不然配置不成功,错误信息也没有错误提示
        这里的eth0 是网卡名称,如果提示找不到,需要通过 IP addr 查看,改成对应的名称
  • 相关阅读:
    tiff遥感图像空间坐标转换(工作太忙,仅仅作为记录)
    get_beijing_roadnetwork(工作太忙,仅仅作为记录)
    xml_result_2_taos_db(工作太忙,仅仅作为记录)
    Hadoop HDFS原理详解(系统性回顾)
    基于Mapreduce数据排序
    Hadoop-Mapreduce-英文单词计数(Brief版本-超详细解读)
    Hadoop-Mapreduce-英文单词计数
    常见数据类型-HadoopDataType(仅仅作为记录)
    GeoServer 一键发布 Raster 数据服务(分片上传、GDAL)
    GeoServer 安装、跨域
  • 原文地址:https://www.cnblogs.com/zping/p/5696283.html
Copyright © 2020-2023  润新知