使用KeepAlived搭建MySQL的高可用环境。
首先搭建MySQL的主从复制
在Master开启binlog,创建复制帐号,
然后在Slave输入命令

 
2016年7月25日
  配置安装技巧:
  1,使用yum install 安装keepAlived  
  2,安装完后,配置/etc/keepalived/keepalived.conf配置文件,一开始配置名字取错了,老有问题
  3,配置keepalived.conf好后要/root/shutdown.sh配置shell脚本,配置关闭本机的keepalived让其切换虚拟IP,不关闭keepalived
       不会切换IP
        service  keepalived stop

  1. change master to
  2. master_host='192.168.1.70',
  3. master_port=3306,
  4. master_user='xx',
  5. master_password='xx';

然后使用start slave开启复制。

然后编译安装KeepAlived
进入keepalived-1.2.12目录
然后使用
./configure
make && make install

然后在Master服务器编辑KeepAlived的配置文件
vim /etc/keepalived/keepalived.conf

global_defs {
router_id HA_MySQL
} vrrp_script check_mysql { ######定义监控mysql的脚本
script "/root/check_mysql.sh"
interval ######监控时间间隔
weight ######负载参数 }
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id
priority
advert_int
nopreempt
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.113.215
}
} track_script { ######执行监控mysql进程的脚本
check_mysql
} virtual_server 192.168.113.215 {
delay_loop
lb_algo wrr
lb_kind DR
persistence_timeout
protocol TCP
real_server 192.168.113.145 {
weight
notify_down /root/shutdown.sh
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
}
}
然后编辑Slave的配置文件
vim /etc/keepalived/keepalived.conf
global_defs {
router_id HA_MySQL
} vrrp_script check_mysql { ######定义监控mysql的脚本
script "/root/check_mysql.sh"
interval 2 ######监控时间间隔
weight 2 ######负载参数 }
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.113.215
}
} track_script { ######执行监控mysql进程的脚本
check_mysql
} virtual_server 192.168.113.215 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.113.142 3306 {
weight 3
notify_down /root/shutdown.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}

 check_mysql.sh

MYSQL=/usr/local/mysql/bin/mysql
MYSQL_HOST=localhost
MYSQL_USER=root
MYSQL_PASSWORD=cc.123 $MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD -e "show status;" >/dev/null 2>&1
#$mysqlclient --host=$host --port=$port --user=$user --password=$password -e "show databases;" > /dev/null 2>&1
if [ $? == 0 ]
then
echo " $host mysql login successfully "
exit 0
else
#echo " $host mysql login faild"
/etc/init.d/keepalived stop
exit 2
fi

 shutdown.sh

#!/bin/bash
#pkill keepalived
service keepalived stop

  

其中
priority                      表示优先级
virtual_ipaddress      虚拟的IP地址(VIP)
delay_loop                每个2秒检查一次real_server状态
notify_down              检测到服务down后执行的脚本 
connect_timeout      连接超时时间
nb_get_retry             重连次数
delay_before_retry   重连间隔时间
connect_port            健康检查端口

shutdown.sh 可以考虑加入邮件告警的功能。

  1. #!/bin/bash
  2. pkill keepalived

在两个服务器上启动MySQL和KeepAlived服务
service mysql start
service keepalived start

Master的server_id为1
Slave的server_id为2

然后 连接VIP的MySQL,可以看到已经连接到了Master服务器(server_id为1)

如果kill掉Master的MySQL,KeepAlived会自动转移到Slave

在Master服务器上执行
killall mysqld

然后再次查看server_id,
短暂的失去连接之后,再次连接上VIP,server_id已经变为2,说明VIP已经指向了Slave

nopreempt参数表示Master恢复正常之后,是否将VIP继续指向Master
这样的话,会再次引发切换。

两台服务器的KeepAlived会有心跳检测,
如果Master的MySQL服务挂了(3306端口挂了),那么他会选择自杀.
Slave的KeepAlived通过心跳检测发现这个情况,就会将VIP的请求接管。

KeepAlived还有很多参数没有明白是什么意思
生产环境的切换脚本,在Slave提升为Master之后,应该等待所有的中继日志应用完毕,否则可能丢失数据

 
 配置备注:
     virtual_router_id 51   这个51在局域网里不要重复
     配置过程的文本,不能少{},关键字也不能少,不然配置不成功,错误信息也没有错误提示
    这里的eth0 是网卡名称,如果提示找不到,需要通过 IP addr 查看,改成对应的名称

使用KeepAlived搭建MySQL高可用环境的更多相关文章

  1. 基于keepalived搭建MySQL高可用集群

    MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...

  2. Haproxy+Keepalived搭建Weblogic高可用负载均衡集群

    配置环境说明: KVM虚拟机配置 用途 数量 IP地址 机器名 虚拟IP地址 硬件 内存3G  系统盘20G cpu 4核 Haproxy keepalived 2台 192.168.1.10 192 ...

  3. LVS+Keepalived搭建MyCAT高可用负载均衡集群

    LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...

  4. 搭建MySQL高可用负载均衡集群

    1.简介 使用MySQL时随着时间的增长,用户量以及数据量的逐渐增加,访问量更是剧增,最终将会使MySQL达到某个瓶颈,那么MySQL的性能将会大大降低.这一结果也不利于软件的推广. 那么如何跨过这个 ...

  5. 搭建MySQL高可用负载均衡集群(转)

    阅读目录 1.简介 2.基本环境 3.配置MySQL主主复制 4.中间件简述 4.1.Haproxy介绍 4.2.keepalived介绍 5.中间件的安装与配置(haproxy.keepalived ...

  6. [转]搭建MySQL高可用负载均衡集群

    转自:http://www.cnblogs.com/phpstudy2015-6/p/6706465.html 阅读目录 1.简介 2.基本环境 3.配置MySQL主主复制 4.中间件简述 4.1.H ...

  7. 基于Keepalived的MySQL高可用

    keepalived负责的是故障转移,至于故障转以后的节点之间数据的一致性问题依赖于具体的复制模式.不管是主从.一主多从还是双主.集群节点个数.主从具体的模式无关(常规复制,半同步复制,GTID复制, ...

  8. 涂抹mysql笔记-搭建mysql高可用体系

    mysql的高可用体系<>追求更高稳定性的服务体系 可扩展性:横向扩展(增加节点).纵向扩展(增加节点的硬件配置) 高可用性<>Slave+LVS+Keepalived实现高可 ...

  9. 基于PXC的MySQL高可用环境简单部署

    PXC简介 Percona XtraDB Cluster(简称PXC集群)提供了MySQL高可用的一种实现方法. 1.集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上. 2.每个节 ...

随机推荐

  1. 机器学习--Classifier comparison

    最近在学习机器学习,学习和积累和一些关于机器学习的算法,今天介绍一种机器学习里面各种分类算法的比较 #!/usr/bin/python # -*- coding: utf-8 -*- "&q ...

  2. SVN-修改已提交的日志

    前提:服务器是Windows下的VisualSVN Server 1.在库的属性页面的Hooks选项卡下找到Pre-revision property change hook,2.双击修改其内容,具体 ...

  3. 对于.h文件和.c文件

    C语言中.h文件和.c文件详细解析_云止水_新浪博客http://blog.sina.com.cn/s/blog_73006d600102wcx5.html

  4. 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  5. crc循环冗余校验

    循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误.它 ...

  6. 使用新浪云 Java 环境搭建一个简单的微信处理后台

    前一段时间,写了一篇在新浪云上搭建自己的网站的教程,通过简单构建了一个 maven 的项目,展示部署的整个流程,具体的操作可以参看这里. 新浪云服务器除了可以搭建自己的网站以外,也非常的适合作为微信公 ...

  7. Web项目中删错文件怎么办

    在开发过程中,有时会因为手误将文件错误删除,会造成很大的困惑,今天看到一个网友分享的一种可以恢复文件的方式特别好用,现在分享给大家. 1.首先在删除文件的路径下创建与原来文件名字相同的文件. 2.在文 ...

  8. position与z-index的关系

    .simulationgame .gameranking .rankinginfo{ width:140px; margin:0 auto; font-family:Arial, Microsoft ...

  9. VS2010+C#+在新建类或接口时在文件开头自动生成作者和日期等备注

    今天在公司项目准备开始,为达到项目的规范管理,要求每个文件的标准日期,作者等信息,搜集了百度的资料,新建文件时效果如下: 其实原理很简单,只要修改VS,IDE文件下的类(或接口)模版代码 文件路径:C ...

  10. Dapper关联查询

    1.一对一: using (IDbConnection connecton = new MySqlConnection(ConfigurationManager.ConnectionStrings[& ...