集群分类:
负载均衡集群LB:Nginx,LVS,HAproxy
高可用集群HA:双机热备。keepalived
高性能计算HPC
keeplived
用于实现高可用集群;
工作原理:VRRP(虚拟冗余路由协议)
LVS实现的是负载均衡集群
工作模式:NAT:网络地址转换
DR:路由模式(peiVIP,改web内核参数)
TUN:隧道模式
keepalived高可用集群:
在两台web服务器上安装keepalived
修改配置文件(开启行号):vim /etc/keepalived/keepalived.conf
12 router_id web1 # 设置本机在集群中的唯⼀识别符
13 vrrp_iptables # ⾃动配置iptables放⾏规则
... ...
20 vrrp_instance VI_1 {
21 state MASTER # 状态,主为MASTER,备为
BACKUP
22 interface eth0 # ⽹卡
23 virtual_router_id 51 # 虚拟路由器地址
24 priority 100 # 优先级
25 advert_int 1 # 发送⼼跳消息的间隔
26 authentication {
27 auth_type PASS # 认证类型为共享密码
28 auth_pass 1111 # 集群中的机器密码相同,
才能成为集群
29 }
30 virtual_ipaddress {
31 192.168.4.80/24 # VIP地址
32 }
33 }
# 删除下⾯所有⾏
打开⼀个新的终端监控⽇志,新⽇志将出持续显⽰在屏幕上。退出按ctrl+c
[root@web1 ~]# tail -f /var/log/messages | grep -i
keepalived
# 在前⼀个终端启动服务
[root@web1 ~]# systemctl start keepalived
# 等⼏秒服务完全启动后,可以查看到vip
[root@web1 ~]# ip a s eth0 # eth0将会增加额外的4.80地址
配置web2
[root@web1 ~]# scp /etc/keepalived/keepalived.conf
192.168.4.200:/etc/keepalived/
[root@web2 ~]# vim /etc/keepalived/keepalived.conf
12 router_id web2 # 改id
13 vrrp_iptables
... ...
20 vrrp_instance VI_1 {
21 state BACKUP # 改状态
22 interface eth0
23 virtual_router_id 51
24 priority 80 # 改优先级
25 advert_int 1
26 authentication {
27 auth_type PASS
28 auth_pass 1111
29 }
30 virtual_ipaddress {
31 192.168.4.80/24
32 }
33 }
启动服务 [root@web2 ~]# systemctl start keepalived
查看地址,eth0不会出现vip
[root@web2 ~]# ip a s eth0
# 测试,现在访问4.80,看到是web1上的内容
[root@client1 ~]# curl http://192.168.4.80/
192.168.2.100
# 在web2上监控⽇志
[root@web2 ~]# tail -f /var/log/messages | grep -i
keepalived
# 关闭web1上的keepalived,观察web2的⽇志输出
[root@web1 ~]# systemctl stop keepalived.service
# 测试,现在访问4.80,看到是web2上的内容
[root@client1 ~]# curl http://192.168.4.80/
apache web server2
# 在web2上查看vip,可以查看到vip 192.168.4.80
[root@web2 ~]# ip a s eth0
配置高可用的负载均衡的web集群
环境说明:LVS-DR模式
client1:eth0->192.168.4.10
lvs1:eth0->192.168.4.5
lvs2:eth0->192.168.4.6
web1:eth0->192.168.4.100
web2:eth0->192.168.4.200
环境准备:
# 关闭2台web服务器上的keepalived
[root@web1 ~]# systemctl stop keepalived.service
[root@web2 ~]# systemctl stop keepalived.service
[root@web1 ~]# yum remove -y keepalived
[root@web2 ~]# yum remove -y keepalived
# 创建新虚拟机lvs2
[root@zzgrhel8 ~]# clone-vm7
Enter VM number: 5 # 虚拟机编号,
[root@zzgrhel8 ~]# virsh start tedu_node05 # 启动虚机
[root@zzgrhel8 ~]# virsh console tedu_node05 # 连接虚机控制台
localhost login: root
Password: 123456
# 将以下内容粘贴到虚拟机,进⾏初始化
hostnamectl set-hostname lvs2
nmcli connection modify eth0 ipv4.method manual
ipv4.addresses 192.168.4.6/24
nmcli connection down eth0
nmcli connection up eth0
echo a | passwd --stdin root
# 退出
[root@localhost ~]# exit
# 按ctrl + ]退回到真机
# 连接测试
[root@zzgrhel8 ~]# ssh 192.168.4.6
配置⾼可⽤、负载均衡
1. 在2台web服务器的lo上配置vip
2. 在2台web服务器上配置内核参数
3. 删除lvs1上的eth0:0。因为vip将由keepalived接管
[root@lvs1 ~]# ifdown eth0:0
[root@lvs1 ~]# rm -f /etc/sysconfig/network[1]scripts/ifcfg-eth0:0
[root@lvs1 ~]# yum install -y ipvsadm keepalived
[root@lvs2 ~]# yum install -y ipvsadm keepalived
[root@lvs1 ~]# vim /etc/keepalived/keepalived.conf
12 router_id lvs1 # 为本机取⼀个唯⼀的id
13 vrrp_iptables # ⾃动开启iptables放⾏规则
···········‘’‘’‘’‘’
20 vrrp_instance VI_1 {
21 state MASTER
22 interface eth0
23 virtual_router_id 51
24 priority 100
25 advert_int 1
26 authentication {
27 auth_type PASS
28 auth_pass 1111
29 }
30 virtual_ipaddress {
31 192.168.4.15 # vip地址,与web服务器的
vip⼀致
32 }
33 }
# 以下为keepalived配置lvs的规则
35 virtual_server 192.168.4.15 80 { # 声明虚拟服务器地址
36 delay_loop 6 # 健康检查延迟6秒开始
37 lb_algo wrr # 调度算法为wrr
38 lb_kind DR # ⼯作模式为DR
39 persistence_timeout 50 # 50秒内相同客⼾端调度
到相同服务器
40 protocol TCP # 协议是TCP
41
42 real_server 192.168.4.100 80 { # 声明真实服务器
43 weight 1 # 权重
44 TCP_CHECK { # 通过TCP协议对真实服务器做健康检查
45 connect_timeout 3 # 连接超时时间为3秒
46 nb_get_retry 3 # 3次访问失败则认为真
实服务器故障
47 delay_before_retry 3 # 两次检查时间的间隔3秒
48 }
49 }
50 real_server 192.168.4.200 80 {
51 weight 2
52 TCP_CHECK {
53 connect_timeout 3
54 nb_get_retry 3
55 delay_before_retry 3
56 }
57 }
58 }
# 以下部分删除
# 启动keepalived服务
[root@lvs1 ~]# systemctl start keepalived
# 验证
[root@lvs1 ~]# ip a s eth0 # 可以查看到vip
[root@lvs1 ~]# ipvsadm -Ln # 出现规则
# 客⼾端连接测试
[root@client1 ~]# for i in {1..6}; do curl
http://192.168.4.15/; done
apache web server2
apache web server2
apache web server2
apache web server2
apache web server2
apache web server2
# 为了效率相同的客⼾端在50秒内分发给同⼀台服务器。为了
使⽤同⼀个客⼾端可以看到轮询效果,可以注释配置⽂件中相
应的⾏后,重启keepavlied。
# 配置LVS2
[root@lvs1 ~]# scp /etc/keepalived/keepalived.conf
192.168.4.6:/etc/keepalived/
[root@lvs2 ~]# vim /etc/keepalived/keepalived.conf
12 router_id lvs2
21 state BACKUP
24 priority 80
[root@lvs2 ~]# systemctl start keepalived
[root@lvs2 ~]# ipvsadm -Ln # 出现规则
验证:
# 1. 验证真实服务器健康检查
[root@web1 ~]# systemctl stop httpd
[root@lvs1 ~]# ipvsadm -Ln # web1在规则中消失
[root@lvs2 ~]# ipvsadm -Ln
[root@web1 ~]# systemctl start httpd
[root@lvs1 ~]# ipvsadm -Ln # web1重新出现在规则中
[root@lvs2 ~]# ipvsadm -Ln
# 2. 验证lvs的⾼可⽤性
[root@lvs1 ~]# shutdown -h now # 关机
[root@lvs2 ~]# ip a s eth0 # 可以查看到vip
# 客⼾端访问vip依然可⽤
[root@client1 ~]# for i in {1..6}; do curl
http://192.168.4.15/; done
192.168.2.100
apache web server2
apache web server2
192.168.2.100
apache web server2
apache web server2
HAProxy
也是⼀款实现负载均衡的调度器
适⽤于负载特别⼤的web站点
HAProxy的⼯作模式:
mode http:只适⽤于web服务
mode tcp:适⽤于各种服务
mode health:仅做健康检查,很少使⽤
配置haproxy:
# 装包
[root@haproxy1 ~]# yum install -y haproxy
[root@haproxy1 ~]# vim /etc/haproxy/haproxy.cfg
# 配置⽂件中,global是全局配置;default是缺省配置,如果
后续有和default相同的配置,default配置将会被覆盖。
# 配置⽂件中,frontend描述haproxy怎么和⽤⼾交互;
backend描述haproxy怎么和后台应⽤服务器交互。这两个选
项,⼀般不单独使⽤,⽽是合并到⼀起,名为listen。
# 将61⾏之后全部删除,写⼊以下内容
61 listen myweb 0.0.0.0:80 # 定义本机监听地址
62 balance roundrobin # 调度算法为轮询
# 对web服务器做健康检查,2秒检查⼀次,如果连续2次检查
成功,认为服务器是健康的,如果连续5次检查失败,认为服务
器坏了
63 server web1 192.168.4.100 check inter 2000 rise
2 fall 5
64 server web2 192.168.4.200 check inter 2000 rise
2 fall 5
65
66 listen stats 0.0.0.0:1080 # 定义监控地址
67 stats refresh 30s # 设置监控⻚⾯⾃动刷新时
间为30秒
68 stats uri /stats # 定义监控地址是/stats
69 stats auth admin:admin # 监控⻚⾯的⽤⼾名和密
码都是admin
# 启服务
[root@haproxy1 ~]# systemctl start haproxy.service
# 使⽤firefox访问监控地址 http://192.168.4.5:1080/stats
# 客⼾端访问测试
[root@client1 ~]# for i in {1..6}; do curl
http://192.168.4.5/; done
192.168.2.100
apache web server2
192.168.2.100
apache web server2
192.168.2.100
apache web server2