使用KeepAlived搭建MySQL高可用环境

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
应用型负载均衡 ALB,每月750个小时 15LCU
简介:






wKioL1el5dCjv2UdAAAtiTGNXZg341.png
使用KeepAlived搭建MySQL的高可用环境。
首先搭建MySQL的主从复制
在Master开启binlog,创建复制帐号,
然后在Slave输入命令


  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

  1. ! Configuration File for keepalived


  2. global_defs {

  3.     router_id HA_MySQL

  4. }


  5. vrrp_instance VI_1 {

  6.      state BACKUP

  7.      interface eth0

  8.      virtual_router_id 51

  9.      priority 100

  10.      advert_int 1

  11.      nopreempt

  12.      authentication {

  13.          auth_type PASS

  14.          auth_pass 1111

  15.      }

  16.      virtual_ipaddress {

  17.          192.168.1.199

  18.      }

  19. }


  20. virtual_server 192.168.1.199 3306 {

  21.      delay_loop 2

  22.      lb_algo wrr

  23.      lb_kind DR

  24.      persistence_timeout 60

  25.      protocol TCP

  26.      real_server 192.168.1.70 3306 {

  27.          weight 3

  28.          notify_down /root/shutdown.sh

  29.          TCP_CHECK {

  30.              connect_timeout 10

  31.              nb_get_retry 3

  32.              delay_before_retry 3

  33.              connect_port 3306

  34.          } 

  35.      }

  36. }

然后编辑Slave的配置文件
vim /etc/keepalived/keepalived.conf

  1. ! Configuration File for keepalived

  2. global_defs {

  3.      router_id HA_MySQL

  4. }


  5. vrrp_instance VI_1 {

  6.      state BACKUP

  7.      interface eth0

  8.      virtual_router_id 51

  9.      priority 90

  10.      advert_int 1

  11.      nopreempt

  12.      authentication {

  13.          auth_type PASS

  14.          auth_pass 1111

  15.      }

  16.      virtual_ipaddress {

  17.          192.168.1.199

  18.      }

  19. }


  20. virtual_server 192.168.1.199 3306 {

  21.      delay_loop 2

  22.      lb_algo wrr

  23.      lb_kind DR

  24.      persistence_timeout 60

  25.      protocol TCP

  26.      real_server 192.168.1.80 3306 {

  27.          weight 3

  28.          notify_down /root/shutdown.sh

  29.          TCP_CHECK {

  30.              connect_timeout 10

  31.              nb_get_retry 3

  32.              delay_before_retry 3

  33.              connect_port 3306

  34.          }

  35.      }

  36. }

其中
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)

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

在Master服务器上执行
killall mysqld

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

wKioL1el5iWwNkh-AABSMUQ5OCY638.png

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

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


KeepAlived还有很多参数没有明白是什么意思
生产环境的切换脚本,在Slave提升为Master之后,应该等待所有的中继日志应用完毕,否则可能丢失数据




      本文转自灬落魄灬  51CTO博客,原文链接:http://blog.51cto.com/smoke520/1830071,如需转载请自行联系原作者



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
490 3
Mysql高可用架构方案
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
369 3
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
203 3
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
1079 1
Mysql(1)—简介及Windows环境下载安装
MySQL 是一个流行的关系型数据库管理系统(RDBMS),基于 SQL 进行操作。它由瑞典 MySQL AB 公司开发,后被 Sun Microsystems 收购,现为 Oracle 产品。MySQL 是最广泛使用的开源数据库之一,适用于 Web 应用程序、数据仓库和企业应用。
109 2
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
这篇文章介绍了如何在Windows 7系统上搭建PHP、MySQL和Apache环境,并部署ECShop项目,包括安装配置步骤、解决常见问题以及使用XAMPP集成环境的替代方案。
101 1
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
【IDEA】配置mysql环境并创建mysql数据库
【IDEA】配置mysql环境并创建mysql数据库
846 0
orchestrator搭建mysql高可用
orchestrator搭建mysql高可用
115 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等