mysql Keepalived 实践

Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived可以用来防止服务器单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,通过配合Nginx可以实现web前端服务的高可用。

Keepalived实现的基础是VRRP协议,Keepalived就是巧用VRRP协议来实现高可用性(HA)的.

VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个),而在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话就是MASTER,或者是通过算法选举产生,MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等;其他设备不拥有该IP,状态是BACKUP,除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能。

VRRP协议使用多播数据来传输VRRP数据,VRRP数据使用特殊的虚拟源MAC地址发送数据而不是自身网卡的MAC地址,VRRP运行时只有MASTER路由器定时发送VRRP通告信息,表示MASTER工作正常以及虚拟路由器IP(组),BACKUP只接收VRRP数据,不发送数据,如果一定时间内没有接收到MASTER的通告信息,各BACKUP将宣告自己成为MASTER,发送通告信息,重新进行MASTER选举状态。

1.解压源代码包(解压缩到 /usr/src/)
tar zxvf keepalived-1.2.18.tar.gz -C /usr/src/
2.源代码安装(在解压缩目录下)
(1)./configure
(2)make
(3)make install
3.用源代码包生成rpm包
(1)生成keepalived.spec文件及Makefile文件夹
./configure
(2)构建rpm包
rpmbuild ~
cp keepalived.spec ~/rpmbuild/SPECS/
cp keepalived-1.2.18.tar.gz ~/rpmbuild/SOURCES/
(3)进入 cd ~/rpmbuild/SPECS/ 目录
(4)编译源码并生成rpm包
rpmbuild -bb keepalived.spec
构建完成后在 /root/rpmbuild/RPMS/x86_64目录下可以找到
4.安装rpm包
rpm -ivh keepalived-1.2.18-5.x86_64.rpm

----------------搭建mysql HA----------------------
1.关闭防火墙
service iptables stop
2.将 SELinux 在 Enforcing 与 permissive 之间切换与查看(切换成permissive)
[root@www ~]# setenforce 0
[root@www ~]# getenforce Permissive
[root@www ~]# setenforce 1
[root@www ~]# getenforce Enforcing
3.配置好相应的mysql replication 后登陆mysql(a机器为 197 b机器为165)
A机器:
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'10.2.10.165' IDENTIFIED BY '123456';
flush privileges;
B机器:
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'10.2.10.197' IDENTIFIED BY '123456';
flush privileges;

4.配置同步
A机器:
CHANGE MASTER TO MASTER_HOST='10.2.10.165', MASTER_PORT=3306, MASTER_USER='slave',MASTER_PASSWORD='123456', master_auto_position=1;
start slave
B机器:
CHANGE MASTER TO MASTER_HOST='10.2.10.197', MASTER_PORT=3306, MASTER_USER='slave',MASTER_PASSWORD='123456', master_auto_position=1;
start slave

5.配置keepalived.conf 和 mysql.sh(在/etc/keepalived/目录下配置)
配置keepalived.conf

! Configuration File for keepalived

global_defs {
notification_email {
@qq.com #定义接受邮件的邮箱
}
notification_email_from root@localhost.localdomain #定义接受邮件的邮箱
smtp_server 127.0.0.1
smtp_connect_timeout
router_id LVS_DEVEL
} vrrp_instance VI_1 { #定义vrrptest实例
state BACKUP #服务器状态(主为MASTER,从为BACKUP) 一般都设置为BACKUP进行故障切换
interface eth0 #网络设备名称 可以使用ifconfig查看具体的配置
virtual_router_id #虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换(取值在0-255之间,用来区分多个instance的VRRP组播)
priority #服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER
nopreempt #设置此参数当优先级最的服务宕机重启之后不会抢夺当前主服务其的控制权
advert_int #服务器之间的存活检查时间
authentication {
auth_type PASS #认证类型
auth_pass #认证密码,一组lvs 服务器的认证密码必须一致
}
virtual_ipaddress { #虚拟IP地址
10.2.10.241
}
} virtual_server 10.2.10.241 { #定义虚拟服务器
delay_loop #每个6秒检查一次real_server状态
lb_algo wrr #LVS算法
lb_kind DR #LVS模式
nat_mask 255.255.255.0
persistence_timeout #会话保持时间
protocol TCP real_server 10.2.10.197 { #真实的服务器地址
weight
notify_down /etc/keepalived/mysql.sh #检测到服务down后执行的脚本kill keepalived
TCP_CHECK {
connect_timeout #连接超时时间
bingto 10.2.10.241
nb_get_retry #重连次数
delay_before_retry #重连间隔时间
connect_port #健康检测端口
} }
}

配置mysql.sh
#!/bin/bash
pkill keepalived
6.mysql.sh 增加执行权限
chmod +x mysql.sh
7.在两台机器启动 keepalived 服务
/etc/init.d/keepalived start
8.查看启动日志
less /var/log/messages

shift+g 跳到最后一行

9.tcpdump抓取网络包,看是否正常
tcpdump

10.监控虚拟ip

    ip addr list

------------------------最终检测---------------------
1.使用PS命令检测服务运行状态
a.ps -ef|grep keepalived
b.ps -ef|grep mysql
2.查看系统日志,确定keepalived运行正确
a. less /var/log/messages
b. 或者 tail -f /var/log/messages
3.注意!服务启动顺序。先启动mysql后启动keepalived

------------------------测试方式---------------------
1.使用ping命令持续检测vip连通情况
2.关闭主节点上的mysql服务
3.观察主节点上的keepalived进程
4.观察VIP的ping结果
5.观察在切换后能否正常访问数据库

--------------------使用第三台测试机器进行测试---------------------

1.创建用于测试的数据库帐号在主被机器上
   grant all on world.* to test1@10.2.10.136 identified by 'test1';
   flush privileges;

2.在测试机器上
   mysql -h 10.2.10.241-utest1 -ptest1

3.在主机上模拟故障

停掉mysql服务

上一篇:C#中数组Array、ArrayList、泛型List的比较


下一篇:[C++ Primer Plus] 第4章、复合类型(一)程序清单——指针new和delete