配置后端集群
# yum -y install httpd
# systemctl enable httpd
# echo "node 1" > /var/www/html/index.html
# systemctl start httpd
配置前端Nginx反代
# yum -y install nginx #在Node2上执行类似操作
# systemctl enable nginx
# echo "Nginx A" > /usr/share/nginx/html/index.html
# vim /etc/nginx/nginx.conf
19 upstream webser{
20 server 192.168.26.136 weight=1;
21 server 192.168.26.132 weight=2;
22 }
23
24 server {
25 listen 80 default_server;
26 server_name _;
27 root /usr/share/nginx/html;
28 location / {
29 proxy_pass webser;
30 }
31 }
# nginx -t
# systemctl start nginx
配置Keepalived
# yum -y install keepalived.x86_64
# systemctl enable keepalived.service
# cd /etc/keepalived/
# cp keepalived.conf{,.bak}
# vim keepalived.conf
! Configuration File for keepalived #类似于Bash Shell的shebang机制
global_defs {
notification_email { #收件人列表,可有多个
root@localhost
}
notification_email_from keepalived@localhost #发件人地址
smtp_server localhost #smtp服务器
smtp_connect_timeout 30 #超时时长
router_id ha_cluster_1_1 #主机身份唯一标识符,同一高可用集群中必须唯一
vrrp_skip_check_adv_addr
vrrp_mcast_group4 224.18.0.100 #VRRP多播地址
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 { #虚拟路由器名称,同一高可用集群中必须唯一
state MASTER # 当前节点在此虚拟路由器上的身份,可选值为 {MASTER:SLAVE}
interface ens34 #该虚拟路由器在本机上所使用的物理网卡
virtual_router_id 51 #当前虚拟路由器惟一标识,范围是0-255, 同一虚拟路由器中,该值必须相同
priority 100 #当前物理节点在此虚拟路由器中的优先级;范围1-254
advert_int 1 #VRRP通告间隔
authentication {
auth_type PASS #通过密钥认证
auth_pass b1acd829 #预共享密钥 可由"openssl rand -hex N"生成,仅前八位有效
}
virtual_ipaddress { #对外提供服务的VIP
172.18.59.100/16 dev ens34 label ens34:0
}
track_interface { #对网卡设备做冗余 以备流式迁移
ens33 weight 1
ens34 weight 2
}
}
# systemctl start keepalived.service
Keepalived
,注意,router_id state priority必须不同,
virtual_router_id和预共享密钥必须相同ping
测试无法通过vrrp_strict
会在每一次初始化VIP对应网卡
时自动在iptables
中添加一条drop规则
# vim keepalived.conf
# systemctl restart keepalived.service
同理,在Slave端执行上述参数操作,这里不再赘述。
测试Keepalived是否工作正常
tcpdump
抓取VRRP
组播包Keepalived
服务,观察VIP
是否能够平滑漂移
# systemctl stop keepalived
Nginx的高可用
Bash Shell脚本
实现Nginx的高可用。# vim /etc/keepalived/keepalived.conf #以下脚本意为:当Nginx服务意外停止运行时,将每隔1s进行检测,一旦失败2次则将本机Keepalived服务的优先级降低20,反之判定失败后,如果后续检测中有1次成功,则视为成功。
Keepalived
;同理,在Slave上执行相同操作,此处不再赘述。测试Nginx高可用性
VIP
在所在的节点位置
Nginx
服务# systemctl stop nginx
tcpdump
的VRRP
抓包结果
Slave节点
的网络配置。此时我们发现VIP
已经自动漂移
到Slave节点
。Keepalived
保证了Nginx服务的高可用性,即便Master
出现宕机等意外情况,仍能继续提供Web服务Master节点
上的Nginx
服务,VIP
将回到Master节点
。# systemctl start nginx
感谢 && 预告
Keepalived
的Nginx
的高可用实现。接下来我将主要讲一讲著名的负载均衡器
--LVS
的高可用实现,正如前文我说的Keepalived
原生支持LVS
,甚至可以说Keepalived为LVS而生
。但在这之前,我将先讲讲LVS
的相关概念及各种模型。笔者才疏学浅,如有描述不清的地方欢迎批评指正感谢!