目录
一. 集群概述
1.1 集群的定义
集群(Cluster) 是指将多台计算机或服务器通过某种方式连接在一起,作为一个整体来提供服务或执行任务的技术架构。
1.2 集群的分类
1. 高可用集群 HA
目标:确保服务的高可用性,减少停机时间。
实现方式:通过冗余节点和故障转移机制,当主节点故障时,备用节点立即接管服务。
例如:Keepalived、heartbeat
2. 高性能运输群集 HPC
目标:通过并行计算解决复杂的科学计算或数据处理任务
实现方式:将任务分解为多个子任务,分配到多个节点并行执行。
3.负载均衡群集 LB
目标:将请求或任务均匀分配到多个节点,提高系统性能和资源利用率。
实现方式:通过负载均衡器(如LVS、Nginx、HAProxy)将请求分发到后端服务器。
例如:LVS、Nginx
4. 分布式存储集群
目标:提供高可用、可扩展的存储服务。
实现方式:将数据分布到多个节点存储,并通过冗余机制确保数据安全。
二. LVS概述
2.1 LVS的定义
LVS(Linux Virtual Server) 是一种基于 Linux 内核的高性能、高可用的负载均衡技术,用于将客户端请求分发到多个后端服务器节点,以提高系统的处理能力和可用性。
2.2 LVS的工作原理
客户端发起请求:
- 客户端通过访问 LVS 的虚拟 IP(VIP)发起请求。
负载均衡器接收请求:
- 负载均衡器接收客户端的请求,并根据预定义的调度算法选择一个后端服务器节点。
请求分发:
- 负载均衡器将请求转发到选定的后端服务器节点。
- 转发方式取决于 LVS 的工作模式(NAT、DR 或 TUN)。
后端服务器处理请求:
- 后端服务器节点处理请求并生成响应。
响应返回客户端:
- 后端服务器将响应返回给客户端。
- 返回方式取决于 LVS 的工作模式(NAT、DR 或 TUN)。
2.3 LVS 的三种工作模式
1. NAT 模式
工作原理:
客户端发送请求到 LVS 的虚拟 IP(VIP)。
负载均衡器将请求的源 IP 地址修改为自身的 IP 地址,并将请求转发到后端服务器。
后端服务器处理请求,并将响应返回给负载均衡器。
负载均衡器将响应的目标 IP 地址修改为客户端的 IP 地址,并将响应返回给客户端
2. DR 模式
工作原理:
客户端发送请求到 LVS 的虚拟 IP(VIP)。
负载均衡器将请求直接转发到后端服务器,不修改 IP 地址。
后端服务器处理请求,并直接将响应返回给客户端。
3. TUN 模式
- 工作原理:
- 客户端发送请求到 LVS 的虚拟 IP(VIP)。
- 负载均衡器通过 IP 隧道将请求封装并转发到后端服务器。
- 后端服务器解封装请求,处理请求,并直接将响应返回给客户端。
2.4 LVS 三种工作模式的对比
NAT | TUN | DR | |
优点 | 端口转换 | WAN | 性能最好 |
缺点 | 性能瓶颈 | 服务器支持隧道模式 | 不支持跨网段 |
真实服务器要求 | any | Tunneling | Non-arp device |
支持网络 | private(私网) | LAN/WAN(私网/公网) | LAN(私网) |
真实服务器数量 | low (10~20) | High (100) | High (100) |
真实服务器网关 | lvs内网地址 | Own router(网工定义) | Own router(网工定义) |
2.5 LVS 调度算法
分为两种:
静态方法: 不管后端真实服务器的 状态,根据自身 算法进行调度
动态方法: 会根据后端服务器的状态来进行调度
1. 静态方法
轮询(RR):将请求依次分发到每个后端服务器节点。
加权轮询(WRR):根据后端服务器的权重分发请求,权重越高,分配的请求越多
源地址哈希(SH):根据客户端的源 IP 地址哈希值分发请求,确保同一客户端的请求被分发到同一台后端服务器。
目标地址哈希(DH):通过让后端服务器直接响应客户端请求来优化性能和简化配置。
2. 动态方法
最小连接数(LC):将请求分发到当前连接数最少的后端服务器节点。
加权最小连接数(WLC):根据后端服务器的权重和连接数分发请求。
预期延迟最短(SED):选择预期延迟最短的后端服务器来处理请求。
空闲(NQ):优先选择 空闲 的后端服务器,如果没有空闲服务器,则退化为 SED 算法。
基于地址的最小连接数(LBLC):基于 请求的源地址 和 后端服务器的活动连接数 进行分发,确保同一客户端的请求被分发到同一台后端服务器。
三. LVS集群创建与管理
3.1 LVS集群类型中的术语
VS(代理服务器):Virtual Server,Director Server(DS), Dispatcher(调度器),Load Balancer(lvs服务器) 代理服务器
RS(真实服务器):Real Server(lvs), upstream server(nginx), backend server(haproxy)(真实服务器)
CIP:Client IP(客户机IP) 客户机的ip
VIP:Virtual serve IP VS外网的IP 代理服务器的 外网ip
DIP:Director IP VS内网的IP 代理服务器的 内网ip
RIP:Real server IP 真实服务器的 ip地址
3.2 ipvsadm工具
LVS集群通过ipvsadm工具创建管理
3.2.1 ipvsadm工具选项
-A: 添加虚拟服务器
-D: 删除整个虚拟服务器
-s: 指定负载调度算法(轮询: rr、加权轮询: wrr、最少连接: lc、加权最少连接: wlc 默认的 )
-a: 添加真实服务器(节点服务器)
-d: 删除某一个节点
-t: 指定VIP地址及TCP端口
-r: 指定RIP地址及TCP端口
-m: 表示使用NAT群集模式
-g: 表示使用DR模式
-i: 表示使用TUN模式
-w: 设置权重(权重为0时表示暂停节点)
-p 60: 表示保持长连接60秒
-l: 列表查看 LVS虚拟服务器(默认为查看所有)
-n: 以数字形式显示地址、端口等信息,常与"-l“选项组合使用。ipvsadm -ln
3.2.2 常见操作
1. 列出规则
ipvsadm -L
2. 建立集群
格式:
ipvsadm -A -t <虚拟IP>:<端口> -s <调度算法>
例子:
ipvsadm -A -t 192.168.91.188:80 -s rr
3. 添加后端服务器
格式:
ipvsadm -a -t <虚拟IP>:<端口> -r <后端服务器IP>:<端口> -g -w <权重>
例子:
ipvsadm -a -t 192.168.91.188:80 -r 192.168.91.100:80 -g
4. 删除后端服务器
格式:
ipvsadm -d -t <虚拟IP>:<端口> -r <后端服务器IP>:<端口>
例子:
ipvsadm -d -t 192.168.91.188:80 -r 192.168.91.100:80
5. 删除集群
格式:
ipvsadm -D -t <虚拟IP>:<端口>
例子:
ipvsadm -D -t 192.168.91.188:80
四. DR模式部署
4.1 配置负载调度器
ubuntu 调度器配置
1.更新系统并安装 ipvsadm
apt update
apt install ipvsadm -y
2.添加虚拟IP(VIP)
ifconfig ens33:0 192.168.52.188/24
3.配置LVS规则
添加虚拟服务器(VIP)并设置调度算法为轮询(rr):
ipvsadm -A -t 192.168.52.188:80 -s rr
添加真实服务器(RIP):
ipvsadm -a -t 192.168.52.188:80 -r 192.168.52.100:80 -g
ipvsadm -a -t 192.168.52.188:80 -r 192.168.52.101:80 -g
4.修改内核参数:
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
使配置生效:
sudo sysctl -p
4.2 配置节点服务器
centos7-13真实服务器1配置
1.安装Nginx:
sudo yum install epel-release -y
sudo yum install nginx -y
sudo systemctl start nginx
2.设置测试页面
echo "7-13" > /usr/share/nginx/html/index.html
3.修改内核参数
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
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
4.添加虚拟IP(VIP)
ifconfig ens33:0 192.168.52.188/24
centos7-14 真实服务器2配置
yum install epel-release -y
yum install nginx -y
systemctl start nginx
"7-14" > /usr/share/nginx/html/index.html
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
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
sysctl -p
ifconfig ens33:0 192.168.52.188/24
测试
在集群外的新机器上测试:
curl 192.168.52.188
多次执行 curl 命令,观察返回的内容是否在 7-13 和 7-14 之间轮换。
五. keepalive概述
5.1 vrrp技术
VRRP 是一种用于实现 路由器高可用性的网络协议。它通过将多个路由器组成一个虚拟路由器组,并分配一个虚拟 IP 地址(VIP),确保在主路由器故障时,备用路由器能够接管流量,从而实现网络服务的连续性。
5.1.2 vrrp相关术语
虚拟路由器(Virtual Router):由多个物理路由器组成的一个逻辑路由器。
虚拟 IP 地址(VIP):虚拟路由器对外提供的 IP 地址,客户端通过该 IP 地址访问网络服务。
主路由器(Master Router):在虚拟路由器组中,负责转发流量的路由器,持有虚拟 IP 地址。
备用路由器(Backup Router):在主路由器故障时,接管流量并成为新的主路由器,平时处于监听状态,不转发流量。
优先级(Priority):用于选举主路由器的参数,优先级越高,越有可能成为主路由器。
5.2 keepalive的定义
Keepalived 是一个用于实现 高可用性和负载均衡的开源软件。它基于 VRRP(Virtual Router Redundancy Protocol) 协议,通过虚拟 IP(VIP)的切换来确保服务的连续性,同时可以与 LVS(Linux Virtual Server) 集成,提供负载均衡功能。
5.3 keepalive的功能
基于vrrp协议完成地址流动
为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
为ipvs集群的各RS做健康状态检测
基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务
5.4 keepalive架构
vrrp stack:VIP消息通告 虚拟ip
checkers:监测real server(简单来说 就是监控后端真实服务器的服务)是否存活
system call:实现 vrrp 协议状态转换时调用脚本的功能
SMTP:邮件组件(报警邮件)
IPVS wrapper:生成IPVS规则(直接生成ipvsadm)
Netlink Reflector:监控网络接口状态变化
WatchDog:监控进程(整个架构是否有问题)
六. 安装keepalive
6.1 centos7-yum安装
yum install keepalived -y
vim /etc/keepalived/keepalived.conf
#修改 interface eth0 为
interface ens33
systemctl start keepalived.service
systemctl status keepalived.service
6.2 Ubuntu-apt安装
apt update
apt install keepalived -y
cp /usr/share/doc/keepalived/samples/keepalived.conf.sample /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
#修改interface eth0为
interface ens33
systemctl start keepalived
systemctl status keepalived
6.3 centos7-编译安装
yum install gcc curl openssl-devel libnl3-devel net-snmp-devel -y
# 安装依赖包环境
https://keepalived.org/download.html
# 官网下载安装包
mkdir -p /data/
cd /data/
wget https://keepalived.org/software/keepalived-2.2.2.tar.gz
tar xf keepalived-2.2.2.tar.gz
cd keepalived-2.2.2/
./configure --prefix=/usr/local/keepalived
make && make install
#编译好后起不来没有配置文件/etc/keepalived/keepalived.conf
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
sed -i 's/eth0/ens33/' /etc/keepalived/keepalived.conf
systemctl start keepalived
systemctl status keepalived
6.4 Ubuntu-编译安装
ubuntu尽可能安装比较新的keepalive安装包
cd /opt
apt update && apt -y install make gcc ipvsadm build-essential pkg-config automake autoconf libipset-dev libnl-3-dev libnl-genl-3-dev libssl-dev libxtables-dev libip4tc-dev libip6tc-dev libmagic-dev libsnmp-dev libglib2.0-dev libpcre2-dev libnftnl-dev libmnl-dev libsystemd-dev
https://keepalived.org/download.html
# 官网下载安装包
wget https://keepalived.org/software/keepalived-2.3.3.tar.gz
tar xf keepalived-2.3.3.tar.gz
cd keepalived-2.3.3/
./configure --prefix=/usr/local/keepalived
make -j2 && make install
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
#interface ent0改为
interface ens33
systemctl start keepalived
systemctl status keepalived
七. keepalived的相关文件
软件包名:keepalived
主程序文件:/usr/sbin/keepalived
主配置文件:/etc/keepalived/keepalived.conf
7.1 配置组成
7.1.1 全局配置
global_defs {
notification_email {
root@localhost
#keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个
root@localhost
360601212@qq.com
}
notification_email_from keepalived@localhost
#发邮件的地址
smtp_server 127.0.0.1
#邮件服务器地址
smtp_connect_timeout 30
#邮件服务器连接timeout
router_id LVS01
#每个keepalived主机唯一标识,建议使用当前主机名,但多节点重名不影响
vrrp_skip_check_adv_addr
#对所有通告报文都检查,会比较消耗性能,启用此配置后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查
vrrp_strict
#严格遵守VRRP协议,启用此项后以下状况将无法启动服务:1.无VIP地址 2.配置了单播邻居 3.在VRRP版本2中有IPv6地址,开启动此项并且没有配置vrrp_iptables时会自动开启iptables防火墙规则,默认导致VIP无法访问,建议不加此项配置。
vrrp_garp_interval 0
#gratuitous ARP messages 免费ARP报文发送延迟,0表示不延迟
vrrp_gna_interval 0
#unsolicited NA messages (不请自来)消息发送延迟
vrrp_mcast_group4 225.0.0.18
#指定组播IP地址范围:224.0.0.0到239.255.255.255,默认值:224.0.0.18
vrrp_iptables
#此项和vrrp_strict同时开启时,则不会添加防火墙规则,如果无配置vrrp_strict项,则无需启用此项配置
}
7.1.2 配置虚拟路由器
vrrp_instance <STRING> {
#<String>为vrrp的实例名,一般为业务名称
配置参数
......
}
#配置参数:
state MASTER|BACKUP
#当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP
interface IFACE_NAME
#绑定为当前虚拟路由器使用的物理接口,如:eth0,bond0,br0,可以和VIP不在一个网卡
virtual_router_id VRID
#每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一,否则服务无法启动,同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一
priority 100
#当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高,每个keepalived主机节点此值不同
advert_int 1
#vrrp通告的时间间隔,默认1s
authentication {
#认证机制
auth_type AH|PASS
#AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
auth_pass <PASSWORD>
#预共享密钥,仅前8位有效,同一个虚拟路由器的多个keepalived节点必须一样
}
include /etc/keealived/conf.d/*.conf
virtual_ipaddress {
#虚拟IP,生产环境可能指定上百个IP地址
<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
192.168.200.100
#指定VIP,不指定网卡,默认为,注意:不指定/prefix,默认为/32
192.168.200.101/24 dev eth1
#指定VIP的网卡,建议和interface指令指定的岗卡不在一个网卡
192.168.200.102/24 dev eth2 label eth2:1
#指定VIP的网卡label ifconfig eth2:1 192.168.200.102/24
}
track_interface {
#配置监控网络接口,一旦出现故障,则转为FAULT状态实现地址转移
eth0
eth1
…
}