集群:为解决某个特定问题将多个计算机结合起来形成一个单系统
集群的目的就是为了解决系统的性能瓶颈
垂直扩展:向上扩展,增强单个计算机的性能,升级硬件,硬件升级是有瓶颈的
水平扩展:向外扩展,增加设备,并行的运行多个服务,通过网络和算法来调度服务分配的问题
负载均衡集群:LB load blance 多个主机组成,每台主机只承担一部分访问请求,靠负载均衡算法来实现
高可用集群:HA high availablity 避免SPOF(single point of failuer)单点故障,系统当中有一部分出现故障,可以保障整个系统继续运行
即能满足主从----同步(某些特定的服务需要)----负载均衡
HPC:high-performance computing 快速转发,快速响应
MTBF:mean time between failure 系统在正常运行期间无故障的平均时间,一般用小时或者天数来表示,MTBF值越高,系统的可靠性越高,出现故障的概率也越小
MTTR:系统从发生故障到恢复正常运行的平均时间,一般用小时或者天数表示,MTTR值越小,说明系统恢复故障的能力越强
A:系统可靠性的指标 A值越高越好
A=MTBF/(MTBF+MTTR)%
停机时间
计划内停机:指的是预定时间内的维护或者检修时间,时间是自定义的
计划外停机:运维人员关注的就是计划外,突然出现故障没有响应
1、可扩展性:集群要有随时可以添加或者删除设备的能力,动态的扩缩容
2、可靠性:集群中如果有节点发生故障,可以快速检测并且自动切换
3、负载均衡:合理的分配负载,避免单个节点过载,影响整体性能
4、可维护性:能够方便的进行配置,部署,维护,监控,降低成本
5、安全性:防止恶意的攻击,以及数据泄密,数据丢失
6、易用性:相关的工作人员,可以方便进入集群,能够快速的开发,部署测试等等
vs virtual server lvs服务的逻辑名字,外部访问lvs集群是提供的一个虚拟IP地址和端口
DS:Director server:lvs集群当中的主服务器,也叫调度器,是整个lvs集群的核心,接受客户端的请求转发到后端RS
RS:real server lvs的后端的真实服务器的ip,接受到了DS的请求之后,返回响应结果
CIP:client ip 客户端的IP地址
VIP:virtual ip对外提供访问的统一虚拟ip
DIP:Director ip 调度器在lvs内部使用的ip地址,用于和真实服务器进行通信
RIP:后端真实服务器的IP地址
NAT DR TUN
其中NAT和DR最常用的方式
ipvsadm工具:管理ipvs内核模块的命令行工具,可用于配置和管理lvs集群
-A:添加虚拟服务器
-D:删除整个虚拟服务器
-s:指定负载调度的算法
静态调度(固定调度)
rr轮询
wrr加权轮询
dh目的地址hash
根据IP地址查找静态hash表,获取需要真实的RS的地址
sh源地址hash
lc:最小连接调度
wlc:加权最小连接数调度
-a:添加真实服务器
-d:删除真实的服务器
-t:指定VIP地址的端口号
-r:指定RIP的端口号
-m:表示使用的nat模式
-g:表示使用DR模式
-i:表示使用隧道模式
-w:设置真实服务器的权重
-p 60(秒):设置连接保持的时间60秒(默认不带)
-ln:以数字以列表的形式,查看lvs的配置信息
最常用的lvs负载方式之一,地址转换
1、客户端访问都是访问VIP
2、DS接受到请求,根据调度算法选择好后端服务器(rs)
请求发送给rs
3、RS处理请求并将响应发送到DS
4、DS把RS的响应包装成自己相应,发送到客户端
NAT模式工作模式
1、在调度器上配置双网卡,一个指内,一个指外
2、配置一个可以和公网进行通信的VIP
3、配置转发策略,如果访问VIP就会把请求的数据转发到后台的RS
请求的格式:报文,调度器会修改请求的目标iIP地址和端口
4、RS处理完请求之后响应客户端,先到调度器进行地址转换,把内网地址转换成公网地址,响应给用户
后端服务器------调度器-----NAT转换------前端服务器----客户端
nat:对于客户端来说请求地址始终不变的,客户端不需要修改任何配置,转发由调度器通过算法来完成,后端服务器只管接受响应,也不需要修改任何配置
性能损失和单点故障
负载调度器:配置双网卡ens33:20.0.0.10(内网) 12.0.0.1(ens36)
两台后端web真实服务器:
一台NFS共享服务器:
关闭防火墙和安全机制
安装共享服务 nfs-utils rcpbind
在opt目录下创建目录 kgc benet
分别echo
重启服务
先启动网络rpcbind
在启动nfs
发布服务 exportfs -rv
修改网卡配置
把网关IP地址改为nfs共享服务器的IP地址
注释DNS
安装共享服务 nfs-utils rcpbind
安装nginx
showmount -e 共享服务器IP地址
mount IP地址:/opt/benet或者kgc /usr/loacl/nginx/html
重启服务
curl 服务端的IP地址
改配置文件
网关和DNS注释
添加网卡设置
改网卡名称和IP地址
重启网卡
安装iptables-service iptables
iptables -F清空原有策略
iptables -t nat -APOSTROUNING -s 网段 -o ens36 -j SNAT to 进来的ip
查看配置 iptables -t nat vnl
创建VIP地址 ipvsadm -A -t 12.0.0.1:80 -s rr
创建一号真实服务器(添加节点服务器)
ipvsadm -a -t 12.0.0.1:80 -r 192.0.0.20:80 -m
创建二号真实服务器
ipvsadm -a -t 12.0.0.1:80 -r 192.0.0.30:80 -m
保存策略
ipvsadm-save>/etc/sysconfig/ipvsadm
查看策略 ipvsadm -ln
删除策略 ipvsadm -d -r 192.0.0.30:80 -t 调度服务器
打开网关的服务器转发etc/sysctl.conf
net.ipv4.ip——forward = 1
sysctl -p立刻生效
然后测试
也是最常用的lvs负载方式,DRDIRECT ROUTING 直接路由模式
负载均衡器lvs调度器,只负责请求和转发到后端的真实服务器,但是响应结果,由后端服务器直接转发给客户端,不需要经过调度器的处理,减轻LVS调度器的负担,提高了性能和稳定性
1、客户端发送请求到VIP
2、LVS的调度器接受请求之后,根据算法选择一台真实服务器,请求转发到后端RS,请求的报文的目的Mac地址,修改成后端真实服务器的Mac地址,转发
3、后端真实服务器接受请求,处理完成之后,由于后端服务器直接把响应转发给客户端,响应报文中的目的的Mac地址修改成客户端的Mac地址,直接把响应报文转发到客户端
4、调度器,后端真实服务器都有VIP地址,调度器地址和后端真实服务器在同一网段
1、调度器的ip和真实服务器的IP地址在同一物理网络中
2、真实服务器的IP地址可以是私有地址,也可以是公网地址,如果配置的是公网,通过互联网可以直接访问RIP
3、调度器只作为入口,但是 不做网关,要把服务器的转发功能关闭
4、真实服务器的网关也不能指向调度器,真实服务器的数据包,是不允许经过调度器
5、后端真实服务器上,基于LO接口配置VIP的IP地址
ARP协议:网络层协议,将IP地址解析为物理Mac地址
ARP解决局域网内部的通信,IP地址和Mac地址映射
DR模式的调度器和后端服务器都在一个网段中,通过ARP请求实现
标识后端的真实服务器
保证调度器和后端服务器之间的通信,保证请求可以正确的转发到后端服务器
实现高可用和故障转移
问题一
由于调度器和后端真实服务器都有相同的VIP地址,导致响应冲突,ARP 通信紊乱
对真实服务器进行处理,真实服务器不响应针对VIP的ARP请求
VIP地址使用LO的虚拟地址:arp_ignore=1
后端真实服务器只响应目的为本地ip,也就是RIP,后端服务器的真正IP地址,ens33网卡提供的地址
问题二
返回报文使用的源地址还是VIP地址,调度器也是VIP,怎么把响应返回到客户端不经过调度器
真实服务器做一个内核参数的优化:arp_announce=2 系统不使用IP数据包的源地址,来设置arp的请求
真实的物理网卡的地址
准备前期
host1:20.0.0.10
host2:20.0.0.20(nfs共享服务器)
web集群1:20.0.0.40
web集群2:20.0.0.41
实验步骤:
关闭防火墙和安全机制
配置调度器
加载内核:modprobe ip_vs
安装ipvsadm yum -y install ipvsadm
配置VIP地址
ipconfig ens33:0 20.0.0.100/24
调度器内核优化 /etc/sysctl.conf
- net.ipv4.ip_forward = 0
- #关闭服务器作为网关的转发功能
- net.ipv4.conf.all.send_redirects = 0
- #控制是否发送ICMP的重定向消息,禁止重定向
- net.ipv4.conf.default.send_redirects = 0
- #禁止默认网络接口,就是调度器的网卡,发送ICMP的重定向消息
- net.ipv4.conf.ens33.send_redirects = 0
- #指明网卡设备,ens33不发送重定向消息
sysctl -p立刻生效
ipvsadm-save >/etc/sysconfig/ipvsadm
ipvsadm -A -t 20.0.0.100:80 -s rr
ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.30:80 -g
ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.40:80 -g
ipvsadm-save >/etc/sysconfig/ipvsadm
重启服务
ipvsadm -ln 查看策略
nfs共享服务器
安装共享服务yum -y install nfs-utils rpcbind
在opt目录下创建共享目录并赋权
/etc/exports
- /opt/kgc 20.0.0.20(rw,sycn)
- /opt/benet 20.0.0.20(rw,sycn)
重启服务
发布服务 exports -rv
查看服务 showmount -e
web1
安装nginx 共享
查看能否共享 showmout -e 20.0.0.20
挂载共享目录
mount 20.0.0.20:/opt/kgc
curl 20.0.0.40 测试是否联通
网卡设备(根据回环网卡)
cd /etc/sysconfig/network-scripts/
cp /ifcfg-lo ifcfg-lo :0
vim ifcfg-lo:0
- DEVICE=lo:0
- ONBOOT=yes
- IPADDR=20.0.0.100
- NETMASK=255.255.255.255
oute add -host 20.0.0.100 dev lo:0
把VIP的地址绑定到lo:0,作为整个LVS的VIP地址,标识,告诉调度器,进行转发请求的ip地址寻址
内核优化
vim /etc/sysctl.conf
- net.ipv4.conf.lo.arp_ignore=1
- 设置lo接口忽略来自任何接口的ARP请求
- net.ipv4.conf.lo.arp_announce=2
- 设置lo接口仅响应本地的IP地址,其他的接口arp请求,全部忽略
- net.ipv4.conf.all.arp_ignore=1
- 所有接口忽略来自任务接口的arp请求
- net.ipv4.conf.all.arp_announce=2
- 所有接口仅会响应本地的IP地址的arp请求,其他的接口的arp请求全部忽略
sysctl -p 立刻生效
web2操作同上
nfs共享服务器上测试
keepalived为LVS应运而生的高可用服务,lvs的调度器无法做高可用,于是keepalived这个软件,实现的是调度器的高可用
但是keepalived不是专门为lvs集群服务器的,也可以做其他代理服务器的高可用
lvs的高可用集群:主调度器和备调度器(可以是多个)一主两备一主一备
主调度器能够正常运行时,由主调度器进行后端真实服务器的分配处理,其余的备用调度器处在冗余状态
不参与集群的运转,主调度器出现故障无法运行,备调度器才会承担主调度器的工作
一旦主调度器恢复工作,继续由主调度器进行处理,备调度器又成冗余
VRRP:keepalived是基于vrrp协议实现lvs服务的高可用,解决了调度器单节点的故障问题
VRRP协议:提高网络路由器的可靠性开发的一种协议
选举出主和备,预先设定好了主和备的优先级,主的优先级较高,备的优先级低,一旦开启服务器,优先级高的,会自定抢占主的位置
VRRP组播通信:224.0.0.18 VRRP协议当中的主备服务器通过组播地址通信,交换主备服务器之间的云溪谷状态,主服务器会周期性的发送VRRP报文消息,已告知其他服务器,主服务器现在的状态
主备切换:主服务器发生故障,或者不可达,VRRP协议会把请求转移到备服务器,通知组播地址,VRRP可以迅速的通知其他服务器发生了
主备切换,确保新的主服务器可以正常的处理客户端的请求
故障恢复:一旦主服务器恢复通信,有组播地址进行通信,发现在恢复的主服务器优先级更高,会抢占原主服务器的位置,成为主服务器,调度和接受请求
全局模块:core模块,负责整个keepalived启动加载和维护
VRRP模块:实现VRRP协议,主备切换
check模块:负责健康检查,检查后端真实的服务器的健康检查,配置真实服务器的模块当中
host1主调度器20.0.0.10
host2备调度器20.0.0.20
nginx1后端真实服务器20.0.0.40
nginx2后端真实服务器20.0.0.41
VIP地址:20.0.0.100
客户端:20.0.0.30
先关闭防火墙和安全机制
安装服务ipvsadm keepalived
cd /etc/keepalived给配置文件做备份
改配置文件keepalived.conf
- ! Configuration File for keepalived
-
- global_defs {
- notification_email {
- acassen@firewall.loc
- failover@firewall.loc
- sysadmin@firewall.loc
- }
- notification_email_from Alexandre.Cassen@firewall.loc
- smtp_server 127.0.0.1
- smtp_connect_timeout 30
- router_id LVS_01
- #主备服务的id,主和备的id不能一致
- vrrp_skip_check_adv_addr
- #vrrp_strict
- vrrp_garp_interval 0
- vrrp_gna_interval 0
- }
-
- vrrp_instance VI_1 {
- state MASTER
- #标识身份,主备BACKUP
- interface ens33
- #指定VIP地址的物理接口
- virtual_router_id 10
- #虚拟机路由器的id号
- priority 100
- #优先级
- advert_int 1
- #发送报文的间隔时间默认10秒
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 20.0.0.100
- #指定集群的VIP地址
- }
- }
-
- virtual_server 20.0.0.100 80 {
- delay_loop 6
- #健康检查的间隔时间
- lb_algo rr
- #负载均衡的调度算法
- lb_kind NAT -- DR
- #指定lvs集群的工作方式,要大写
- persistence_timeout 50 --0
- #连接保持时间50秒,,为了实验效果设为0秒
-
- real_server 20.0.0.40 80 {
- weight 1
- #后端服务器的轮询权重
- TCP_CHECK {
- connect_port 80
- #检测目标的端口号
- connect_timeout 3
- #检测连接超时时间
- nb_get_retry 3
- #重试次数
- delay_before_retry 4
- #重试间隔秒数
- }
- }
- real_server 20.0.0.41 80 {
- weight 1
- #后端服务器的轮询权重
- TCP_CHECK {
- connect_port 80
- #检测目标的端口号
- connect_timeout 3
- #检测连接超时时间
- nb_get_retry 3
- #重试次数
- delay_before_retry 4
- #重试间隔秒数
- }
- }
-
-
- }
ipvsadm-save > /etc/sysconfig/ipvsadm 保存策略
重启服务systemctl restart keepalived
ipvsadm-save > /etc/sysconfig/ipvsadm 保存策略
ipvsadm -ln 查看策略
查看vip地址 ip addr
关闭转发功能etc/sysctl.conf
- 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
sysctl -p立刻生效
可以按照主服务器配置但是只需修改keepalived配置文件
改优先级标识
改主备id
改标识身份
- ! Configuration File for keepalived
-
- global_defs {
- notification_email {
- acassen@firewall.loc
- failover@firewall.loc
- sysadmin@firewall.loc
- }
- notification_email_from Alexandre.Cassen@firewall.loc
- smtp_server 127.0.0.1
- smtp_connect_timeout 30
- router_id LVS_02
- #主备服务的id,主和备的id不能一致
- vrrp_skip_check_adv_addr
- #vrrp_strict
- vrrp_garp_interval 0
- vrrp_gna_interval 0
- }
-
- vrrp_instance VI_1 {
- state BACKUP
- #标识身份,主备BACKUP
- interface ens33
- #指定VIP地址的物理接口
- virtual_router_id 10
- #虚拟机路由器的id号
- priority 90
- #优先级
- advert_int 1
- #发送报文的间隔时间默认10秒
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 20.0.0.100
- #指定集群的VIP地址
- }
- }
-
- virtual_server 20.0.0.100 80 {
- delay_loop 6
- #健康检查的间隔时间
- lb_algo rr
- #负载均衡的调度算法
- lb_kind NAT -- DR
- #指定lvs集群的工作方式,要大写
- persistence_timeout 50 --0
- #连接保持时间50秒,,为了实验效果设为0秒
-
- real_server 20.0.0.40 80 {
- weight 1
- #后端服务器的轮询权重
- TCP_CHECK {
- connect_port 80
- #检测目标的端口号
- connect_timeout 3
- #检测连接超时时间
- nb_get_retry 3
- #重试次数
- delay_before_retry 4
- #重试间隔秒数
- }
- }
- real_server 20.0.0.41 80 {
- weight 1
- #后端服务器的轮询权重
- TCP_CHECK {
- connect_port 80
- #检测目标的端口号
- connect_timeout 3
- #检测连接超时时间
- nb_get_retry 3
- #重试次数
- delay_before_retry 4
- #重试间隔秒数
- }
- }
-
-
- }
先关闭防火墙和安全机制
安装nginx服务
配置vip
- vim /etc/sysconfig/network-scripts/ifcfg-lo:0
- DEVICE=lo:0
- ONBOOT=yes
- IPADDR=20.0.0.100
- NETMASK=255.255.255.255
ifup ifcfg-lo:0生效
绑定回环接口
route add -host 20.0.0.100 dev lo:0
vim /etc/sysctl.conf
- net.ipv4.conf.lo.arp_ignore=1
- net.ipv4.conf.lo.arp_announce=2
- net.ipv4.conf.all.arp_ignore=1
- net.ipv4.conf.all.arp_announce=2
sysctl -p立刻生效
nginx2同上操作
模拟主服务器出故障(停止服务器)
主服务vip转移到备服务上
主服务器
备服务器
测试结果
开启主服务器服务vip会转移到主服务器上
模拟节点服务器(停止nginx1 服务器)
开启nginx的服务
轮询
在配置该权重然后在测试