转自:晓叹星沉 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接替。

实现此功能需要两个步骤:

  1. 配置Mysql主主复制
  2. 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的更多相关文章

  1. Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群

    大纲一.前言二.环境准备三.Corosync 安装与配置四.Pacemaker 安装与配置五.DRBD 安装与配置六.MySQL 安装与配置七.crmsh 资源管理 推荐阅读: Linux 高可用(H ...

  2. (5.1)mysql高可用系列——高可用架构方案概述

    关键词:mysql高可用概述,mysql高可用架构 常用高可用方案 20190918 现在业内常用的MySQL高可用方案有哪些?目前来说,用的比较多的开源方案分内置高可用与外部实现,内置高可用有如下: ...

  3. 分布式数据存储 - MySQL主从复制高可用方案

    前面几篇文章说道MySQL数据库的高可用方案主从复制.主从复制的延迟产生原因.延迟检测及延迟解决方案(并未从根本上解决),这种主从复制方案保证数据的冗余的同时可以做读写分离来分担系统压力但是并非是高可 ...

  4. 浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

    1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 ...

  5. mysql实现高可用架构之MHA

    一.简介 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能.MHA 在监控到 mas ...

  6. MySQL之高可用MHA部署

    先说一下大概原理 虚拟机A  ip为10.0.3.92           作为master 虚拟机B  ip为10.0.3.102  作为slave1 虚拟机C  ip为10.0.3.103  作为 ...

  7. Oracle和MySQL的高可用方案对比【转】

    关于Oracle和MySQL的高可用方案,其实一直想要总结了,就会分为几个系列来简单说说.通过这样的对比,会对两种数据库架构设计上的细节差异有一个基本的认识.Oracle有一套很成熟的解决方案.用我在 ...

  8. 浅谈web应用的负载均衡、集群、高可用(HA)解决方案

    http://aokunsang.iteye.com/blog/2053719   声明:以下仅为个人的一些总结和随写,如有不对之处,还请看到的网友指出,以免误导. (详细的配置方案请google,这 ...

  9. web应用的负载均衡、集群、高可用(HA)解决方案

    看看别人的文章: 1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代 ...

  10. Rancher安装多节点高可用(HA)

    Rancher版本:Rancher v1.0.1 基本配置需求 多节点的HA配置请参照单节点需求 节点需要开放的端口 全局访问:TCP 端口22,80,443,18080(可选:用于在集群启动前 查看 ...

随机推荐

  1. 第二篇 Python图片处理模块PIL(pillow)

    本篇包含:16.Point    17.Putalpha    18.Putdata    19.Putpalette    20.Putpixel      21.Quantize     22.R ...

  2. node+npm安裝配置

    控制臺輸入node 根據提示安裝   sudo apt-get install -g npm配置淘寶源 npm config set registry https://registry.npm.tao ...

  3. Linux Shell编程 sed命令

    概述 sed 是一种几乎可以应用在所有 UNIX 平台(包括 Linux)上的轻量级流编辑器,体积小.所以,它可以对从如管道这样的标准输入中接收的数据进行编辑. sed 主要是用来将数据进行选取.替换 ...

  4. 【转载】linux下使用 TC 对服务器进行流量控制

    tc 介绍 在linux中,tc 有二种控制方法 CBQ 和 HTB.HTB 是设计用来替换 CBQ 的.HTB比CBQ更加灵活,但是CPU 开销也更大,通常高速的链路会使用CBQ,一般而言HTB使用 ...

  5. HAproxy 介绍

    HAproxy 介绍 (1)HAProxy 是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy ...

  6. jq中ajax的dataType:"json"是指什么?

    dataType String 预期服务器返回的数据类型.如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如XML MIME类型就被识别为XML.在1.4中,JSON就 ...

  7. java内置注解、元注解和自定义注解

    注解的作用: 1.生成文档 2.跟踪代码依赖性 3.编译时进行格式检查 ---------------------------------------------------------------- ...

  8. 四、golang内置函数、递归、闭包、数组切片和map

    一.总体内容 1.内置函数.递归函数.闭包 2.数组和切片 3.map数据结构 4.package介绍 一.内置函数 注意:值类型用new来分配内存,引用类型用make来分配内存 1.close:主要 ...

  9. python补充知识点

    1. 在python2中用xrange,在python3中直接使用range就好了 2. 常数 None在逻辑判断的时候指代False,其他方式不代表True或者False 3. for循环只作用域容 ...

  10. ResourceBundle和properties 读取配置文件区别

    java.util.ResourceBundle 和java.util.properties 读取配置文件区别 这两个类都是读取properties格式的文件的,而Properties同时还能用来写文 ...