基于主主复制的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. ...
随机推荐
- Observable观察者模式的使用
今天我们公司封装的类中没有加上Observable观察者模式,但是很多地方需要用到Observable观察者模式 接下来就向大家介绍一下我的使用吧! 在介绍之前我们写了一个方法 public clas ...
- 对 pthread 做的一个简陋封装
参考自 pthreadcc 库的 ThreadBase 类 用法:继承该类,重写 execute 方法,调用父类的 launchThread 方法启动线程 Thread.h // // Thread. ...
- Linux 进程间通信(二)(网络IPC:套接字)
socket描述符 套接字是通信端点的抽象,创建一个套接字使用如下函数: #include <sys/socket.h> int socket(int domain, int type, ...
- ECMAScript/JS 基础知识讲解
闭包 下面这个方法能输入0 1 2 ... 9吗?显然是不可以的,输出结果是10个10. function test() { var arr = []; for(var i = 0; i < 1 ...
- entropy 压缩信息的熵更加高 实际上英文文本的熵大概只有4.7比特
https://en.wikipedia.org/wiki/Entropy_(information_theory) https://zh.wikipedia.org/wiki/熵(信息论) 熵的概念 ...
- 我的Android进阶之旅------>Android中高低API版本兼容使用@TargetApi或者@SuppressLint("NewApi")
Android中高低API版本兼容使用@TargetApi或者@SuppressLint("NewApi") 例如:AndroidManifest.xml中,我们配置了sdk版本的 ...
- json & pickle & shelve 模块
JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下: # json序列化 import json,time user={'name':'egon' ...
- Jquery获取dom上的绑定事件
在1.8.0版本之前的写法: $.data(domObj,'events');//或者$('selector').data('events') 1.8.0及以后的写法: $._data(domObj, ...
- c语言复制文件程序
#include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 1024*1024* ...
- 2015.6.30 反弹的教训(想做T)
心路:在6.29号,市场连续大跌!我到6.29号才想到可以做T+0.6.30消息面已经利好(双降准),已经计划做T+0(X先买后卖). 开市大跌至跌停.午后所有股票开始反弹.但是上午跌停时不敢入市, ...