Keepalived结合Nginx或LVS实现高可用负载均衡
keepalived: 一种负载均衡高可用解决方案
文章目录
1. 概览
1.1. keepalived
是什么?
keepalived
是用C语言
编写的路由软件
。该项目的主要目的是为Linux系统或基于Linux的基础架构提供轻量的、可靠的负载均衡
和高可用
能力。
高可用(HA, High Available): 两个服务器节点启动着相同的服务,如果有一个故障,另一个自动接管,我们将将这个称之为高可用。
1.2. keepalived
解决了什么问题?
负载均衡是服务虚拟化的一个很好的解决方案。设计负载均衡结构时必须特别注意两个问题:
- 使用
健康检查
保证真实服务器的可用性:具有负载均衡能力的服务器,提供了全局的、高可用的虚拟服务。为了提高虚拟服务的可用性,我们通过使用健康检查机制来监视每个服务器节点。 - 使用
故障转移
保证负载均衡的可用性:在使用负载均衡调度时,我们会面临虚拟服务单点故障的问题。因此,还必须使用专门的路由协议实现故障转移来保证负载均衡调度的高可用性。
keepalived
引入强大而健壮的健康检查
机制,并找到故障转移
的解决方案,去解决上述两个问题。如果有一台服务器宕机,或工作出现故障,keepalived
将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后keepalived
自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
1.3. keepalived
是如何解决上述问题的?
keepalived
的健康检查(health-checks)
机制采用TCP连接请求、ICMP请求、HTTP请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活,保证真实服务的可用性。利用健康检查
机制,keepalived
可以根据服务器运行状态,自适应地维护和管理负载均衡的服务器池。
keepalived
的故障转移
方案基于VRRP
实现高可用性。故障转移
主要是应用于配置了主备模式的负载均衡器,利用VRRP
维持主备负载均衡器的心跳,当主负载均衡器出现问题时,由备负载均衡器承载对应的业务,从而在最大限度上减少流量损失,保证负载均衡的稳定性。此外,keepalived
还实现了一组VRRP
有限状态机的钩子,从而提供了轻量且高速的协议交互。为了提供最快的网络故障检测,keepalived
还采用了BFD协议,VRRP
可以通过BFD协议来驱动状态快速转换。 keepalived
框架可以独立使用,也可以作为弹性基础架构和其它框架一起配合使用。
故障转移(failover): 是一种备份操作模式,当主要组件由于失效或预定关机时间的原因而无法工作时,这种模式中的系统组件(比如处理机、服务器、网络或数据库)的功能被转接到备用组件。
VRRP(Virtual Router Redundancy Protocol): 虚拟路由冗余协议,解决局域网中配置静态网关出现单点失效现象的路由协议。
keepalived
工作在TCP/IP参考模型
的网际互连层、传输层、应用层:
-
网际互连层(Layer3):
keepalived
通过ICMP协议向服务器集群中的每一个节点发送一个ICMP数据包(有点类似于Ping
的功能),如果某个节点没有返回响应数据包,那么认为该节点发生了故障,keepalived
将报告这个节点失效,并从服务器集群中剔除故障节点。 -
传输层(Layer4):
keepalived
在传输层里利用了TCP协议的端口连接和扫描技术来判断集群节点的端口是否正常,比如对于常见的Web服务器80
端口、SSH服务22
端口,keepalived
一旦在传输层探测到这些端口号没有数据响应和数据返回,就认为这些端口发生异常,然后强制将这些端口所对应的节点从服务器集群中剔除掉。 -
应用层(Layer5/6/7):
keepalived
在应用层的运行方式全面化和复杂化,用户可以通过自定义keepalived
工作方式,例如:可以通过编写程序或者脚本来运行keepalived
,而keepalived
将根据用户的设定参数检测各种程序或者服务是否允许正常,如果keepalived
的检测结果和用户设定的不一致时,keepalived
将把对应的服务器从服务器集群中剔除。
2. 安装与配置
2.1. 安装
- CentOS的yum安装:
$ yum install keepalived
- 基于Linux的源码安装:
# 依赖库:gcc、openssl-devel、libnl、libnl-devel、libnfnetlink-devel
$ ./configure
$ make
$ make install
2.2. 默认配置
安装完成后,在/etc/keepalived
文件夹中,keepalived.conf
是keepalived
自动生成的默认配置文件,文件配置项说明如下:
! Configuration File for keepalived
global_defs { # 全局参数定义
notification_email { # 定义通告邮件用户地址
aaa@qq.com #接收邮件地址
aaa@qq.com
aaa@qq.com
}
notification_email_from aaa@qq.com # 定义发送邮件地址
smtp_server 192.168.200.1 #邮件服务器
smtp_connect_timeout 30 #连接超时
router_id LVS_DEVEL #当前路由设备ID
}
vrrp_script check_nginx { # 脚本定义
script "/etc/keepalived/check_keepalived.sh" # 脚本位置
interval 2 # 执行频率
weight -5 # 根据脚本返回值调整priority
}
vrrp_instance VI_1 { # 定义VRRP实例
state MASTER # 状态参数:MASTER/BACKUP(主/备)
interface ens33 # 虚拟IP放置的的网卡接口
virtual_router_id 51 #设置虚拟路由集群ID,同一个集群内的ID要一致
priority 100 # 优先级设置,数值越大优先级越高
advert_int 1 # 主备通讯时间间隔
nopreempt # 非抢占式
authentication { # 验证相关,同一组服务器配置需相同
auth_type PASS #PASS|AH
auth_pass 1111
}
virtual_ipaddress { # 虚拟IP地址
192.168.200.16
192.168.200.17
192.168.200.18
}
track_script {
check_nginx
}
}
virtual_server 192.168.1.201 80 { #虚拟服务器配置块
delay_loop 3 #轮询健康检查时间间隔
lb_algo rr #负载均衡算法,rr,wrr,lc.wlc.lblc,sh,dh,默认wlc
lb_kind DR #负载均衡模式,NAT,DR,TUN
protocol TCP #协议
sorry_server 127.0.0.1 8001 # 宕机反馈页,real_server宕机后跳转
real_server 192.168.1.107 80 { #真实服务器配置块
weight 1 #权重
HTTP_GET { #健康检测方式HTTP_GET,SSL_GET,TCP_CHECK,SMTP_CHECK,MISC_CHECK
url {
path / #请求主页信息,可以自定义一个页面,专用做健康检测
status_code 200 #判断健康反馈码
}
connect_timeout 3 #检测超时时长
nb_get_retry 3 #重试次数
delay_before_retry 3 #延时时间,三秒检测一次,失败后,延时三秒后再次检测,失败三次后,判断为下线状态
}
}
}
2.3. 抢占式与非抢占式
-
抢占式:
MASTER
从故障中恢复后,会将VIP
从BACKUP
节点中抢占过来。keepalived
组中服务器将状态state
分别配置为MASTER
、BACKUP
,但keepalived
启动后,优先级priority
配置高的先成为主服务器,拥有VIP
。 -
非抢占式:之前的
MASTER
从故障中恢复后,不抢占由BACKUP
升级为新的MASTER
后的VIP
。要设置非抢占式,除了增加nopreempt
选项外,keepalived
组中服务器要将状态state
都配置为BACKUP
,先启动keepalived
的服务器最先成为主服务器,拥有VIP
,与优先级priority
配置无关。
3. 用例:keepalived高可用+nginx负载均衡
3.1. 准备环境
-
4 * 虚拟机:
- 内存:1GB
- 处理器:1 * 2 Core
- 存储:20GB
- 操作系统:CentOS 7
-
虚拟机IP地址分配和作用如下表:
名称 | IP地址 | 作用 |
---|---|---|
ka1 | 192.168.248.128 | 基于nginx 静态资源托管的静态页面1(效果展示用) |
ka2 | 192.168.248.129 | 基于nginx 静态资源托管的静态页面2(效果展示用) |
ka3 | 192.168.248.130 | 基于nginx 的负载均衡器和keepalived 主服务器 |
ka4 | 192.168.248.131 | 基于nginx 的负载均衡器和keepalived 备服务器 |
- 注意事项:
# 关闭防火墙
$ systemctl stop firewalld
# 关闭selinux,重启生效
$ sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux
# 时间同步
$ ntpdate 0.centos.pool.ntp.org
# 允许组播
$ iptables -A INPUT -d 224.0.0.18 -j ACCEPT
3.2. 搭建静态页面和负载均衡器
- 安装
nginx
,四台虚拟机均需要安装:
$ yum install nginx
- 命令行输入
vi /usr/share/nginx/html/index.html
打开默认托管页面的html
文件,在页面中增加所在主机IP
信息,以区分托管服务的真实服务
<div id="content">
<!-- 标题处增加IP信息,ka1和ka2分别添加相应IP -->
<h1>Welcome to CentOS(192.168.248.129)</h1>
...
</div>
- 启动
nginx
:
$ systemctl start nginx
- 浏览器访问
ka1
(192.168.248.128)页面:
- 浏览器访问
ka2
(192.168.248.129)页面:
- 命令行输入
vi /etc/nginx/nginx.conf
打开nginx
默认配置文件,配置负载均衡:
# ka3、ka4配置保持一致
http {
...
# 增加负载均衡配置
upstream loadbalance {
server 192.168.248.128:80 weight=1 max_fails=3 fail_timeout=20s;
server 192.168.248.129:80 weight=1 max_fails=3 fail_timeout=20s;
}
server {
listen 80;
server_name localhost;
location / {
# 增加请求路由配置
proxy_pass http://loadbalance;
proxy_set_header Host $host:$proxy_port;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}
- 浏览器访问
ka3
、ka4
的IP
地址,确认192.168.248.130
、192.168.248.131
都能被负载均衡路由到192.168.248.128
、192.168.248.129
页面,以ka3
为例:
3.3. 配置并启动keepalived
- 命令行输入
vi /etc/keepalived/keepalived.conf
,修改配置文件,如下:
! Configuration File for keepalived
# ka3的state配置为MASTER,ka4配置为BACKUP
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.248.110/24 dev ens33 label ens33:1
}
}
- 分别在
ka3
、ka4
上输入以下命令启动keepalived
:
$ systemctl start keepalived
- 启动完毕后,在
ka3
上输入ip a
查看IP信息,可以看到虚拟IP
已漂移
到网口上:
[aaa@qq.com ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:a0:d4:6d brd ff:ff:ff:ff:ff:ff
inet 192.168.248.130/24 brd 192.168.248.255 scope global dynamic ens33
valid_lft 1139sec preferred_lft 1139sec
inet 192.168.248.110/24 scope global secondary ens33:1
valid_lft forever preferred_lft forever
inet6 fe80::41d7:702a:97de:24a1/64 scope link
valid_lft forever preferred_lft forever
- 浏览器访问虚拟IP地址
192.168.248.110
,可以路由到192.168.248.128
、192.168.248.129
页面:
- 关闭主服务器虚拟机
ka3
电源,在ka4
上输入ip a
查看IP信息,可以看到虚拟IP
已漂移
到网口上:
[aaa@qq.com ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:20:5b:61 brd ff:ff:ff:ff:ff:ff
inet 192.168.248.131/24 brd 192.168.248.255 scope global dynamic ens33
valid_lft 1532sec preferred_lft 1532sec
inet 192.168.248.110/24 scope global secondary ens33:1
valid_lft forever preferred_lft forever
inet6 fe80::b5bd:569f:3e1a:b773/64 scope link
valid_lft forever preferred_lft forever
- 浏览器访问
虚拟IP
地址192.168.248.110
,仍可以路由到192.168.248.128
、192.168.248.129
页面,至此,keepalived
高可用+nginx
负载均衡试验完毕!
4. 用例:keepalived
+LVS
高可用负载均衡
4.1. LVS
简介
LVS
部分术语定义:Real server: A real server hosts the application accessed by client requests.
Server pool: A farm of real servers.
Virtual server: The access point to a Server pool.
Virtual Service: A TCP/UDP service associated with the VIP.
VIP: The Virtual IP is the IP address that will be accessed by all the clients. The clients only access this IP address.
RIP: The IP address of real server.
Linux虚拟服务器(LVS, Linux Virtual Server)
是由章文嵩博士主导的开源Linux服务器集群系统,是中国国内最早出现的*软件项目之一,目前LVS
已经被集成到Linux内核模块中。
keepalived
依靠Linux虚拟服务器
的核心模块实现了OSI(Open System Interconnection,开放系统互联)模型
传输层的负载均衡能力。
三种工作模式:
- 基于
NAT
的LVS模式负载均衡:NAT(Network Address Translation)即网络地址转换,其作用是通过数据报头的修改,使得位于企业内部的私有IP地址可以访问外网,以及外部用用户可以访问位于公司内部的私有IP主机。 - 基于
TUN
的LVS负载均衡:我们知道,数据请求包往往远小于响应数据包的大小。因为响应数据包中包含有客户需要的具体数据,所以LVS(TUN)的思路就是将请求与响应数据分离,让调度器仅处理数据请求,而让真实服务器响应数据包直接返回给客户端。 - 基于
DR
的LVS负载均衡:DR(Dirct Routing)模式也叫直接路由模式,该模式中LVS依然仅承担数据的入站请求以及根据算法选出合理的真实服务器,最终由后端真实服务器负责将响应数据包发送返回给客户端。与隧道模式不同的是,DR模式要求调度器与后端服务器必须在同一个局域网内,这样客户端访问的是调度器的VIP地址,回应的源地址也依然是该VIP地址。
十种负载均衡调度算法:
- 轮询调度(Round Robin 简称’RR’)
- 加权轮询调度(Weight Round Robin 简称’WRR’)
- 最小连接调度(Least Connections 简称’LC’)
- 加权最少连接(Weight Least Connections 简称’WLC’)
- 基于局部的最少连接(Locality-Based Least Connections 简称’LBLC’)
- 带复制的基于局部性的最少连接(Locality-Based Least Connections with Replication 简称’LBLCR’)
- 目标地址散列调度(Destination Hashing 简称’DH’)
- 源地址散列调度(Source Hashing 简称’SH’)
- 最短的期望的延迟(Shortest Expected Delay 简称’SED’)
- 最少队列调度(Never Queue 简称’NQ’)
4.2. 准备环境
-
4 * 虚拟机:
- 内存:1GB
- 处理器:1 * 2 Core
- 存储:20GB
- 操作系统:CentOS 7
-
虚拟机IP地址分配和作用如下表:
名称 | IP地址 | 作用 |
---|---|---|
ka1 | 192.168.248.128 | 基于nginx 静态资源托管的静态页面1(效果展示用) |
ka2 | 192.168.248.129 | 基于nginx 静态资源托管的静态页面2(效果展示用) |
ka3 | 192.168.248.130 | 基于LVS 负载均衡配置的keepalived 主服务器 |
ka4 | 192.168.248.131 | 基于LVS 负载均衡配置的keepalived 备服务器 |
- 注意事项:
# 关闭防火墙
$ systemctl stop firewalld
# 关闭selinux,重启生效
$ sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux
# 时间同步
$ ntpdate 0.centos.pool.ntp.org
# 允许组播
$ iptables -A INPUT -d 224.0.0.18 -j ACCEPT
4.3. 配置真实服务器(Real Server)的虚拟IP(VIP)和ARP规则
- 命令行输入
ip a
查看IP初始信息:
[aaa@qq.com ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:22:d1:3d brd ff:ff:ff:ff:ff:ff
inet 192.168.248.129/24 brd 192.168.248.255 scope global dynamic ens33
valid_lft 1297sec preferred_lft 1297sec
inet6 fe80::dc21:6770:bc26:68ad/64 scope link
valid_lft forever preferred_lft forever
inet6 fe80::41d7:702a:97de:24a1/64 scope link tentative dadfailed
valid_lft forever preferred_lft forever
- 输入以下命令增加虚拟
IP
和路由:
$ ifconfig lo:0 192.168.248.200 netmask 255.255.255.255
$ route add -host 192.168.248.200 dev lo:0
- 修改
ARP
设置:
net.ipv4.conf.all.arp_ignore = 1 # 仅当ARP目标IP地址是传入接口上配置的本地地址时才回复
net.ipv4.conf.all.arp_announce = 2 # 始终为此ARP目标使用最佳的本地地址。 在这种模式下,我们将忽略IP数据包中的源地址,并尝试选择我们希望与目标主机进行对话的本地地址
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
ARP:Address Resolution Protocol,地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。
arp_ignore: INTEGER Define different modes for sending replies in response to received ARP requests that resolve local target IP addresses
arp_announce: INTEGER Define different restriction levels for announcing the local source IP address from IP packets in ARP requests sent on interface
- 命令行输入
ip a
查看修改后的IP信息:
[aaa@qq.com ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.248.200/32 scope global lo:0
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:22:d1:3d brd ff:ff:ff:ff:ff:ff
inet 192.168.248.129/24 brd 192.168.248.255 scope global dynamic ens33
valid_lft 1096sec preferred_lft 1096sec
inet6 fe80::dc21:6770:bc26:68ad/64 scope link
valid_lft forever preferred_lft forever
inet6 fe80::41d7:702a:97de:24a1/64 scope link tentative dadfailed
valid_lft forever preferred_lft forever
4.4. 配置主备服务器keepalived的LVS设置,测试:
- 命令行输入
vi /etc/keepalived/keepalived.conf
修改配置如下:
! Configuration File for keepalived
# ka3的state配置为MASTER,ka4配置为BACKUP
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.248.200/24 dev ens33 label ens33:1
}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.248.200 80 {
delay_loop 6 # 设置健康检查时间,单位是秒
lb_algo rr # 设置负载调度的算法为rr,可选参数有wrr,lc.wlc.lblc,sh,dh,默认wlc
lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
nat_mask 255.255.255.0
persistence_timeout 3 #指定时间内,同ip的请求会转发到同一个服务
protocol TCP
real_server 192.168.248.128 80 { # 指定real server1的IP地址
weight 3 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.248.129 80 { # 指定real server2的IP地址
weight 3 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
- 启动
ka1
、ka2
的nginx
,以显示静态页面:
$ systemctl start nginx
- 启动
ka3
、ka4
的keepalieved
,以启动高可用负载均衡:
$ systemctl start keepalived
- 查看主服务器的
IP
信息,虚拟IP地址192.168.248.200
已漂移
到该服务器:
[aaa@qq.com ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:20:5b:61 brd ff:ff:ff:ff:ff:ff
inet 192.168.248.130/24 brd 192.168.248.255 scope global dynamic ens33
valid_lft 1044sec preferred_lft 1044sec
inet 192.168.248.200/24 scope global secondary ens33:1
valid_lft forever preferred_lft forever
inet6 fe80::b5bd:569f:3e1a:b773/64 scope link tentative dadfailed
valid_lft forever preferred_lft forever
- 浏览器访问虚拟
IP
地址192.168.248.200
,可路由到192.168.248.128
、192.168.248.129
页面:
- 关闭主服务器虚拟机
ka3
电源,在ka4
上输入ip a
查看IP信息,可以看到虚拟IP
已漂移
到网口上:
[aaa@qq.com ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:20:5b:61 brd ff:ff:ff:ff:ff:ff
inet 192.168.248.131/24 brd 192.168.248.255 scope global dynamic ens33
valid_lft 1532sec preferred_lft 1532sec
inet 192.168.248.200/24 scope global secondary ens33:1
valid_lft forever preferred_lft forever
inet6 fe80::b5bd:569f:3e1a:b773/64 scope link
valid_lft forever preferred_lft forever
- 浏览器访问虚拟IP地址
192.168.248.200
,仍可以路由到192.168.248.128
、192.168.248.129
页面,至此,keepalived
+LVS
高可用负载均衡试验完毕!
4.5. LVS
管理工具ipvsadm
的使用:
- 安装
$ yum install ipvsadm -y
- 查看当前配置的虚拟服务和各个真实服务的权重:
[aaa@qq.com ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.248.200:80 rr
-> 192.168.248.128:80 Route 3 0 0
-> 192.168.248.129:80 Route 3 0 0
- 查看
IPVS
模块的转发情况统计:
[aaa@qq.com ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.248.200:80 3 18 0 3448 0
-> 192.168.248.128:80 1 13 0 3188 0
-> 192.168.248.129:80 2 5 0 260 0
- 查看
LVS
的超时时间
[aaa@qq.com ~]# ipvsadm -L --timeout
Timeout (tcp tcpfin udp): 900 120 300
[aaa@qq.com html]# ipvsadm --set 1 10 300
- 连接超时时间设置
TCP的连接超时时间
配置最好和keepalived
配置中的persistence_timeout
保持一致。
[aaa@qq.com ~]# ipvsadm --set 3 10 300
5. 故障排查
5.1. 脑裂现象
由于某些原因,导致两台keepalived
服务器在指定时间内,无法检测到对方存活心跳信息,从而导致互相抢占对方的资源和服务所有权,然而此时两台高可用服务器有都还存活。
可能出现的原因:
1、服务器网线松动等网络故障;
2、服务器硬件故障发生损坏现象而崩溃;
3、主备都开启了firewalld
防火墙。
解决方案(抢占式):在备节点服务器上运行脚本,如果可以
ping
通主节点服务器并且备节点服务器有VIP
就报警,让人员介入检查是否裂脑。
5.2. 高可用服务只针对物理服务器的问题
keepalived
软件仅仅在对方机器宕机或keepalived
停掉的时候才会接管业务。但在实际工作中,有业务服务停止而keepalived服务还在工作的情况,这就会导致用户访问的VIP
无法找到对应的服务的问题。
解决方案:
健康检查
配置增加真实服务端口检查策略。
5.3. 多组keepalived
服务器在一个局域网的冲突问题
keepalived
高可用功能是通过VRRP
实现的,VRRP
默认通过IP
多播的形式实现高可用对之间的通信,如果同一个局域网内存在多组keepalived
服务器,而又未使用专门的心跳线通信时,就会造成IP多播地址冲突问题,导致接管错乱,不同组的keepalived
都会使用默认的224.0.0.18
作为多播地址。
解决方案:在同组的
keepalived
服务器所有的配置文件里将vrrp_mcast_group
指定为独一无二的多播地址。
上一篇: 修改sqlserver的数据库名、物理名称和逻辑文件名
下一篇: MHA高可用配置及故障切换
推荐阅读
-
Keepalived结合Nginx或LVS实现高可用负载均衡
-
keepalived-nginx-apache-mysql实现高可用、负载均衡的网站(上) NginxKeepalived
-
Keepalived+HAProxy实现MySQL高可用负载均衡的配置
-
配置LVS + Keepalived高可用负载均衡集群之图文教程 博客分类: 网站架构
-
配置LVS + Keepalived高可用负载均衡集群之图文教程 博客分类: 网站架构
-
Ubuntu下LVS + Keepalived 实现MySQL高可用负载均衡实现
-
keepalived结合nginx实现nginx高可用的方法
-
lvs + keepalived + nginx 实现高可用
-
Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)
-
聊聊Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA) 的技术