1. 环境
master(centos7.4 192.168.253.226 mysql master)
slave (centos7.4 192.168.253.214 mysql slave )
keepalived 1.4.2
下载链接:wget http://www.keepalived.org/software/keepalived-1.4.2.tar.gz
2. keepalived原理(摘自搜索)
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
Keepalived采用是模块化设计,不同模块实现不同的功能;
keepalived主要有三个模块,分别是core、check和vrrp。
core:是keepalived的核心,负责主进程的启动和维护,全局配置文件的加载解析等
check:负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析;可基于脚本检查对IPVS后端服务器健康状况进行检查。
vrrp:VRRPD子进程,VRRPD子进程就是来实现VRRP协议的
keepalived配置文件:
Keepalived配置文件为:keepalived.conf;
主要有三个配置区域,分别是:全局配置(Global Configuration)、VRRPD配置、LVS配置
全局配置又包括两个子配置: 全局定义(global definition) 静态IP地址/路由配置(static ipaddress/routes)
Keepalived服务VRRP的工作原理:
Keepalived高可用对之间是通过 VRRP进行通信的, VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主宕机的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP广播包,告诉备它还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快;
3. 安装keepalived
tar -zxf keepalived-1.4.2.tar.gz
cd keepalived-1.4.2
./configure --prefix=/usr/local/keepalived #--prefix是指定安装目录
如果安装过程中报如下错误,可以执行yum -y install openssl-devel解决:
make && make install
修改配置文件:
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
vim /etc/keepalived/keepalived.conf #修改keepalived的配置文件
master上的配置文件:
10:57:47 root@master ~ → cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id master #标识信息,一个名字而已;
}
vrrp_script check {
script "/usr/local/keepalived/script/check_mysql.sh"
interval 10
}
vrrp_instance VI_1 {
state MASTER #角色是master,slave上的就是BACKUP
interface ens33 #vip 绑定端口,这个可以用ifconfig查看
virtual_router_id 50 #让master 和backup在同一个虚拟路由里,id 号必须相同;
priority 150 #优先级,谁的优先级高谁就是master ;
advert_int 1 #心跳间隔时间
authentication {
auth_type PASS #认证
auth_pass 1111 #密码
}
virtual_ipaddress {
192.168.253.10 #虚拟ip
}
}
slave上的配置文件:
[root@slave ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id slave
}
vrrp_script check {
script "/usr/local/keepalived/script/check_mysql.sh"
interval 10
}
vrrp_instance VI_1 {
state BACKUP #这个和master不一样
interface ens33
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.253.10
}
}
检测脚本都一样:
10:57:51 root@master ~ → cat "/usr/local/keepalived/script/check_mysql.sh"
#!/bin/bash
nginxpid=$(ps -C mysqld --no-header|wc -l)
if [ $nginxpid -eq 0 ];then
systemctl start mysqld.service
sleep 3
nginxpid=$(ps -C mysqld --no-header|wc -l)
if [ $nginxpid -eq 0 ];then
systemctl stop keepalived
fi
fi
keepalived加入开机自启动:
systemctl enable keepalived
启动keepalived:
systemctl star keepalived
从其他地方ping 192.168.253.10,发现可以ping通说明keepalived可以起来。
4. 测试keepalived是否正常工作
目前master和slave上都安装MySQL5.7,并且做了主从同步。
master的database:
在slave库中创建一个作为标识slave库的database,命名为slave_test,用以区别master和slave:
在master和salve上配置能登录MySQL数据库的账号test,密码是‘Qw123456@#’:
在第三方服务器上使用mysql -h 192.168.253.10 -utest -pQw123456@# 登录,成功后关掉master,然后发现MySQL连接会断开一会,过了一会后又恢复连接,这个时候就是keepalived生效,实现了故障自动转移。
5. keepalived是个比较简单的高可用方案,安装配置较为简单,合适新手学习使用。