文章目录
集群简介
什么是集群
- 一组通过高速网络互联的计算机,并以单一系统的模式加以管理
- 将很多服务器集中起来一起,提供同一种服务,在客户端看来就像是只有一个服务器
- 可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益
- 任务调度是集群系统中的核心技术
集群目的
- 提高性能
–如计算密集型应用,如:天气预报、核试验模拟 - 降低成本
–相对百万美元级的超级计算机,价格便宜 - 提高可扩展性
–只要增加集群节点即可 - 增强可靠性
–多个节点完成相同功能,避免单点失败
集群分类
- 高性能计算集群HPC
–通过以集群开发的并行应用程序,解决复杂的科学问题 - 负载均衡(LB)集群
–客户端负载在计算机集群中尽可能平均分摊 - 高可用(HA)集群
–避免单点故障,当一个系统发生故障时,可以快速迁移
LVS概述
LVS项目介绍
- Linux虚拟服务器(LVS)是章文嵩在国防科技大学就读博士期间创建的
- LVS可以实现高可用、可伸缩的web、mail、cache和media等网络服务
- 最终目标是利用Linux操作系统和LVS集群软件实现一个高可用、高性能、低成本的服务器应用集群
LVS集群组成
- 前端:负载均衡层
–由一台或多台负载调度器构成 - 中间:服务器群组层
–有一组实际运行应用服务的服务器组成 - 低端:数据共享存储层
–提供共享存储空间的存储区域
LVS术语
- Director Server:调度服务器
–将负载分发到Real Server的服务器 - Real Server:真实服务器
–真实提供应用服务的服务器 - VIP:虚拟IP地址
–公布给用户访问的虚拟IP地址 - RIP:真实IP地址
–集群节点上使用的IP地址 - DIP:调度器连接节点服务器的IP地址
LVS工作模式
- VS/NAT
–通过网络地址转换(NAT)实现的虚拟服务器
–大并发访问时,调度器的性能成为瓶颈 - VS/DR
–直接使用路由技术实现虚拟服务器
–节点服务器需要配置VIP,注意MAC地址广播 - VS/TUN
–通过隧道方式实现虚拟服务器
负载均衡调度算法
- LVS目前实现了10种调度算法
- 常用调度算法有4种
–轮询(Round Robin)
–加权轮询(Weighted Round Robin)
–最少连接(Least Connections)
–加权最少连接(Weighted Least Connections)
还有源地址散列(Source Hashing)、目标地址散列(Destination Hashing)、基于局部性的最少链接、带复制的基于局部性最少链接、最短的期望的延迟、最少队列调度等等,详情请百度.
ipvsadm使用
- 安装ipvsadm
yum -y install ipvsadm
ipvsadm -v
#看版本信息 - ipvsadm命令
命令选项 | 含义 |
---|---|
ipvsadm -A | 添加虚拟服务器 |
ipvsadm -E | 修改虚拟服务器 |
ipvsadm -D | 删除虚拟服务器 |
ipvsadm -C | 清空所有 |
ipvsadm -a | 添加真实服务器 |
ipvsadm -e | 修改真实服务器 |
ipvsadm -d | 删除真实服务器 |
ipvsadm -L | 查看集群算法 |
-s [rr/wrr/lc/wlc/sh] | 指定集群算法 |
ipvsadm -A -t/u 192.168.4.5:80 -s[算法] | 添加虚拟服务器,协议为tcp(-t)或者udp(-u) |
ipvsadm -E -t/u 192.168.4.5:80 -s[算法] | 修改虚拟服务器,协议为tcp或者udp |
ipvsadm -D -t/u 192.168.4.5:80 | 删除虚拟服务器,协议为tcp或者udp |
ipvsadm -C | 清空所有 |
ipvsadm -a -t/u 192.168.4.5:80 -r 192.168.2.100 [-g/i/m] | 添加真实服务器-g(DR模式)-i(隧道模式)-m(NAT模式) |
ipvsadm -e -t/u 192.168.4.5:80 -r 192.168.2.100 [-g/i/m] | 修改真实服务器 |
ipvsadm -d -t/u 192.168.4.5:80 -r 192.168.2.100 | 删除真实服务器 |
ipvsadm -Ln | 查看LVS规则表 |
- 永久保存所有规则
ipvsadm-save -n > /etc/sysconfig/ipvsadm
LVS-NAT集群
操作流程
- Real Server:
–配置WEB服务器 - Director Server:
–在上安装并启用ipvsadm
–创建虚拟服务器、向虚拟服务器中加入节点 - client:
–连接虚拟服务器测试
安装前准备
- LVS的IP负载均衡技术是通过IPVS模块实现的
- IPVS模块已成为Linux组成部分
配置基本环境
(web1和web2配置httpd参看如下)
yum -y install httpd
echo "192.168.2.100" > /var/www/html/index.html
systemctl restart httpd
常见问题:如果httpd服务启动启动的比较慢?
解决方法:可以修改/etc/httpd/conf/httpd.conf文件,
将ServerName www.example.com:80这行的#注释符删除即可。
部署LVS-NAT模式调度器
- 确认调度器的路由转发功能(如果已经开启,可以忽略)
echo 1 > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
1
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf #修改配置文件,设置永久规则
- 创建集群服务器
yum -y install ipvsadm
ipvsadm -A -t 192.168.4.5:80 -s wrr
- 添加真实服务器
ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.100 -w 1 -m
ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.200 -w 1 -m
- 查看规则列表,并保存规则
ipvsadm -Ln
ipvsadm-save -n > /etc/sysconfig/ipvsadm
- 客户端测试
客户端使用curl命令反复连接http://192.168.4.5,查看访问的页面是否会轮询到不同的后端真实服务器。
LVS-DR集群
操作流程
- Real Server:
–配置WEB服务器
–配置辅助IP地址、调整内核参数 - Director Server:
–在上安装并启用ipvsadm
–配置辅助IP地址
–创建虚拟服务器、向虚拟服务器中加入节点 - client:
–连接虚拟服务器测试
设置Proxy服务器的VIP和DIP
注意:为了防止冲突,VIP必须要配置在网卡的虚拟接口!!!
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0{,:0}
vim ifcfg-eth0:0
TYPE=Ethernet #网卡类型为:以太网卡
BOOTPROTO=none #none手动配置IP,或者dhcp自动配置IP
NAME=eth0:0 #网卡名称
DEVICE=eth0:0 #设备名称
ONBOOT=yes #开机时是否自动激活该网卡
IPADDR=192.168.4.15#IP地址
PREFIX=24 #子网掩码
---------------------------------
systemctl restart network
ifconfig
常见问题:RHEL7和Centos7系统中有两个管理网络的服务,有可能冲突?
解决方法:关闭NetworkManager服务后重启network即可。
设置Web1服务器网络参数
nmcli connection modify eth0 ipv4.method manual \
ipv4.addresses 192.168.4.100/24 connection.autoconnect yes
nmcli connection up eth0
接下来给web1配置VIP地址。
注意:这里的子网掩码必须是32(也就是全255),网络地址与IP地址一样,广播地址与IP地址也一样。
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo{,:0}
vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.4.15
NETMASK=255.255.255.255
NETWORK=192.168.4.15
BROADCAST=192.168.4.15
ONBOOT=yes
NAME=lo:0
防止地址冲突的问题:
这里因为web1也配置与调度器一样的VIP地址,默认肯定会出现地址冲突;
sysctl.conf文件写入这下面四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应,这样防止地址冲突的问题。
vim /etc/sysctl.conf
#手动写入如下4行内容
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
#当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播,不做任何回应
#本机不要向外宣告自己的lo回环地址是192.168.4.15
sysctl -p
#用户只需要编辑/etc/sysctl.conf文件,即可手工或自动执行由sysctl控制的功能,-p从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载
内核参数说明
- arp_ignore(定义回复ARP广播的方式)
–0(默认)代表回应所有本地地址广播,本地地址可以配置在任意网络借口
–1代表只回应配置入站网卡接口上的任意IP地址的ARP广播 - rp_announce(定义回复ARP广播的方式)
–0(默认):使用配置在任意网卡接口上的本地IP地址
–2:对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包括该目标IP地址的本地地址.如果没有适合的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送
(
ARP防火墙
- 使用ARP防火墙也可以禁止对VIP的ARP请求
yum -y install arptables_jf
arptables -A IN -d <virtual_ip> -j DROP
arptables -A OUT -s <virtual_ip> -j mangle\
--mangle-ip-s <real_ip>
)
重启网络服务,设置防火墙与SELinux
systemctl restart network
ifconfig
常见错误:如果重启网络后未正确配置lo:0,有可能是NetworkManager和network服务有冲突,关闭NetworkManager后重启network即可。(非必须的操作)
systemctl stop NetworkManager
systemctl restart network
- Web2服务器设置同上web1
proxy调度器安装软件并部署LVS-DR模式调度器
- 安装软件及创建新的集群服务器规则
yum -y install ipvsadm
ipvsadm -C #清空所有规则
ipvsadm -A -t 192.168.4.15:80 -s wrr
- 添加真实服务器(-g参数设置LVS工作模式为DR模式,-w设置权重)
ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.100 -g -w 1
ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.200 -g -w 1
- 查看规则列表,并保存规则
ipvsadm -Ln
TCP 192.168.4.15:80 wrr
-> 192.168.4.100:80 Route 1 0 0
-> 192.168.4.200:80 Route 2 0 0
ipvsadm-save -n > /etc/sysconfig/ipvsadm
客户端测试
客户端使用curl命令反复连接http://192.168.4.15,查看访问的页面是否会轮询到不同的后端真实服务器。
扩展:LVS动态检测脚本
默认LVS不带健康检查功能,需要自己手动编写动态检测脚本,实现该功能:(参考脚本如下,仅供参考)
vim check.sh
#!/bin/bash
VIP=192.168.4.15:80
RIP1=192.168.4.100
RIP2=192.168.4.200
while :
do
for IP in $RIP1 $RIP2
do
curl -s http://$IP &>/dev/vnull
if [ $? -eq 0 ];then
ipvsadm -Ln |grep -q $IP || ipvsadm -a -t $VIP -r $IP
else
ipvsadm -Ln |grep -q $IP && ipvsadm -d -t $VIP -r $IP
fi
done
sleep 1
done