负载均衡以及高可用方案
  d3hP2dZyxSet 2023年11月02日 50 0

介绍

负载均衡(Server Load Balancer)是将访问流量根据转发策略分发到后端多台 ECS 的流量分发控制服

务。负载均衡可 以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用

性。 负载均衡主要有如下几个功能点:

负载均衡服务通过设置虚拟服务地址(IP),将位于同一地域(Region)的多台云服务器(Elastic

Compute Service,简称ECS)资源虚拟成一个高性能、高可用的应用服务池;根据应用指定的方

式,将来自客户端的网络请 求分发到云服务器池中。

负载均衡服务会检查云服务器池中ECS的健康状态,自动隔离异常状态的ECS,从而解决了单台ECS

的单点问题,同 时提高了应用的整体服务能力。在标准的负载均衡功能之外,负载均衡服务还具备

TCP与HTTP抗DDoS攻击的特 性,增强了应用服务器的防护能力。

负载均衡服务是ECS面向多机方案的一个配套服务,需要同ECS结合使用。


Nginx负载均衡

ngx_http_upstream_module模块

相关参数:

upstream:定义后端服务器组,会引入一个新的上下文

server:在upstream上下文中server成员,以及相关的参数

least_conn;:最少连接调度算法,当server拥有不同的权重时其为wlc

ip_hash;:源地址hash调度方法

hash :基于指定的key的hash表来实现对请求的调度,此处的key可以直接文本、变量或二者的组

keepalive connections;:为每个worker进程保留的空闲的长连接数量;

weight=number # 权重,默认为1;

max_fails=number # 失败尝试最大次数;超出此处指定的次数时,server将被标记为不可用;

fail_timeout=time # 设置将服务器标记为不可用状态的超时时长;

max_conns # 当前的服务器的最大并发连接数;

backup # 将服务器标记为“备用”,即所有服务器均不可用时此服务器才启用;

down # 标记为“不可用”

负载均衡算法

轮询(默认): 每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔

除故障系统,使 用户访问不受影响。

weight(轮询权值):weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均

衡的情况下。或 者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源

ip_hash:每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,

并且可以有效解决 动态网页存在的session共享问题。

fair:比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智

能地进行负载均 衡,也就是根据后端服务器的响应时间 来分配请求,响应时间短的优先分配。

Nginx本身不支持fair,如果需要这 种调度算法,则必须安装upstream_fair模块。

url_hash:按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步

提高后端缓存服 务器的效率。Nginx本身不支持url_hash,如果需要这种调度算法,则必须安装

Nginx的hash软件包。

七层负载均衡实验

node1作为反向代理服务器并配置七层代理 
node2和node3作为web站点
[root@node1 ~]# cat /etc/nginx/conf.d/proxy.conf
upstream websers{
server 192.168.10.20;
server 192.168.10.30;
}
server{
listen 8080;
server_name 172.16.0.10:8080;
location / {
proxy_pass http://websers;
}
}

四层负载均衡实验

# 默认没有安装四层负载均衡的模块,需要自己安装 
yum install nginx-mod-stream -y
[root@node1 ~]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
stream {
upstream sshsers{
server 192.168.10.20:22;
server 192.168.10.30:22;
least_conn;
}
server{
listen 172.16.0.10:22222;
proxy_pass sshsers;
}
}

七层负载均衡和四层负载均衡的区别:4 层负载均衡本质是转发,而 7 层负载本质是内容交换和代理

负载均衡以及高可用方案_服务器

参考网址:​https://blog.csdn.net/iKaChu/article/details/105977909

HAproxy负载均衡

介绍

HAProxy是一种免费的、非常快速且可靠的解决方案,它提供了高可用性、负载平衡和对TCP和基于http的应用程序的代理。它特别适用于非常高的流量网站,并为世界上访问量最大的网站提供了强大的力量。多年来,它已经成为事实上的标准的opensource负载平衡器,现在随大多数主流Linux发行版本一起发布,并且经常在云平台上默认部署。

项目地址:https://github.com/haproxy/haproxy

代理的作用:web缓存(加速)、反向代理、内容路由(根据流量及内容类型等将请求转发至特定服务器)、转码器(将后端服务器的内容压缩后传输给client端)。

缓存的作用:减少冗余内容传输;节省带宽、缓解网络瓶颈;降低了对原始服务器的请求压力,降低了传输延迟。

说明:对于http协议的反向代理,并不提供缓存功能。

负载均衡算法

1 roundrobin,表示简单的轮询,负载均衡基础算法

2 static-rr,表示根据权重

3 leastconn,表示最少连接者先处理

4 source,表示根据请求源IP

5 uri,表示根据请求的URI;

6 url_param,表示根据请求的URl参数来进行调度

7 hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

8 rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求

安装部署

[root@node1 ~]# yum install haproxy -y 
/etc/haproxy/haproxy.cfg # 主配置文件
/usr/lib/systemd/system/haproxy.service # 守护进程服务
默认配置:
cat /etc/haproxy/haproxy.cfg

负载均衡配置:

# cat /etc/haproxy/haproxy.cfg 
...
backend app
balance roundrobin
server app1 192.168.80.20:80 check
(七层负载均衡)

listen mysql_proxy
bind 0.0.0.0:3306
mode tcp
balance source
server mysqldb1 192.168.80.30:3306 check
(四层负载均衡

listen ssh_proxy
bind *:22222
mode tcp
balance roundrobin
server sshserver1 192.168.80.20:22 check
server sshserver2 192.168.80.30:22 check
(四层负载均衡)
注解:check的目的是防止某台服务器挂了之后,还会访问引起报错

LVS

介绍

LB集群原理:当用户的请求过来时,会直接分发到Director Server上,然后它把用户的请求根据设

置好的调度算 法,智能均衡地分发到后端真正服务器(real server)上,为了保证用户请求数据一

致,需要共享存储。

LVS(Linux Virtual Server)Linux虚拟服务器。这是一个由章文嵩博士发起的一个开源项目,并且已

经是 Linux 内核标准的一部分。

LVS架构从逻辑上可分为调度层、Server集群层和共享存储。

官方网是 http://www.linuxvirtualserver.org

组成

ipvs(ip virtual server):工作在内核空间,是真正生效实现调度的代码。

ipvsadm:工作在用户空间,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实 的服务器(Real Server)

负载均衡以及高可用方案_负载均衡_02

相关术语介绍

DS:Directory Server,前端负载均衡节点

RS:Real Server,后端真实工作服务器

VIP:用户请求目标的IP地址

DIP:内部主机通讯的IP地址

RIP:后端服务器的IP地址

CIP:客户端的IP地址

NAT模式

负载均衡以及高可用方案_负载均衡_03

工作原理概述:

数据包通过VIP找到LVS,其中携带者客户端的CIP和VIP,当到达LVS后,LVS通过DNAT目标的地址转换技术将VIP转换成RIP使其可以找到后端的服务,当数据包到达RS后,其不知道CIP的地址,一般不在统一网段,通过在RS上配置LVS的内部网关来找到LVS,通过LVS的源地址转换技术转换为将RIP转换为VIP发送给客户端

特点:

1. 访问请求、响应数据都要经过调度器

2. 调度器VIP与客户端要在同一网络中,调度器DIP与Realserver需要在另一个网络中

3. 所有Real server的网关要指向DIP,可以使DIP通过调度器传送给客户端

4. 后端Real server操作系统也可以是任意类型

5. 调度器需要启用路由转发功能,是VIP到DIP

DR模式

负载均衡以及高可用方案_负载均衡_04

工作原理概述:

客户端通过VIP进行访问LVS,到达LVS的是CIP和VIP 的数据包,LVS通过在该区域内通过ARP广播获取到后端RS的MAC地址,因此LVS必须和RS在同一网段,并通过调度算法将某个RS对应的MAC地址封装到CIP和VIP的数据包上,进而实现将数据包送达RS的目标,当数据包到达RS后,因为RS端配置了VIP 并启用了ARP抑制,因此数据包可以用过VIP和CIP 在数据包出去时直接和客户端进行对话,而不去要经过LVS调度器

特点:

1. 调度器、Realserver要在同一网络中

2. Realserver的网关要指向网络中的真实网关

3. 所有Real server要存在VIP且

arp_ignore:1    只响应针对物理网卡的ARP请求

arp_announce:2     以适当的IP地址响应数据

4. 后端Real server只能是linux

TUN模式

负载均衡以及高可用方案_服务器_05

工作原理概述:

数据包在客户端是CIP:VIP ,当到达LVS之后,通过在其外面封装数据包头来达到其可以到达RS的目的,当到达RS后,RS需要解封装数据包头,提取出VIP和CIP,此时RS上需要有VIP,且开启ARP抑制,如此才能使得客户端的数据包在不经过LVS的情况下顺利返回客户端。

特点:

1.RIP、VIP、DIP全是公网地址

2.RS的网关不会也不可能指向DIP

3.所有的请求报文经由Director Server,但响应报文必须不能进过Director Server

4.不支持端口映射 RS的系统必须支持隧道

LVS实验部署

LVS/NAT实践

环境准备

DIP:192.168.10.10/24 
VIP:172.16.0.10/16
RIP1:192.168.10.20 GATEWAY:192.168.10.10
RIP2:192.168.10.30 GATEWAY:192.168.10.10

DS部署

1.安装ipvsadm工具 
[root@node1 ~]# yum install ipvsadm -y
2.打开转发,配置nat
[root@node1 ~]# echo 1 >> /proc/sys/net/ipv4/ip_forward
[root@node1 ~]# iptables -t nat -F
[root@node1 ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ens37 -
j MASQUERADE
3.设置wrr策略和添加RS主机
[root@node1 ~]# ipvsadm -A -t 172.16.0.10:80 -s wrr
[root@node1 ~]# ipvsadm -a -t 172.16.0.10:80 -r 192.168.10.20:80 -m -w 1
[root@node1 ~]# ipvsadm -a -t 172.16.0.10:80 -r 192.168.10.30:80 -m -w 1
4.查看策略信息
[root@node1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.16.0.10:80 wrr
-> 192.168.10.20:80 Masq 1 0 0
-> 192.168.10.30:80 Masq 1 0 0

RS部署

# RS的网关必须指向DS 
[root@node2 ~]# echo "RS2" > /usr/share/nginx/html/index.html
[root@node3 ~]# echo "RS3" > /usr/share/nginx/html/index.html
[root@node1 ~]# curl 172.16.0.10
RS1
[root@node1 ~]# curl 172.16.0.10
RS2
注意:selinux策略和防火墙!

ipvsadm命令

ipvsadm: 
管理集群服务
添加:-A -t|u|f service-address [-s scheduler]
-t: TCP协议的集群
-u: UDP协议的集群
service-address: IP:PORT
-f: FWM: 防火墙标记
service-address: Mark Number
修改:-E
删除:-D -t|u|f service-address
管理集群服务中的RS
添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
-t|u|f service-address:事先定义好的某集群服务
-r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射;
[-g|i|m]: LVS类型
-g: DR模型
-i: TUN模型
-m: NAT模型
[-w weight]: 定义服务器权重
修改:-e
删除:-d -t|u|f service-address -r server-address
查看
-L|l
-n: 数字格式显示主机地址和端口
--stats:统计数据
--rate: 速率
--timeout: 显示tcp、tcpfin和udp的会话超时时长
-c: 显示当前的ipvs连接状况
删除所有集群服务
-C:清空ipvs规则
保存规则
-S
# ipvsadm -S > /path/to/somefile
载入此前的规则:
-R
# ipvsadm -R < /path/form/somefile

LVS/DR实践

环境准备

DIP:192.168.80.10/24 
RIP1:192.168.80.20
RIP2:192.168.80.30
VIP:192.168.80.100

DS部署

[root@node1 ~]# ifconfig ens33:0 192.168.80.100 broadcast 192.168.80.255 
netmask 255.255.255.0 up
[root@node1 ~]# route add -host 192.168.80.100 dev ens33:0
[root@node1 ~]# ipvsadm -A -t 192.168.80.100:80 -s wrr
[root@node1 ~]# ipvsadm -a -t 192.168.80.100:80 -r 192.168.80.20:80 -g -w 2
[root@node1 ~]# ipvsadm -a -t 192.168.80.100:80 -r 192.168.10.30:80 -g -w 1

RS部署

[root@node2 ~]# cat rs.sh 
#!/bin/bash
vip=192.168.80.100
ifconfig lo:0 $vip broadcast 192.168.80.255 netmask 255.255.255.255 up
route add -host $vip lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
在所有RS上部署!

调度算法

轮询调度

这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简 单。轮询算法假设 所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真 实服务器,不管后端 RS 配置和处理 能力,非常均衡地分发下去

加权轮询调度

这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多, 权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台 服务器添加要给权值,如果服务 器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务 器A的2倍。权值越高的服务器,处理的请求越多

目标地址hash

根据请求的目标IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可 用的且未超载, 将请求发送到该服务器,否则返回空。

源地址 hash

源地址散列”调度算法根据请求的源IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是 可用的且未超载,将请求发送到该服务器,否则返回空。

最少链接

这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求 就优先发给 RS1

加权最少链接

这个算法比 lc 多了一个权重的概念而已

最短延迟调度

在WLC基础上改进,Overhead = (ACTIVE+1)*256/加权,不再考虑非活动状态,把当前处于活动状 态的数目+1来 实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多缺 陷:当权限过大的时候,会倒 置空闲服务器一直处于无连接状态。

NQ永不排队/最少队列调度

无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个 主机很空间。在 SED基础上无论+几,第二次一定给下一个,保证不会有一个主机不会很空闲着,不考 虑非活动连接,才用NQ,SED要考 虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而httpd 的处于保持状态的服务就需要考虑非活动连接给服务 器的压力。

基于局部性的最少链接

基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根 据请求的目标IP 地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发 送到该服务器;若服务器不存在, 或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的 原则选出一个可用的服务器,将请求发送到该服务器。

带复制的基于局部性最少连接

带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。 它与LBLC算法的 不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个 目标IP地址到一台服务器的映射。该 算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按” 最小连接”原则从服务器组中选出一台服务器,若服务 器没有超载,将请求发送到该服务器;若服务器超 载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加 入到服务器组中,将请求发送到 该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删 除,以降低复 制的程度。

三大主流软件

企业中到底如何选择?

1.需要四层负载且高并发(3万以上),选LVS,否则就选nginx或haproxy

2.nginx有web服务及缓存功能及4和7层负载功能,且配置简单(常规选Nginx)

3.haproxy仅专注于负载均衡,在负载算法和健康检查等好于nginx,但不足以让普通用户选择。

LVS、nginx、haproxy的区别

LVS优点:

1.基于四层负载,并通过【转发】请求给后端节点实现负载功能。

5万并发,真正的5万并发。

2.内核级转发,效率极高。

3.四种负载模式NAT,DR,TUN,FULLNAT,

其中DR\TUN模式实现单臂路由及数据包返回用户,不在经过负载均衡器本身。4.DR模式是其常用负载模式。

5.更完善的高可用支持( keepalived) 。

LVS缺点:

1.只支持四层负载转发,不能实现基于URL7层转发能功能。2.最常用的DR模式不支持端口转换功能。

nginx和haproxy优点

1.基于四层负载,并通过【代理】代替用户请求后端节点实现负载功能。

2.负载服务器占用双倍连接,并且数据返回依然会经过负载均衡器(收费站模式)3.既可以实现四层负载还可以实现7层负载。

4.还可以实现web服务及缓存功能(haproxy仅专注于负载)5.nginx作为web和7层负载更流行

nginx和haproxy缺点:

1.效率及并发能力不如LVS。

2.nginx四层负载太新(近几年才开发出来。)

3.haproxy做负载更专业,但没有nginx在web上使用更流行

四层负载均衡和七层负载均衡

什么是四层负载均衡?

所谓四层就是osI模型的传输层,

主要是基于tcp/ip的负载均衡模式,即基于ip和端口的方式实现将请求转发至后端节点,只做简单的请求支持高并发。

四层负载均衡的常用场景

1)实现tcp协议的负载均衡

例:对后端服务MySQL从库、以及Redis等服务的负载。

纯粹基于四层的web应用无法满足当下的负载均衡需求,中小企业直接会选择基于7层的负载均衡模式(nginx proxy)。见数据库集群架构

2)四层+七层负载均衡架构

在web前端的7层负载均衡之前,架设四层负载均衡以实现大规模高并发集群架构访问。

四层负载均衡专注于tcp请求的转发,把更复杂的调度(例如:动静分离、业务分离、根据来源设备调度等)交给7层负载均衡处理。

四层负载均衡优缺点:

1)基于tcp/ip,即IP+端口的负载均衡

2)四层更快:特别是lvs负载均衡,在内核空间处理,不用走用户空间。处理速度更快3)四层适合大型站点,处于网站接入层最前端,结合四层+七层使用

(四层放在最前面专注做数据转发,后面可以用七层来继续处理更复杂的业务。一般是结合使用)

4))目前主要应用在后端tcp业务的负载,例如mysql,redis,k8s集群,数据库集群,应用服务器集群。

什么是七层负载均衡?

七层就是基于URL等应用层信息的负载均衡。从第七层"应用层"开始,根据虚拟的url或IP,主机名接收请求,再转向相应的处理服务器,一般用于做复杂的请求转发,例如:请求某个商品页、请求首页等等比较复杂的,业务可以分离的。

七层负载均衡优缺点:

1)基于应用层http/https的负载均衡,实现开源软件有nginx、haproxy、F5(硬件)2)七层功能更多:经内核空间进入用户空间的应用层进行转发。

3)可以实现更复杂的负载均衡控制,比如基于url、session、动静分离等。4)会占用更多的CPU、内存资源,承载的并发比四层更少。

5)七层适合中小站点web服务,只使用七层负载均衡

Keepalived

简介

Keepalived是Linux下一个轻量级别的高可用解决方案,Keepalived起初是为LVS设计的,专门用

来监控集群系统 中各个服务节点的状态,如果某个服务器节点出现故障,Keepalived将检测到后

自动将节点从集群系统中剔除。

后来Keepalived又加入了VRRP的功能,VRRP(VritrualRouterRedundancyProtocol,虚拟路由冗

余协议)出现的目 的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运

行,因此Keepalvied一方面具有服 务器状态检测和故障隔离功能,另外一方面也有HAcluster功

能。

健康检查和失败切换是keepalived的两大核心功能。所谓的健康检查,就是采用tcp三次握手,

icmp请求,http请 求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业

务的服务器)进行保活;而失败切换 主要是应用于配置了主备模式的负载均衡器,利用VRRP维持主

备负载均衡器的心跳,当主负载均衡器出现问题时, 由备负载均衡器承载对应的业务,从而在最大

限度上减少流量损失,并提供服务的稳定性。

VRRP协议(一主 + 多备,共用同一个IP地址,但优先级不同)

1 VRRP 虚拟冗余路由协议,解决静态路由的单点故障

2 通过竞选机制将路由任务交给某台VRRP路由器

3 VRRP采用多播IP 及224.0.0.18 实现高可用之间的通信

4 工作时主节点发包,当备节点接收不到数据包时,通过竞选backup上升为主节点。

5 VRRP 使用了加密数据,但keepalived 官方希望使用明文用户名和密码

6 keepalived 高可用是通过VRRP实现的,keepalive在服务时,只有主节点是接受资源的,备节点是停滞状态、。当主节点恢复时,备用节点将自动将数据交给主节点。

 keepalived 服务的三个重要功能

1 管理LVS负载均衡软件

2 实现对LVS集群节点的健康检查功能

3 作为系统网络服务的高可用功能

keeplived 实现高可用示意图

负载均衡以及高可用方案_服务器_06

安装部署:

yum install keepalived -y

keepalived配置详解

配置文件可以分为三块:
**全局定义块:**对整个 Keepalive 配置生效的,不管是否使用 LVS;

global_defs {
notification_email { #设置报警邮件地址即报警邮件接收者,可设置多个,每行一个;如果要开启邮件报警功能,需要开启本机的postfix或者sendmail服务;
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc #用于设置邮件的发送地址,即报警邮件发送者;
smtp_server 192.168.200.1 #用于设置邮件的SMTP Server地址
smtp_connect_timeout 30 #设置连接SMTP Server的超时时间;
router_id LVS_DEVEL #表示运行keepalived服务器的一个标识,是发邮件时显示在邮件主题中的信息
}

**VRRP实际定义块:**是keepalived的核心;

1、 vrrp_sync_group VRRP同步组

同步组是相对于多个VRRP实例而言的,在多个VRRP实例的环境中,每个VRRP实例所对应的网络环境会有所不同,假设一个实例处于网段A,另一个实例处于网段B,而如果VRRP只配置了A网段的检测,那么当B网段主机出现故障时,VRRP会认为自己仍处于正常状态,不会进行主备节点切换,这样问题就出现了。而同步组会将所有VRRP实例都加入同步组中,这样任何一个实例出现问题,都会导致keepalived进行主备切换;

以实例组group至少包含一个vrrp实例。

vrrp_sync_group G1 {#G1同步组包含VI_1,VI_2,VI_5三个VRRP实例,G2同步组包含VI_3,VI_4两个实例,这5个实例将在vrrp_instance段进行定义
group {
VI_1
VI_2
VI_5
}
notify_backup "/usr/local/bin/vrrp.bak arg1 arg2" #指定当keepalived进入MASTER状态时要执行的脚本,这个脚本可以是一个状态报警脚本,也可以是一个服务管理脚本,允许传入参数;
notify_master "/usr/local/bin/vrrp.mast arg1 arg2" #指定当keepalived进入BACKUP状态时要执行的脚本;
notify_fault "/usr/local/bin/vrrp.fault arg1 arg2" #指定当keepalived进入FAULT状态时要执行的脚本;
notify_stop "/usr/local/bin/vrrp.stop arg1 arg2" #指定当keepalived程序终止时需要执行的脚本;
}
vrrp_sync_group G2 {
group {
VI_3
VI_4
}
}

2、Vrrp实例vrrp_instance。VRRP实例配置即keepalived的高可用功能

VRRP实例段主要用来配置节点角色(主从),实例绑定端口,节点间验证机制,集群服务IP等,如:

vrrp_instance VI_1 { 
state MASTER #用于指定keepalived的角色,MASTER表示主服务器,BACKUP表示备用服务器;
interface eth0 #用于指定HA监测网络的接口;
virtual_router_id 51 #虚拟路由标识,是一个数字,同一个VRRP实例使用唯一的标识,即在同一个vrrp_instance下,MASTER和BACKUP必须是一致的;
priority 100 #节点优先级,数字越大优先级越高(在一个VRRP_instance下,MASTER的优先级必须大于BACKUP的优先级);
advert_int 1 #用于设定MASTER与BACKUP主机之间同步检查的时间间隔,单位秒
mcast_src_ip #于设置发送多播包的地址,若不设置,将使用绑定网卡对应的IP地址;
garp_master_delay 10 #用于设置在切换到MASTER状态后延时进行Gratuitous arp请求的时间;
track_interface { #用于设置一些额外的网络监控接口,其中任何一个接口出现故障,keepalived都会进入FAULT状态;
eth0
eth1
}
authentication {#用于设定节点间通信验证码类型和密码 ,主要类型有PASS和AH两种,在一个vrrp_instance下,MASTER和BACKUP必须使用相同的密码才能正常通信;
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {#用于设置虚拟IP地址(VIP),可设置多个,每行一个;keepalived通过ip address add命令的形式将VIP添加进系统中,而且IP形式可多样;
192.168.200.16
192.168.200.17 dev eth1
192.168.200.18 dev eth2
}
virtual_routers {#用来设置在切换时添加或删除相关路由信息;
src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
192.168.110.0/24 via 192.168.200.254 dev eth1
192.168.111.0/24 dev eth2
192.168.112.0/24 via 192.168.100.254
192.168.113.0/24 via 192.168.100.252 or 192.168.100.253
}
nopreempt #设置高可用集群不抢占功能;在使用不抢占时,只能在state状态为BACKUP的节点上设置,而且这个节点的优先级必须高于其他节点
preemtp_delay 300 #用于设置抢占的延时时间,单位秒,如系统启动或重启之后网络需要经过一段时间才能正常工作,这时进行主备切换是没有必要的,此选项就是来设置这种情况发生的时间间隔;
}

3、keepalived的LVS配置

LVS配置段以virtual_server为开始标识,此段分为两部分:real_server段和健康检测段

virtual_server 192.168.200.100 443 { #集群所使用的VIP和端口
delay_loop 6 #健康检查间隔,单位为秒
lb_algo rr #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh
nat_mask 255.255.255.0 #VIP掩码
lb_kind NAT #负载均衡转发规则。一般包括DR,NAT,TUN 3种
persistence_timeout 50 #会话保持时间,会话保持,就是把用户请求转发给同一个服务器,不然刚在1上提交完帐号密码,就跳转到另一台服务器2上了
protocol TCP #转发协议,有TCP和UDP两种,一般用TCP,没用过UDP
persistence_granularity <NETMASK> #lvs会话保持粒度

real_server 192.168.201.100 443 { #真实服务器,包括IP和端口号
weight 1 #默认为1,0为失效
inhibit_on_failure #在服务器健康检查失效时,将其设为0,而不是直接从ipvs中删除
notify_up <string> | <quoted-string> #在检测到server up后执行脚本
notify_down <string> | <quoted-string> #在检测到server down后执行脚本

TCP_CHECK { #通过tcpcheck判断RealServer的健康状态
connect_timeout 3 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
connect_port 23 健康检查的端口的端口
bindto <ip>
}

HTTP_GET | SSL_GET { #健康检测方式,可选有 SSL_GET、TCP_CHECK、HTTP_GET
url { #检查url,可以指定多个
path / #检查的url路径
digest ff20ad2481f97b1754ef3e12ecd3a9cc #需要检查到的内容。检查后的摘要信息。
status_code 200 #检查的返回状态码
}
url {
path /mrtg/
digest 9b3a0c85a887a256d6939da88aabd8cd
}
connect_timeout 3 #连接超时时间
nb_get_retry 3 #检测尝试几次
delay_before_retry 3 #检测的时间间隔
}
}
}


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  ehrZuhofWJiC   2024年05月17日   39   0   0 服务器linux
d3hP2dZyxSet