21edqwq 发表于 2016-7-27 10:28:48

使用KeepAlived搭建MySQL高可用环境

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


[*]change master to

[*]master_host='192.168.1.70',

[*]master_port=3306,

[*]master_user='xx',

[*]master_password='xx';

然后使用start slave开启复制。

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

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


[*]! Configuration File for keepalived

[*]

[*]global_defs {


[*]    router_id HA_MySQL

[*]}

[*]

[*]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.1.199

[*]   }

[*]}

[*]

[*]virtual_server 192.168.1.199 3306 {

[*]   delay_loop 2

[*]   lb_algo wrr

[*]   lb_kind DR

[*]   persistence_timeout 60

[*]   protocol TCP

[*]   real_server 192.168.1.70 3306 {

[*]         weight 3

[*]         notify_down /root/shutdown.sh

[*]         TCP_CHECK {

[*]             connect_timeout 10

[*]             nb_get_retry 3

[*]             delay_before_retry 3

[*]             connect_port 3306

[*]         }

[*]   }

[*]}

然后编辑Slave的配置文件
vim /etc/keepalived/keepalived.conf

[*]! Configuration File for keepalived

[*]global_defs {

[*]   router_id HA_MySQL

[*]}

[*]

[*]vrrp_instance VI_1 {

[*]   state BACKUP

[*]   interface eth0

[*]   virtual_router_id 51

[*]   priority 90

[*]   advert_int 1

[*]   nopreempt

[*]   authentication {

[*]         auth_type PASS

[*]         auth_pass 1111

[*]   }

[*]   virtual_ipaddress {

[*]         192.168.1.199

[*]   }

[*]}

[*]

[*]virtual_server 192.168.1.199 3306 {

[*]   delay_loop 2

[*]   lb_algo wrr

[*]   lb_kind DR

[*]   persistence_timeout 60

[*]   protocol TCP

[*]   real_server 192.168.1.80 3306 {

[*]         weight 3

[*]         notify_down /root/shutdown.sh

[*]         TCP_CHECK {

[*]             connect_timeout 10

[*]             nb_get_retry 3

[*]             delay_before_retry 3

[*]             connect_port 3306

[*]         }

[*]   }

[*]}

其中
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 可以考虑加入邮件告警的功能。


[*]#!/bin/bash

[*]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之后,应该等待所有的中继日志应用完毕,否则可能丢失数据


页: [1]
查看完整版本: 使用KeepAlived搭建MySQL高可用环境