MySQL高可用基础之keepalived+双主复制【转】
环境:
MySQL-VIP:192.168.1.3
MySQL-master1:192.168.1.1
MySQL-master2:192.168.1.2
OS版本:CentOS release 6.4 (Final) Linux 2.6.32-358.el6.x86_64
MySQL版本:5.6.14
Keepalived版本:1.2.13
一、MySQL master-master配置
1、修改MySQL配置文件/etc/my.cnf
# Server1配置
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_UNSIGNED_SUBTRACTION
port = 6603
server_id = 1
lower_case_table_names = 1
character_set_server = utf8
autocommit = off
innodb_flush_log_at_trx_commit = 1
skip_name_resolve = ON
innodb_strict_mode = ON
log_bin = mysql-bin
innodb_data_home_dir = /usr/local/mysql/data
innodb_log_group_home_dir = /usr/local/mysql/data
auto_increment_increment=2
auto_increment_offset=1
# Server2配置
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_UNSIGNED_SUBTRACTION
port = 6603
server_id = 2
lower_case_table_names = 1
character_set_server = utf8
autocommit = off
innodb_flush_log_at_trx_commit = 1
skip_name_resolve = ON
innodb_strict_mode = ON
log_bin = mysql-bin
innodb_data_home_dir = /usr/local/mysql/data
innodb_log_group_home_dir = /usr/local/mysql/data
auto_increment_increment=2
auto_increment_offset=2
2、将192.168.1.1设为192.168.1.2的主服务器
# 在Server1上执行
grant replication slave on *.* to 'repl'@'%' identified by 'repl';
show master status;
# 在Server2上执行
change master to
master_host='192.168.1.1',
master_port=6603,
master_user='repl',
master_password='repl',
master_log_file='mysql-bin.000027',
master_log_pos=120;
start slave;
show slave status\G
3、将192.168.1.2设为192.168.1.1的主服务器
# 在Server2上执行
grant replication slave on *.* to 'repl'@'%' identified by 'repl';
show master status;
# 在Server1上执行
change master to
master_host='192.168.1.2',
master_port=6603,
master_user='repl',
master_password='repl',
master_log_file='mysql-bin.000010',
master_log_pos=351;
start slave;
show slave status\G
4、MySQL双Master同步测试
二、keepalived安装及配置
1、192.168.1.1服务器上keepalived安装及配置
安装keepalived
# tar -zxvf keepalived-1.2.13.tar.gz
# cd keepalived-1.2.13
# ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-358.el6.x86_64
# make
# make install
配置keepalived
新建一个配置文件,默认情况下keepalived启动时会去/etc/keepalived目录下找配置文件
# mkdir /etc/keepalived
# vi /etc/keepalived/keepalived.conf
# Configuration File for keepalived
global_defs {
router_id MySQL-ha
}
vrrp_instance VI_1 {
state BACKUP #两台配置此处均是BACKUP
interface eth1
virtual_router_id 51
priority 100 #优先级,另一台改为90
advert_int 1
nopreempt #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.3
}
}
virtual_server 192.168.1.3 6603 {
delay_loop 2 #每个2秒检查一次real_server状态
lb_algo wrr #LVS算法
lb_kind DR #LVS模式
persistence_timeout 60 #会话保持时间
protocol TCP
real_server 192.168.1.1 6603 {
weight 3
notify_down /usr/local/mysql/bin/failover.sh #检测到服务down后执行的脚本
TCP_CHECK {
connect_timeout 10 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
connect_port 6603 #健康检查端口
}
}
编写检测服务down后所要执行的脚本
# vi /usr/local/mysql/bin/failover.sh
#!/bin/sh
pkill keepalived
# chmod +x /usr/local/mysql/bin/failover.sh
注:此脚本是上面配置文件notify_down选项所用到的,keepalived使用notify_down选项来检查real_server的服务状态,当发现real_server服务故障时,便触发此脚本;我们可以看到,脚本就一个命令,通过pkill keepalived强制杀死keepalived进程,从而实现了MySQL故障自动转移。另外,我们不用担心两个MySQL会同时提供数据更新操作,因为每台MySQL上的keepalived的配置里面只有本机MySQL的IP+VIP,而不是两台MySQL的IP+VIP
启动keepalived
# /usr/local/keepalived/sbin/keepalived -D
# ps aux | grep keepalived
测试
找一台局域网PC,然后去ping MySQL的VIP,这时候MySQL的VIP是可以ping的通的
停止MySQL服务,看keepalived健康检查程序是否会触发我们编写的脚本
keepalived配置成服务并开机启动
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
# chkconfig --add keepalived
# chkconfig --level 345 keepalived on
2、192.168.1.2上keepalived安装及配置
安装keepalived
# tar -zxvf keepalived-1.2.13.tar.gz
# cd keepalived-1.2.13
# ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-358.el6.x86_64
# make
# make install
配置keepalived
这台配置和Server1上基本一样,但有三个地方不同:优先级为90、无抢占设置、real_server为本机IP
# mkdir /etc/keepalived
# vi /etc/keepalived/keepalived.conf
# Configuration File for keepalived
global_defs {
router_id MySQL-ha
}
vrrp_instance VI_1 {
state BACKUP #两台配置此处均是BACKUP
interface eth1
virtual_router_id 51
priority 100 #优先级,另一台改为90
advert_int 1
nopreempt #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.3
}
}
virtual_server 192.168.1.3 6603 {
delay_loop 2 #每个2秒检查一次real_server状态
lb_algo wrr #LVS算法
lb_kind DR #LVS模式
persistence_timeout 60 #会话保持时间
protocol TCP
real_server 192.168.1.1 6603 {
weight 3
notify_down /usr/local/mysql/bin/failover.sh #检测到服务down后执行的脚本
TCP_CHECK {
connect_timeout 10 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
connect_port 6603 #健康检查端口
}
}
编写检测服务down后所要执行的脚本
# vi /usr/local/mysql/bin/failover.sh
#!/bin/sh
pkill keepalived
# chmod +x /usr/local/mysql/bin/failover.sh
启动keepalived
# /usr/local/keepalived/sbin/keepalived -D
# ps aux | grep keepalived
测试
停止MySQL服务,看keepalived健康检查程序是否会触发我们编写的脚本
keepalived配置成服务并开机启动
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
# chkconfig --add keepalived
# chkconfig --level 345 keepalived on
三、测试
1、MySQL远程登录测试
使用客户端登录VIP测试
2、keepalived故障转移测试
客户端一直去ping VIP,然后关闭192.168.1.1上的keepalived,正常情况下VIP就会切换到192.168.1.2上面去
开启192.168.1.1上的keepalived,关闭192.168.1.2上的keepalived,看是否能自动切换,正常情况下VIP又会属于192.168.1.1
注:keepalived切换速度还是非常块的,整个切换过程只需1-3秒
3、MySQL故障转移测试
在192.168.1.1上关闭MySQL服务,看VIP是否会切换到192.168.1.2上
开启192.168.1.1上的MySQL和keepalived,然后关闭192.168.1.2上的MySQL,看VIP是否会切换到192.168.1.1上
客户端连接的MySQL的VIP,在切换时执行了一个MySQL查询命令
这个方案可以在一定程度上解决MySQL高可用的问题,即应用访问VIP,当一个MySQL Server出现问题,会自动切换到另一个,切换过程很快,对应用透明。但这种简单配置只能有一台服务器工作,另一个备用,这样无法扩展读写,也没法做负载均衡。目前MySQL负载均衡方案一般是一个HA(keepalived、MHA等)+ 一个负载均衡器(LVS、haproxy等)。
关于LVS+keepalived方案,参考:
http://kb.cnblogs.com/page/83944/
http://blog.chinaunix.net/uid-20639775-id-3337471.html
http://wenku.baidu.com/link?url=lNERgU80yUEAKmPO0hCFbDH7_xlIG14itOHx4KkjPNsVVRd2GEblXH-HPdOi39Kf8v8Gu9yfQBfkU_WEJ35QM89DOSU_3kGH8LRhfKGKfLO
MySQL高可用基础之keepalived+双主复制【转】的更多相关文章
- MySQL高可用架构之MySQL5.7组复制MGR
MySQL高可用架构之MySQL5.7组复制MGR########################################################################### ...
- MySQL高可用架构之Keepalived+主从架构部署
针对目前公司的数据库架构要做统计规划和调整,所以针对不同的业务环境要选择合适的架构就比较重要,同时作为运维人员又要考虑到维护的便捷性(不能做过多架构维护),最终停留在mha+vip/主从+vip/my ...
- Mysql+Keepalived双主热备高可用操作记录
我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互为Mast ...
- keepalived+mysql双主复制高可用方案
MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.而Keepalived通过虚拟IP,实现了 ...
- mysql+keepalived 双主热备高可用
理论介绍:我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互 ...
- 【转载】MySQL和Keepalived高可用双主复制
服务器主机IP和虚拟浮动IP配置 RealServer A 192.168.75.133 RealServer B 192.168.75.134 VIP A 192.168.75.110 VIP B ...
- MariaDB+Keepalived双主高可用配置MySQL-HA
利用keepalived构建高可用MySQL-HA,保证两台MySQL数据的一致性,然后用keepalived实现虚拟VIP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换. ...
- mysql高可用架构方案之中的一个(keepalived+主主双活)
Mysql双主双活+keepalived实现高可用 文件夹 1.前言... 4 2.方案... 4 2.1.环境及软件... 4 2.2.IP规划... 4 2.3.架构图... ...
- [转] Haproxy、Keepalived双主高可用负载均衡
http://blog.chinaunix.net/uid-25266990-id-3989321.html 在测试了Nginx+Keepalived的负载均衡后,也对Haproxy+Keepaliv ...
随机推荐
- sqlserver 将多行数据查询合并为一条数据
有这样一个需求:表T_FUN_TASK为任务表,有字段(TASKID,TASKNAME),表T_FUN_LOGBOOK为日志表,有字段(LOGID,TASKID,LOGDATE),一个任务可持续多天, ...
- jQuery ajax - serialize() 方法
http://www.jb51.net/article/60849.htm http://www.w3school.com.cn/jquery/ajax_serialize.asp
- NPM环境搭建
1. NPM全局路径:配置npm包的安装位置,在你的用户文件夹下,新建.npmrc文件:cache=D:\NodeJs\nvm\npm-cache 表示缓存文件夹 prefix=D:\NodeJs\n ...
- hello,boke
我一名学习软件工程金融服务工程的学生,简单来说就是学习计算机类的,对于自己的介绍,从平时生活中来说吧,我一直处于一种很中规中矩的生活状态里,平时玩玩手机.追追剧.和室友一起去图书馆自习,考前拼命复习两 ...
- JavaScript--赋值表达式(typeof-delete-void)
typeof运算符 typeof是一个一元运算符,操作数可以使任意类型,返回值为操作数类型的一个字符串 一.数字类型,如typeof(1),返回的值就是number.当然这个是常规数字,对于非常规的数 ...
- 34.Spring-Aop.md
http://blog.csdn.net/bigtree_3721/article/details/50759843 目录 [toc] --- 1.概念 1.1概念 AOP是Spring提供的关键特性 ...
- C++ 异常处理执行过程
看<clean code>时,又遇到异常处理的例程. 看不明白是因为我一直都将异常处理束之高阁. 今天晚上下决心去找资料看看,看完之后觉得以前是把它想得太难,其实非常简单. 希望以后遇到问 ...
- MySql奇葩问题汇总
当字段名与关键词重叠时,sql语句中用``将字段名括起来,就可解决报错的问题.
- 安卓webview下使用zepto的swipe失效
安卓webview下使用zepto的swipe遇到的坑 众所周知,安卓手机上touch事件一直有各种各样莫名其妙的问题. 比如,我想要用swipeLeft/swipeRight监听向左向右滑动事件,如 ...
- jQuery中的模拟操作
jQuery中的模拟操作主要是通过trigger来触发,相当于页面加载完成后不需要用户点击按钮,就可以自动触发页面中的相关事件. trigger(type,[data])可以用来模拟触发自定义事件的触 ...