LVS+Keepalived+Mysql+主主数据库架构[2台]

Posted 夏天一去,又是冬季

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVS+Keepalived+Mysql+主主数据库架构[2台]相关的知识,希望对你有一定的参考价值。

架构图

安装步骤省略。

158.140 keepalived.conf

! Configuration File for keepalived

global_defs {                           #全局标识模块
   notification_email {         #定义邮件通知
     test@163.com                       #目标邮箱
   }
   notification_email_from test@163.com #发送邮箱
   smtp_server 127.0.0.1        #发送邮箱的smtp服务器
   smtp_connect_timeout 30      #smtp服务器连接超时时间
   router_id LVS_2
}

vrrp_instance VI_1 {
    state BACKUP                        #本实例启动状态:MASTER/BACKUP
    interface eth0                      #监控的网络接口
    virtual_router_id 51        #vrrp实例(同一个组主备服务器设置一样)
    priority 100                        #优先级高的为master,不能超过255。(BACKUP可设置为50)
    advert_int 1                        #均衡器检测间隔1秒(服务器设置都一样)
#    nopreempt
    authentication {            #验证类型及密码(服务器设置都一样)
        auth_type PASS          #认证方式,PASS或AH
        auth_pass 123456        #认证密码
    }
    virtual_ipaddress {         #虚拟ip地址virtual_ipaddress,可以定义多个
        192.168.158.120
    }
}

virtual_server 192.168.158.120 3306 {   #定义虚拟服务器,与上面的virtual_server一样
    delay_loop 6                        #健康检查时间间隔,6秒
    lb_algo wrr                         #负载均衡调度算法:rr|wrr|lc|wlc|sh|dh|lblc
    lb_kind DR                          #负载均衡转发规则:NAT|DR|TUN
    nat_mask 255.255.255.0
    persistence_timeout 50      #回话保持时间50秒,动态服务建议开启
    protocol TCP                        #转发协议protocol,一般有tcp和udp两种

        #后端真实服务器,有几台就设置几个
    real_server 192.168.158.140 3306 {
        weight 1                        #权重越大负载分越大,0表示失效
        #notify_down /etc/keepalived/mysqlcheck/mysql.sh
        SSL_GET {                       #健康检查方式:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

158.141 keepalived.conf

! Configuration File for keepalived

global_defs {                           #全局标识模块
   notification_email {         #定义邮件通知
     test@163.com                       #目标邮箱
   }
   notification_email_from test@163.com #发送邮箱
   smtp_server 127.0.0.1        #发送邮箱的smtp服务器
   smtp_connect_timeout 30      #smtp服务器连接超时时间
   router_id LVS_1
}

vrrp_instance VI_1 {
    state BACKUP                        #本实例启动状态:MASTER/BACKUP
    interface eth0                      #监控的网络接口
    virtual_router_id 51        #vrrp实例(同一个组主备服务器设置一样)
    priority 99                 #优先级高的为master,不能超过255。(BACKUP可设置为50)
    advert_int 1                        #均衡器检测间隔1秒(服务器设置都一样
    authentication {            #验证类型及密码(服务器设置都一样)
        auth_type PASS          #认证方式,PASS或AH
        auth_pass 123456        #认证密码
    }
    virtual_ipaddress {         #虚拟ip地址virtual_ipaddress,可以定义多个
        192.168.158.120
    }
}

virtual_server 192.168.158.120 3306 {   #定义虚拟服务器,与上面的virtual_server一样
    delay_loop 6                        #健康检查时间间隔,6秒
    lb_algo wrr                         #负载均衡调度算法:rr|wrr|lc|wlc|sh|dh|lblc
    lb_kind DR                          #负载均衡转发规则:NAT|DR|TUN
    nat_mask 255.255.255.0
    persistence_timeout 50      #回话保持时间50秒,动态服务建议开启
    protocol TCP                        #转发协议protocol,一般有tcp和udp两种

        #后端真实服务器,有几台就设置几个
    real_server 192.168.158.141 3306 {
        weight 1                        #权重越大负载分越大,0表示失效
        #notify_down /etc/keepalived/mysqlcheck/mysql.sh
        SSL_GET {                       #健康检查方式:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

VIP

ifconfig eth0:0 192.168.158.120 netmask 255.255.255.0 up

ifconfig eth0:0

ifconfig eth0:0 up

ip a s dev eth0

check.sh

#!/bin/bash
while [ true ]; do
/bin/sleep 1
sh mysql_status.sh
done

mysql_status.sh

#!/bin/bash  
#/usr/bin/nmap localhost | grep 3306  
#lsof -i:3306  
MYSQLPORT=`netstat -tlnp | grep "3306"|awk -F[:" "]+ \'{print $4}\'`  
  
function checkMysqlStatus(){  
    /usr/bin/mysql -uroot -plizhenghua --connect_timeout=5 -e "show databases;" &>/dev/null 2>&1  
    if [ $? -ne 0 ]  
    then  
        restartMysqlService  
        if [ "$MYSQLPORT" == "3306" ];then  
            echo "mysql restart successful......"   
        else  
            echo "mysql restart failure......"  
            echo "Server: $MYSQLIP mysql is down, please try to restart mysql by manual!" > /var/log/mysqlerr  
            #mail -s "WARN! server: $MYSQLIP  mysql is down" admin@yourdomain.com < /var/log/mysqlerr  
        fi  
    else  
        echo "mysql is running..."  
    fi  
}  
  
function restartMysqlService(){  
#    echo "测试重启mysql服务!"
    echo "清除mysql残余!"
    chengkill mysqld
    echo "关闭keepalived!!"
    chengkill keepalived
    echo "清除成功!"
}  
  
if [ "$MYSQLPORT" == "3306" ]  
then  
    checkMysqlStatus  
else  
    restartMysqlService  
fi

主主

CHANGE MASTER TO MASTER_HOST=\'192.168.158.140\',MASTER_USER=\'sync\',MASTER_PASSWORD=\'sync\',MASTER_LOG_FILE=\'mysql-bin.000125\',MASTER_LOG_POS=286514181;

start slave;

show slave status \\G

漂移

守护进程模式启动check.sh

check会自动运行mysql_status.sh脚本, mysql_status脚本的功能是

检测当前mysql, 当mysql挂掉的时候, 一起干掉keepalived,

这样, 即可实现漂移。

以上是关于LVS+Keepalived+Mysql+主主数据库架构[2台]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 主主复制 + LVS + Keepalived 实现 MySQL 高可用性

LVS+Keepalived+Mysql+主主数据库架构[2台]

MySQL 主主复制 + LVS + Keepalived 实现 MySQL 高可用性

MySQL主主复制+LVS+Keepalived实现MySQL高可用性

Lvs+keepalived+mysql(主主复制)

Mysql双主热备+LVS+Keepalived高可用操作记录