Mysql系列:高可用(HA)-keeplived
转自:晓叹星沉 https://my.oschina.net/blueSky4Java/blog/1572905
摘要: 随着项目的发展,为了提高程序的性能,数据库层面或多或少的会用到HA、读写分离、集群等功能,在选型时可以考虑使用现成的云服务,或者一些高可用软件,亦或是利用一些开源软件实现上述功能。此次将针对上述功能分篇幅进行整理,内容涉及HA、读写分离、集群,以期使用时达到快速部署之效果。
一、keepalived简介
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除。其使用 VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议,可以通过在一个路由器组(一个VRRP组)之间共享一个虚拟IP(VIP), 即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个MASTER和多个BACKUP 。当master宕掉后, 根据VRRP的优先级来选举一个BACKUP当MASTER,及时将业务切换到其它设备,从而保持通讯的连续性和可靠性 。
Mysql HA的实现原理(此处以两台为例),两台Mysql主主复制,使数据时刻保持一致,同时使用两个keepalived监听各自机器上的Mysql,当Mysql服务停掉后,执行脚本关掉keepalived服务,由另一台机器的keepalived接替。
实现此功能需要两个步骤:
- 配置Mysql主主复制
- keepalived安装配置
环境信息:
master:192.168.102.129(CentOS6.8,hostname为master)
slave:192.168.102.130(CentOS6.8,hostname为salve)
VIP:192.168.102.128
二、Mysql主主复制
(1)修改mysql配置文件,开启二进制文件
master的my.cnf
[mysqld]
server_id = 1 #服务id,保证两台mysql唯一,不重复即可
log-bin = mysql-bin #开启二进制日志
relay-log = mysql-relay-bin
replicate-wild-ignore-table=mysql.% #配置不需要复制的库
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%
slave的my.cnf
[mysqld]
server_id = 2
log-bin = mysql-bin
relay-log = mysql-relay-bin
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%
配置完成后,重启两个mysql。
(2)配置主主复制
连接mysql,使用show master status查看master和slave两个mysql的二进制文件名称和位置
master(192.168.102.129)如下:

slave(192.168.102.130)如下:

根据上述file和position互相配置主从
master(192.168.102.129)如下:
change master to master_host='192.168.102.130',
master_user='root',master_password='123456',master_port=3306,master_log_file='mysql-
bin.000002',master_log_pos=472;
start slave;
slave(192.168.102.130)如下:
change master to master_host='192.168.102.129',
master_user='root',master_password='123456',master_port=3306,master_log_file='mysql-
bin.000002',master_log_pos=724;
start slave;
(3)测试验证是否同步
连接master,在jz.test中添加记录m1
连接salve,在jz.test中添加记录s1,结果如下

三、keepalived安装配置
(1)keepalived安装
使用yum可以直接安装yum install keepalived
网络不允许的情况下可以下载tar或rpm进行离线安装。本文使用yum直接安装,安装过程不再赘述。
(2)keepalived配置
配置keepalived.conf文件
[root@master ~]# vi /etc/keepalived/keepalived.conf
master配置
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP #master和slave都设置为BACKUP,
interface eth0
virtual_router_id 51
priority 100 #master和slave设置不同值,启动时会将priority大的设置为master
advert_int 1
nopreempt #设置为不抢占模式,仅master配置。当master挂掉后,slave当选为master,恢复后不再切换
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.102.128 #虚拟ip
}
}
virtual_server 192.168.102.128 3306 {
delay_loop 2 #轮训real_server时间间隔,此处设为2秒
lb_algo rr
lb_kind NAT
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.102.129 3306 {
weight 1
notify_down /usr/local/mysql/checkMysql.sh #mysql挂掉时执行的脚本,需具备执行权限
TCP_CHECK {
connect_timeout 10
bingto 192.168.102.128
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
slave配置
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.102.128
}
}
virtual_server 192.168.102.128 3306 {
delay_loop 2
lb_algo rr
lb_kind NAT
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.102.130 3306 {
weight 1
notify_down /usr/local/mysql/checkMysql.sh
TCP_CHECK {
connect_timeout 10
bingto 192.168.102.128
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
在/usr/local/mysql/下增加checkMysql.sh,脚本如下(留意脚本权限,需具备执行权限):
pkill keepalived
keepalived加入开机启动
chkconfig keepalived on
(3)测试keepalived是否生效
启动master和slave的mysql、keepalived,
连接192.168.102.128的数据库,查询hostname,此时vip在master机器上

停掉master的mysql服务(service mysql stop)后,vip飘到了slave上。

四、总结
通过上述配置可初步实现数据库的高可用性,在Mysql服务出问题时实现自动切换,但在实际应用中应考虑服务宕掉时,应实现邮件通知功能,文中尚未涉及,后期实现后再做更新。此外Mysql之间出现数据不同步问题,也要谨慎处理,暂停数据同步功能,将数据处理后,方可重新开启同步。
© 著作权归作者所有
Mysql系列:高可用(HA)-keeplived的更多相关文章
- Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群
大纲一.前言二.环境准备三.Corosync 安装与配置四.Pacemaker 安装与配置五.DRBD 安装与配置六.MySQL 安装与配置七.crmsh 资源管理 推荐阅读: Linux 高可用(H ...
- (5.1)mysql高可用系列——高可用架构方案概述
关键词:mysql高可用概述,mysql高可用架构 常用高可用方案 20190918 现在业内常用的MySQL高可用方案有哪些?目前来说,用的比较多的开源方案分内置高可用与外部实现,内置高可用有如下: ...
- 分布式数据存储 - MySQL主从复制高可用方案
前面几篇文章说道MySQL数据库的高可用方案主从复制.主从复制的延迟产生原因.延迟检测及延迟解决方案(并未从根本上解决),这种主从复制方案保证数据的冗余的同时可以做读写分离来分担系统压力但是并非是高可 ...
- 浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)
1.熟悉几个组件 1.1.apache —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 ...
- mysql实现高可用架构之MHA
一.简介 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能.MHA 在监控到 mas ...
- MySQL之高可用MHA部署
先说一下大概原理 虚拟机A ip为10.0.3.92 作为master 虚拟机B ip为10.0.3.102 作为slave1 虚拟机C ip为10.0.3.103 作为 ...
- Oracle和MySQL的高可用方案对比【转】
关于Oracle和MySQL的高可用方案,其实一直想要总结了,就会分为几个系列来简单说说.通过这样的对比,会对两种数据库架构设计上的细节差异有一个基本的认识.Oracle有一套很成熟的解决方案.用我在 ...
- 浅谈web应用的负载均衡、集群、高可用(HA)解决方案
http://aokunsang.iteye.com/blog/2053719 声明:以下仅为个人的一些总结和随写,如有不对之处,还请看到的网友指出,以免误导. (详细的配置方案请google,这 ...
- web应用的负载均衡、集群、高可用(HA)解决方案
看看别人的文章: 1.熟悉几个组件 1.1.apache —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代 ...
- Rancher安装多节点高可用(HA)
Rancher版本:Rancher v1.0.1 基本配置需求 多节点的HA配置请参照单节点需求 节点需要开放的端口 全局访问:TCP 端口22,80,443,18080(可选:用于在集群启动前 查看 ...
随机推荐
- 常用MS-SQL写法整理
这里整理日常会用到的一些写法,一些常规的group by,系统函数等用法不在这里做记录了,大家有什么好的写法也可以分享下 1 sql操作xml内容(sp_xml_preparedocument和ope ...
- 剑指offer 面试14题
面试14题: 题目:剪绳子 题:给你一根长度为n的绳子,请把绳子剪成m段(m,n都是整数,且n>1,m>1),每段绳子的长度记为k[0],k[1],k[2],...,k[m].请问k[0] ...
- windows8.1电话激活密钥
请断网安装Windows 8.1核心版:334NH-RXG76-64THK-C7CKG-D3VPT Windows 8.1专业版:XHQ8N-C3MCJ-RQXB6-WCHYG-C9WKB
- XSS - 禁止浏览器读取Cookie - HttpOnly
1.什么是HttpOnly? 如果您在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,具体一点的介绍请google进行搜索. C ...
- Hexo 使用中搭建博客过程中遇到的坑
本地执行hexo s 时报错: WARN No layout: index.html 原因:theme 没有下载下来,经查,theme文件夹下为空. 新建文章后,执行 hexo g 时报如下错误: ( ...
- 系统非正常关机启动后出现:an error occurred during the file system
现象描述: 1.系统ssh登录报Too many open files in system,系统登录不进去,就直接强制关机了,开机后出现(2)的错误: 由于文件描述符用完了,需要把fs.file-ma ...
- python3 多线程编程
python / 并发 / 线程 / 对象 / 编程 0.什么是线程 1. 多线程模块 2. 创建线程的方法 3. join()方法 4.isAlive()方法 5. name属性和daemon属 ...
- 手机端的META差异
手机端的META你了解多少? 我们先来简单了解下meta标签:meta指元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. 标签位于文档的头部, ...
- CSS3手风琴下拉菜单
在线演示 本地下载
- 20145240 《Java程序设计》第十周学习总结
20145240 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. 程序员所作的事情就是把数据发送到指定的位置 ...