基于Keepalived实现LVS双主高可用集群
前言前面说过基于heartbeat的LVS高可用方案,今天带来另一种解决方案:基于Keepalived实现LVS双主高可用集群。什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了, 也就是所谓的高可用或热备,用来防止单点故障的发生。本文将详细讲述Keepalived工作原理及高可用解决方案的实现。
相关介绍
Keepalived简介
Keepalived采用VRRP(virtual router redundancy protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现linux服务器的多机热备功能。VRRP是针对路由器的一种备份解决方案——由多台路由器组成一个热备组。通过共用的虚拟IP地址对外提供服务;每个热备组内同一时刻只有一台主服务器提供服务,其他服务器处于冗余状态,若当前在线的服务器失败,其他服务器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。
工作原理
Keepalived组件介绍
core:keepalived的核心,复杂主进程的启动和维护,全局配置文件的加载解析等
check:负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析
vrrp:VRRP子进程,VRRP子进程就是来实现VRRP协议的
libip*:LVS相关
http://s3.运维网.com/wyfs02/M01/6E/8A/wKioL1V_oFXj-IgtAACUoeU32Uk238.gif
由图可知,两个子进程都被系统WatchDog看管,两个子进程各自负责自己的事,healthchecker子进程负责检查各自服务器的健康程度,例如HTTP,LVS等等,如果healthchecker子进程检查到MASTER上服务不可用了,就会通知本机上的VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态。
高可用解决方案
实验拓扑
http://s3.运维网.com/wyfs02/M01/6E/8F/wKioL1V_4wXzKIbEAAFaRuGMwlU686.jpg
配置过程
HA集群配置前提
时间同步、基于主机名互相通信、SSH互信
请确保两个节点时间同步,可用ntpdate向时间服务器同步
# ntpdate cn.pool.ntp.org 基于主机名互相通信
# vim /etc/hosts
172.16.10.123 node1.scholar.com node1
172.16.10.124 node2.scholar.com node2
# vim /etc/sysconfig/network
HOSTNAME=node1.scholar.com
# uname -n
node1.scholar.com
#两个节点都需如上操作 SSH互信
# ssh-keygen -t rsa -P ''
# ssh-copy-id -i .ssh/id_rsa.pub root@node2
# ssh-keygen -t rsa -P ''
# ssh-copy-id -i .ssh/id_rsa.pub root@node1
# date; ssh node2 'date' #测试
Tue Jun 16 13:31:39 CST 2015
Tue Jun 16 13:31:39 CST 2015 安装所需程序
# yum install keepalived -y
#两个节点都需安装 配置keepalived
# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 { #定义VRRP实例,实例名自定义
state MASTER #指定Keepalived的角色,MASTER为主服务器,BACKUP为备用服务器
interface eth0 #指定HA监测的接口
virtual_router_id 51 #虚拟路由标识(1-255),在一个VRRP实例中主备服务器ID必须一样
priority 100 #优先级,数字越大越优先,主服务器优先级必须高于备服务器
advert_int 1 #设置主备之间同步检查时间间隔,单位秒
authentication { #设置验证类型和密码
auth_type PASS #验证类型
auth_pass ab007 #设置验证密码,同一实例中主备密码要保持一致
}
virtual_ipaddress { #定义虚拟IP地址
192.168.12.23
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 61
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass sr200
}
virtual_ipaddress {
192.168.13.23
}
}
virtual_server 192.168.12.23 80 { #设置虚拟服务器
delay_loop 6 #设置健康状态检查时间
lb_algo rr #设置负载调度算法
lb_kind DR #设置LVS实现负载均衡的机制
nat_mask 255.255.255.0 #设置掩码
persistence_timeout 50 #会话保持时间
protocol TCP #指定转发协议类型
sorry_server 127.0.0.1 80 #设置应急服务器
real_server 172.16.10.125 80 { #后端服务器节点
weight 1 #设置服务节点的权重
HTTP_GET { #设置检测方式
url {
path /
status_code 200 #设定返回状态码为200表示Realserver存活
}
connect_timeout 2 #设置响应超时时间
nb_get_retry 3 #设置超时重试次数
delay_before_retry 1 #设置超时重试间隔
}
}
real_server 172.16.10.126 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 2
nb_get_retry 3
delay_before_retry 1
}
}
}
virtual_server 192.168.13.23 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
sorry_server 127.0.0.1 80
real_server 172.16.10.125 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 2
nb_get_retry 3
delay_before_retry 1
}
}
real_server 172.16.10.126 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 2
nb_get_retry 3
delay_before_retry 1
}
}
} 将配置文件同步给另一个节点
# scp /etc/keepalived/keepalived.conf node2:/etc/keepalived/
keepalived.conf 100% 2196 2.1KB/s 00:00 修改另一个节点配置文件
# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass ab007
}
virtual_ipaddress {
192.168.12.23
}
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 61
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass sr200
}
virtual_ipaddress {
192.168.13.23
}
}
#其他配置不变 Real Server配置
配置内核参数及VIP
http://s3.运维网.com/wyfs02/M02/6E/8E/wKioL1V_3QDD8_z2AAGja8oSVwM260.jpg
准备测试页面
http://s3.运维网.com/wyfs02/M00/6E/92/wKiom1V_2_zDUQjMAABlq1BSRog135.jpg
#两个RS节点都执行以上操作 测试页面
http://s3.运维网.com/wyfs02/M02/6E/8E/wKioL1V_3knw7NMsAABe5ZfHagA704.jpg
keepalived节点准备应急页面
http://s3.运维网.com/wyfs02/M01/6E/93/wKiom1V_3tGDY1w3AABbX2m87MA224.jpg
#两节点都需执行此操作 测试
启动keepalived
http://s3.运维网.com/wyfs02/M02/6E/93/wKiom1V_4hDQrbFTAABrvguRyWc873.jpg
查看两节点的ip和ipvs规则情况
http://s3.运维网.com/wyfs02/M01/6E/93/wKiom1V_4o7D8tT2AALE8Yvdzyw679.jpg
http://s3.运维网.com/wyfs02/M01/6E/93/wKiom1V_4uXgoHVUAALElLkr1us510.jpg
#两个节点各生成了两组规则,因为VIP只有一组,所以只有一组生效 访问测试
http://s3.运维网.com/wyfs02/M00/6E/93/wKiom1V_5W3ytb2RAACNkDzdVls362.jpg
http://s3.运维网.com/wyfs02/M01/6E/8F/wKioL1V_5y3iKwqoAACNjcpL5CQ079.jpg
http://s3.运维网.com/wyfs02/M02/6E/8F/wKioL1V_59aD84jqAACRGnQv-0k068.jpg
http://s3.运维网.com/wyfs02/M01/6E/93/wKiom1V_50DBlGrzAACTTCEdDtw075.jpg
模拟其中一个主节点故障
# service keepalived stop 再次查看两节点的ip和ipvs规则情况
http://s3.运维网.com/wyfs02/M02/6E/93/wKiom1V_6OXQiHalAAIQh1tToDQ703.jpg
http://s3.运维网.com/wyfs02/M01/6E/8F/wKioL1V_6qjgMK-1AALkiAmXecQ956.jpg
由此可见,一个主节点挂掉以后所有的VIP和ipvs规则都会转移到另一个节点,所以访问也不会受到任何影响,这里就不再测试。如果故障节点重新上线,资源还会再次回到工作节点。
下面我们模拟两个RS节点全部故障,看一下sorry_server是否可以工作
# service httpd stop
#两个RS全部停止服务 查看ipvs规则
http://s3.运维网.com/wyfs02/M02/6E/94/wKiom1V_6ozyHRXlAADpS-wYOX4829.jpg
real server已全部下线,应急服务器上线
http://s3.运维网.com/wyfs02/M00/6E/94/wKiom1V_68iiDdUnAACLex9DzBI745.jpg
http://s3.运维网.com/wyfs02/M01/6E/90/wKioL1V_7YagFSFqAACKPYnN4vw313.jpg
sorry_server响应成功,至此,基于Keepalived实现LVS双主高可用集群实验完成
The end
基于Keepalived实现LVS双主高可用解决方案就说到这里了,通过实验可以看出使用keepalived构建LVS群集更加简便易用,如果实验过程中遇到问题可留言交流。以上仅为个人学习整理,如有错漏,大神勿喷~~~
页:
[1]