基于keepalived搭建MySQL热机集群

背景

MySQL的高可用方案通常有以下几种:mysql

keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Clustersql

比较经常使用的是keepalived+双主,MHA和PXC。数据库

对于小公司,通常推荐使用keepalived+双主,便于维护。bash

环境

mysql双主配置

1. 修改配置文件测试

master1中有关复制的配置以下:rest

[mysqld]
log-bin=mysql-bin
server-id=1
log_slave_updates=1

master2中有关复制的配置以下:日志

[mysqld]
log-bin=mysql-bin
server-id=2
log_slave_updates=1
read_only=1

改完以后把两个数据库都重启了router

2. 建立复制用户server

master1中建立:blog

CREATE USER 'repl'@'10.1.80.114' IDENTIFIED BY 'Mysql@2019';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.1.80.114';

master2中建立:

CREATE USER 'repl'@'10.1.80.113' IDENTIFIED BY 'Mysql@2019';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.1.80.113';

3. 执行CHANGE MASTER TO语句

因是从头搭建MySQL主从复制集群,因此不须要获取全局读锁来获得二进制日志文件的位置,直接根据show master status的输出来确认。

master1上执行:

CHANGE MASTER TO
  MASTER_HOST='10.1.80.114',
  MASTER_USER='repl',
  MASTER_PASSWORD='Mysql@2019',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=154;

master2上执行:  

CHANGE MASTER TO
  MASTER_HOST='10.1.80.113',
  MASTER_USER='repl',
  MASTER_PASSWORD='Mysql@2019',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=154;

4. 分别在两个节点上执行start slave;语句

并经过show slave status\G查看复制是否搭建成功。

出现以下内容说明成功。

 

五、数据同步测试

在两侧插入数据发现正常同步。

 keepalived配置

一、安装依赖包

yum install gcc 
yum install openssl*

二、下载软件,解压编译

#下载
wget   http://www.keepalived.org/software/keepalived-2.0.10.tar.gz
#解压
tar -zxvf keepalived-2.0.10.tar.gz 
#编译
./configure --prefix=/keepalived

三、初始化以及启动

# keepalived启动脚本变量引用文件,默认文件路径是/etc/sysconfig/,也能够不作软连接,直接修改启动脚本中文件路径便可(安装目录下)
[root@localhost /]# cp /keepalived/etc/sysconfig/keepalived  /etc/sysconfig/keepalived 
 
# 将keepalived主程序加入到环境变量(安装目录下)
[root@localhost /]# cp /keepalived/sbin/keepalived /usr/sbin/keepalived
 
# keepalived启动脚本(源码目录下),放到/etc/init.d/目录下就可使用service命令便捷调用
[root@localhost /]# cp /tmp/keepalived-2.0.10/keepalived/etc/init.d/keepalived  /etc/init.d/keepalived
 
# 将配置文件放到默认路径下
[root@localhost /]# mkdir /etc/keepalived
[root@localhost /]# cp /keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

#加为系统服务:
chkconfig --add keepalived
#开机启动:
chkconfig keepalived on
#查看开机启动的服务:
chkconfig --list
#启动、关闭、重启
service keepalived start|stop|restart

四、修改配置文件

master1

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
       
global_defs {
notification_email {
ops@wangshibo.cn
tech@wangshibo.cn
}
       
notification_email_from ops@wangshibo.cn
smtp_server 127.0.0.1 
smtp_connect_timeout 30
router_id MASTER-HA
}
       
vrrp_script chk_mysql_port {            #检测mysql服务是否在运行。有不少方式,好比进程,用脚本检测等等
    script "/keepalived/chk_mysql.sh"   #这里经过脚本监测
    interval 2                          #脚本执行间隔,每2s检测一次
    weight -5                           #脚本结果致使的优先级变动,检测失败(脚本返回非0)则优先级 -5
    fall 2                              #检测连续2次失败才算肯定是真失败。会用weight减小优先级(1-255之间)
    rise 1                              #检测1次成功就算成功。但不修改优先级
}
       
vrrp_instance VI_1 {
    state MASTER    
    interface eth2          #指定虚拟ip的网卡接口
    mcast_src_ip 10.1.80.113
    virtual_router_id 51    #路由器标识,MASTER和BACKUP必须是一致的
    priority 101            #数字越大,优先级越高,同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。这样MASTER故障恢复后,就能够将VIP资源再次抢回来 
    advert_int 1         
    authentication {   
        auth_type PASS 
        auth_pass 1111     
    }
    virtual_ipaddress {    
        10.1.80.119
    }
      
track_script {               
   chk_mysql_port             
}
}

编写切换脚本。KeepAlived作心跳检测,若是Master的MySQL服务挂了(3306端口挂了),那么它就会选择自杀。

Slave的KeepAlived经过心跳检测发现这个状况,就会将VIP的请求接管

vi chk_mysql.sh

#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
    service keepalived stop
fi

chmod 755 chk_mysql.sh

启动keepalived服务。

master2

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
       
global_defs {
notification_email {
ops@wangshibo.cn
tech@wangshibo.cn
}
       
notification_email_from ops@wangshibo.cn
smtp_server 127.0.0.1 
smtp_connect_timeout 30
router_id MASTER-HA
}
       
vrrp_script chk_mysql_port {
    script "/keepalived/chk_mysql.sh"
    interval 2            
    weight -5                 
    fall 2                 
    rise 1               
}
       
vrrp_instance VI_1 {
    state BACKUP
    interface eth2
    mcast_src_ip 10.1.80.114
    virtual_router_id 51    
    priority 99          
    advert_int 1         
    authentication {   
        auth_type PASS 
        auth_pass 1111     
    }
    virtual_ipaddress {    
        10.1.80.119
    }
      
track_script {               
   chk_mysql_port             
}
}

vi chk_mysql.sh

#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
    service keepalived stop
fi

chmod 755 chk_mysql.sh

查看网卡

相关文章
相关标签/搜索