首页 > 数据库 >使用KeepAlived搭建MySQL高可用环境

使用KeepAlived搭建MySQL高可用环境

时间:2024-01-23 15:04:48浏览次数:32  
标签:KeepAlived MySQL keepalived server mysql id 搭建

 



使用KeepAlived搭建MySQL的高可用环境。

首先搭建MySQL的主从复制

在Master开启binlog,创建复制帐号,

然后在Slave输入命令

 

2016年7月25日

  配置安装技巧:

  1,使用yum install 安装keepAlived  

  2,安装完后,配置/etc/keepalived/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 查看,改成对应的名称



标签:KeepAlived,MySQL,keepalived,server,mysql,id,搭建
From: https://blog.51cto.com/u_16532032/9380030

相关文章

  • Table '.\mysql\proc' is marked as crashed and should be repaired 报错
    Table'.\MySQL\proc'ismarkedascrashedandshouldberepaired报错 解决方法:找到mysql的安装目录的bin/myisamchk工具,在命令行中输入:myisamchk-c-r../data/mysql/proc.MYI然后myisamchk工具会帮助你恢复数据表的索引。重新启动mysql,问题解决。......
  • mysql主主复制(双主复制)配置步骤
    以前我们介绍的都是主从复制,这里给各位介绍一个双主复制了,下面都希望两个主服务器数据自动复制的话可参考一下此文章。 MySQL主主复制结构区别于主从复制结构。在主主复制结构中,两台服务器的任何一台上面的数据库存发生了改变都会同步到另一台服务器上,这样两台服务器互为主从,并且......
  • MySQL MHA配置
     MySQL环境:   master:192.168.202.129:3306   slave:192.168.202.129:3307,192.168.202.129:3307,192.168.202.130:3306,192.168.202.130:3307,192.168.202.130:3308   MariaDB-10.0.13   MHA环境:   manager:192.168.202.129   node:192.168.202.130(3306端......
  • mysql mha 主从自动切换 高可用
    mha(MasterHighAvailability)目前在MySQL多服务器(超过二台),高可用方面是一个相对成熟的解决方案。 一,什么是mha,有什么特性1.主服务器的自动监控和故障转移MHA监控复制架构的主服务器,一旦检测到主服务器故障,就会自动进行故障转移。即使有些从服务器没有收到最新的relaylog,MHA自动......
  • mysql innobackupex xtrabackup 大数据量 备份 还原
    大数据量备份与还原,始终是个难点。当MYSQL超10G,用mysqldump来导出就比较慢了。在这里推荐xtrabackup,这个工具比mysqldump要快很多。 一、Xtrabackup介绍1,Xtrabackup是什么Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDBHot......
  • STM32F105双路隔离型CAN总线转4G控制板 - 二次开发环境搭建和程序下载测试
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/product/STM32F105_2CAN/index.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>......
  • mysql 查询所有表
    MySQL是一种开源的关系型数据库管理系统,在各种Web应用中使用广泛,因为它是高度可定制且易于管理的。MySQL包含一组操作,使您可以创建,更新和查询数据库中的数据。其中一个重要操作是查询所有表的数据,本文将介绍如何实现这一操作。一、使用SHOWTABLES命令SHOWTABLES命令是最简单和......
  • mysql权限的一个细枝
    业务需求:对一个用户回收一个表的所有权限,但是之前对这个用户是授权表所在库的整个权。 背景:某个表后来插入了机密数据,不能再让人随便查阅了。  比如:存在库test01 库下存在表T1,那mysql是否支持呢,来复盘下整个操作:  首先整库授权: grantallprivilgesontest01.*to......
  • 如何搭建一个短视频社区?这篇文章告诉你
    短视频社区是随着手机拍摄和社交媒体的普及而兴起的一种社区形式。短视频社区通过提供用户生成的短视频内容,并与其他用户互动和分享,为用户提供了一个展示自己才华和创造力的平台。当前已经成为全球范围内的热门社交媒体形式,市场情况非常活跃。用户规模庞大:短视频社区吸引了亿万用户......
  • 基于 Alpine 使用 kubeadm 搭建 k8s
    基于Alpine使用kubeadm搭建k8s先部署基础环境,然后根据官方文档K8s-AlpineLinux,进行操作。将官方文档整理为脚本整理脚本时,有部分调整#!/bin/shset-x#添加源,安装时已经配置#cat>>/etc/apk/repositories<<"EOF"#http://mirrors.aliyun.com/alpine/edge/commu......