基于主主复制的mysql双机热备+keepalived实现高可用性
双机热备特指基于高可用系统中的两台服务器的热备,在国内基于两台服务器的复制使用较多,故得名双机热备,双机高可用按工作中的切换方式分为:主-备方式 (Active-Standby方式)和双主机方式(Active-Active方式),主-备方式即指的是一台服务器处于某种业务的激活状态(即 Active状态),另一台服务器处于该业务的备用状态(即Standby状态)。而双主机方式即指两种不同业务分别在两台服务器上互为主备状态(即 Active-Standby和Standby-Active状态)。
1、环境
Master1 192.168.1.135
Master2 192.168.1.136
Client 192.168.1.137
2、Master1操作授权
mysql->grant replication slave on *.* to 'admin'@'192.168.1.136' identified by 'aixocm'; 授权操作
mysql->flush privileges; 刷新权限
mysql->show master status\G; 查看此时的binlog日志文件名和pos号
3、Master2操作授权
mysql->grant replication slave on *.* to 'backup'@'192.168.1.135' identified by 'aixocm'; 授权操作
mysql->flush privileges; 同上
mysql->show master status\G; 同上
4、主1-135上操作
mysql->stop slave;
mysql->change master to master_host='192.168.1.136', master_user='backup', master_password='aixocm', master_log_file='mysql-bin.000006',master_log_pos=411; 这里的文件名和pos号就是上面Master1查看的具体内容
mysql->start slave;
mysql->show slave status\G;
开启复制功能之后,如果你能看到Slave_IO_Runing:和slave_SQL_Running:这两个都显示yes,表示复制功能开启正常,缺一不可
5、主2-136上操作
mysql->stop slave;
mysql->change master to master_host='192.168.1.135', master_user='admin', master_password='aixocm', master_log_file='mysql-bin.000002',master_log_pos=242;
mysql->start slave;
mysql->show slave status\G;
这里和上面的原理一致,就不累述了
6、主135 和136同时安装keepalived
这是keepalived的官方网站:www.keepalived.org
# tar -xvf keepalived-1.1.20.tar.gz
# cd keepalived-1.1.20
#./configure --prefix=/usr/local/keepalived
#yum install openssl* 如果没有安装openssl请安装
# make && make install
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ 移动启动脚本
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# mkdir /etc/keepalived
# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ 复制配置文件
# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ 修改可执行二进制文件路径
7、在Master上对keepalived配置文件进行相关配置
! 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 master #此处填本机的主机名
}
vrrp_script check_mysqld {
script "/etc/keepalived/mysqlcheck/check_mysql.sh" #检查MYSQL 复制状态脚本
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP #这里主135和主136都写上BACKUP
interface eth0 #vip对外的网络接口
virtual_router_id 80 #标识号,主主要统一起来
priority 100 #优先级,越大优先级越高,主136上改成90
advert_int 2
nopreempt #不抢占模式,在优先级高的那台设置此参数
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_mysqld #调用MYSQL脚本的函数
}
virtual_ipaddress {
192.168.1.200 dev eth0 ;设置vip,即虚拟ip地址,我的是在eth0网卡上
}
}
当Master1 down了,Master2接管了,Master1再次起来了,不会再成为master,也就是说不会再次抢占VIP。
否则master恢复了再接管的话,如果出现问题了,则切换两次对业务来说并不好。
解决方法是:
state 都设置为Backup,在优先级高的那台设置参数nopreempt.
同样,还要在在Maste2配置该文件,需要修改主机名,优先级等参数。
8、监控MYSQL 复制状态的脚本,在Master1上,脚本位置在keepalived配置文件上有记录。
#!/bin/bash
#function:监视mysql主从服务器状态
#written by:alec
user=admin
host=192.168.1.135
password=aixocm
check_mysql() {
IO=`/usr/local/mysql/bin/mysql -u$user -p$password -h$host -e 'show slave status\G'|grep IO_Running|tr -s ' '|awk '{print $2}'|grep Yes|wc -l`
SQL=`/usr/local/mysql/bin/mysql -u$user -p$password -h$host -e 'show slave status\G'|grep SQL_Running|tr -s ' '|sed -n '1p'|awk '{print $2}'|grep Yes|wc -l`
if [ "$IO" -eq 1 ]&&[ "$SQL" -eq 1 ]
then
service keepalived status|grep pid
if [ $? -eq 0 ]
then
echo "服务已经启动"
else
service keepalived start
if [ $? -eq 0 ]
then
echo "服务启动成功"
else
echo "服务启动失败"
fi
fi
else
service keepalived status|grep pid
if [ $? -eq 0 ]
then
service keepalived stop
if [ $? -eq 0 ]
then
echo "服务关闭成功"
else
echo "服务关闭失败"
fi
else
echo "服务已经关闭"
fi
fi
}
main(){
check_mysql
}
main;
同样,在Master2上也需要该监控脚本,监控脚本需要能够登陆到本地mysql的用户名和密码,在Master2上只需修改用户名,主机名和密码。需要注意的是,需要给脚本加上可执行的权限。
9、在Master1和Master2上远程授权VIP登陆用户
>grant all on *.* to test@'%' identified by 'aixocm';
拥有VIP地址的主机才是真正对外提供服务主机,远程用户通过VIP连接到真实的服务器上来
/etc/init.d/keepalived start ;两台主机都启动keepalived这个服务
VIP会首先出现在优先级高的Master1上,如下图所示:
10 最后测试
用客户机登录服务器,让拥有VIP的那台服务器也就是Master1宕机,我们这里只需要停止slave复制功能即可。
# mysql –utest –paixocm –h192.168.1.200 –P 3306
# stop slave;
# quit;
然后此时在查看ip地址,VIP这时候应该是没有了的,跑到Master2下查看VIP地址,如果能够看到VIP地址,说明你成功了,如下图:
基于主主复制的mysql双机热备+keepalived实现高可用性的更多相关文章
- mysql双机热备的实现
转:http://blog.csdn.net/qq394829044/article/details/53203645 Mysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题.还好 ...
- (转)mysql双机热备的实现
mysql双机热备的实现 原文:http://www.zjian.me/web/php/mysql%E5%8F%8C%E6%9C%BA%E7%83%AD%E5%A4%87%E7%9A%84%E5%AE ...
- Mysql双机热备--预备知识
1.双机热备 对于双机热备这一概念,我搜索了很多资料,最后,还是按照大多数资料所讲分成广义与狭义两种意义来说. 从广义上讲,就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务.当一台服务器 ...
- mysql 主从复制(mysql双机热备的实现)
转:http://blog.csdn.net/qq394829044/article/details/53203645 Mysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题.还好 ...
- 基于nginx实现web服务器的双机热备
1.适用场景 对于部署重要的服务,会使用两台服务器,互相备份,共同执行同一服务.当一台服务器出现故障时,可以由另一台服务器承担服务任务,从而在不需要人工干预的情况下,自动保证系统能持续提供服务.双机热 ...
- MySQL双机热备环境搭建
一. 前期准备 准备两台服务器(电脑),接入到同一局域网中,能够使双方可以ping通: 安装MySQL数据库,具体安装方法网上很全面,但是安装的版本需保持一致: 服务器IP地址设置. l A服 ...
- CentOS系统MySQL双机热备配置
1 概述 在集成项目中需要应对不同环境下的安装配置,主流操作系统大致可以分为三种:Linux.Windows以及UNIX.其中Linux备受青睐的主要原因有两个: 首先,Linux作为自由软件有两个 ...
- Mysql双机热备配置(超详细多图版)
一.双击热备介绍 1.基本概念 双机热备特指基于高可用系统中的两台服务器的热备(或高可用),双机高可用按工作中的切换方式分为:主-备方式(Active-Standby方式)和双主机方式(Active- ...
- windows下使用mysql双机热备功能
一. 准备工作 1. 准备两台服务器(电脑),接入局域网中,使互相ping得通对方 2. 两台服务器都安装mysql-server-5.1,必须保证mysql的版本一致 3. 假设,服务器A:192. ...
随机推荐
- Python 邮箱
#coding:utf-8from email.header import Headerfrom email.mime.text import MIMETextfrom email.utils imp ...
- hdu 3667 (拆边 mcmf)
注意题目中 边的容量 <= 5.可以把费用权值 a *f ^2化归成 a * f2, 即第一条边费用为 1 * a, 第二条 为 (4 - 1) * a, 第三条为 (9 - 4) * a.. ...
- 转载:HTML/CSS 速写神器:Emmet
转载在http://bubkoo.com/2014/01/04/emmet-a-toolkit-for-improving-html-css-workflow/ 在前端开发的过程中,一个最繁琐的工作就 ...
- Adjacency List
w Python Patterns - Implementing Graphs | Python.orghttps://www.python.org/doc/essays/graphs/ Graph ...
- 练习: 省市联动(Ajax)
// 示例一: china.xml (位于 src 目录下) <?xml version="1.0" encoding="utf-8"?> < ...
- 安装CentOS 7.4 可能会出现的坑以及解决方案
安装CentOS 7.4 可能会出现的坑以及解决方案 (解决方法不唯一,如果行不通的话emmmm~~, 百度会啥你会啥~~) 坑.0X01 解决: 退出虚拟机,以管理员权限运行 坑.0X02 解决: ...
- 洗牌算法Fisher-Yates以及C语言随机数的产生
前些天在蘑菇街的面试中碰到一道洗牌的算法题,拿出来和大家分享一下! 原题是:54张有序的牌,如何无序的发给3个人? 这个题是运用经典的洗牌算法完成.首先介绍一种经典的洗牌算法--Fisher-Yate ...
- jquery on 确认删除
$(document).on('click', '.delbtn', function() { if (confirm("确定要删除吗?")) { ...
- linux 后台进程管理利器supervisor
Linux的后台进程运行有好几种方法,例如nohup,screen等,但是,如果是一个服务程序,要可靠地在后台运行,我们就需要把它做成daemon,最好还能监控进程状态,在意外结束时能自动重启. ...
- MySQL忘记密码的正确解决方法
MySQL忘记密码解决方案:破解本地密码: Windows: 1.用系统管理员登陆系统. 2.停止MySQL的服务. 3.进入命令窗口,然后进入 MySQL的安装目录,比如我的安装目录是c:\mysq ...