八、高可用配置 lb01、lb02
规划: HOSTNAME IP 说明 lb01 192.168.238.5 Keepalived主服务器(Nginx主负载均衡器) lb02 192.168.238.6 Keepalived备服务器(Nginx辅负载均衡器) web01 192.168.238.7 web01服务器 web02 192.168.238.8 web02服务器
#部署web01 [root@web01 conf.d]# cat /etc/nginx/conf.d/05_www.conf server { listen 80; server_name www.yunwei.com; root /data/www; location / { index index.html; } } [root@web01 conf.d]# mkdir -p /data/www [root@web01 conf.d]# echo web01 >/data/www/index.html [root@web01 conf.d]# nginx -t [root@web01 conf.d]# systemctl restart nginx [root@web01 conf.d]# curl -H "host:www.yunwei.com" 192.168.238.7 web01
#部署web01 [root@web01 conf.d]# cat /etc/nginx/conf.d/05_www.conf server { listen 80; server_name www.yunwei.com; root /data/www; location / { index index.html; } } [root@web01 conf.d]# mkdir -p /data/www [root@web01 conf.d]# echo web02 >/data/www/index.html [root@web01 conf.d]# nginx -t [root@web01 conf.d]# systemctl restart nginx [root@web01 conf.d]# curl -H "host:www.yunwei.com" 192.168.238.8 web02
#部署lb01、lb02 [root@lb01 conf.d]# cat /etc/nginx/conf.d/05_www.conf upstream www { server 172.16.1.7 weight=1; server 172.16.1.8 weight=1; } server { listen 80; server_name www.yunwei.com; location / { proxy_pass http://www; proxy_set_header Host $http_host; } } nginx -t systemctl restart nginx #测试 [root@lb01 conf.d]# curl -H "host:www.yunwei.com" 192.168.238.5 web01 [root@lb01 conf.d]# curl -H "host:www.yunwei.com" 192.168.238.5 web02 [root@lb01 conf.d]# curl -H "host:www.yunwei.com" 192.168.238.6 web01 [root@lb01 conf.d]# curl -H "host:www.yunwei.com" 192.168.238.6 web02
#安装keepalived #lb01、lb02分别安装keepalived yum install keepalived -y systemctl start keepalived #先不启动,修改过配置文件后在启动
#Keepalived配置文件说明 TOP HIERACHY GLOBAL CONFIGURATION VRRPD CONFIGURATION LVS CONFIGURATION(管理LVS的,nginx此处删掉) #Master配置说明。 [root@lb01 keepalived]# cat keepalived.conf global_defs { router_id lb01 #<==id为lb01,不同的keepalived.conf此ID要唯一。 } vrrp_instance VI_1 { #<==实例名字为VI_1,相同实例的备节点名字要和这个相同。 state MASTER #<==状态为MASTER,备节点状态需要为BACKUP。 interface eth0 #<==通信接口为eth0,此参数备节点设置和主节点相同。 virtual_router_id 51 #<==实例ID为51,keepalived.conf里唯一。 priority 150 #<==优先级为150,备节点的优先级必须比此数字低。 advert_int 1 #<==通信检查间隔时间1秒。 authentication { auth_type PASS #<==PASS认证类型,此参数备节点设置和主节点相同。 auth_pass 1111 #<==密码是1111,此参数备节点设置和主节点相同。 } virtual_ipaddress { 192.168.238.3/24 dev eth0 label eth0:3 #<==虚拟IP,即VIP,子网掩码为24位,绑定接口为eth0,别名为eth0:3,此参数备节点设置和主节点相同。 } } #提示:此处设置的虚拟IP为192.168.238.3,即网站域名绑定的IP。
配置 lb(单实例)
#配置 lb01 keepalved.conf [root@lb01 ~]# cp /etc/keepalived/keepalived.conf{,.ori} [root@lb01 ~]# vi /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id lb01 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.238.3/24 dev eth0 label eth0:3 } } #启动 systemctl start keepalived systemctl enable keepalived ps -ef|grep keepalived ifconfig|grep '192.168.238.3'
#配置 lb02 keepalved.conf [root@lb02 ~]# cp /etc/keepalived/keepalived.conf{,.ori} [root@lb02 ~]# vi /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id lb02 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.238.3/24 dev eth0 label eth0:3 } } #启动 systemctl start keepalived systemctl enable keepalived ps -ef|grep keepalived ifconfig|grep '192.168.238.3' 停止一端服务器。看另一端IP接管情况
配置 lb(多实例)
#配置 lb01 keepalved.conf [root@lb01 conf.d]$cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id lb01 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.238.3/24 dev eth0 label eth0:3 } } vrrp_instance VI_2 { state BACKUP interface eth0 virtual_router_id 52 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.238.4/24 dev eth0 label eth0:4 } } #启动 systemctl start keepalived systemctl enable keepalived ps -ef|grep keepalived ifconfig|egrep '192.168.238.3|192.168.238.4'
#配置 lb02 keepalved.conf [root@lb02 conf.d]$cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id lb02 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.238.3/24 dev eth0 label eth0:3 } } vrrp_instance VI_2 { state MASTER interface eth0 virtual_router_id 52 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.238.4/24 dev eth0 label eth0:4 } } #启动 systemctl start keepalived systemctl enable keepalived ps -ef|grep keepalived ifconfig|egrep '192.168.238.3|192.168.238.4'
说明:单实例和多实例场景对比
单实例hosts lb01: 192.168.238.3 www.yunwei.com blog.yunwei.com lb02:热备 浪费机器 多实例hosts 两边跑服务; lb01: 192.168.238.3 www.yunwei.com lb02: 192.168.238.4 blog.yunwei.com 某一台宕机,总流量能被撑住即可。
LB配置脚本配置如下脚本【参考】
[root@lb01 scripts]# cat /server/scripts/chk_nginx_proxy.sh #!/bin/sh if [ `netstat -lntup|grep nginx|wc -l` -ne 1 ];then systemctl stop keepalived fi [root@lb01 scripts]# chmod +x chk_nginx_proxy.sh [root@lb01 scripts]# /server/scripts/chk_nginx_proxy.sh ##要可以执行 测试: [root@lb01 scripts]# pkill nginx [root@lb01 scripts]# sh chk_nginx_proxy.sh [root@lb01 scripts]# ps -ef|egrep "nginx|keep" [root@lb01 scripts]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb01 } vrrp_script chk_nginx_proxy { #<==定义vrrp脚本,检测HTTP端口。 script "/server/scripts/chk_nginx_proxy.sh" #<==执行脚本,当nginx服务有问题,就停掉keepalived服务。 interval 2 #<==间隔2秒。 weight 2 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 53 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.238.3/24 dev eth0 label eth0:3 } track_script { chk_nginx_proxy #<==触发检查。 } } vrrp_instance VI_2 { state MASTER interface eth0 virtual_router_id 52 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.238.4/24 dev eth0 label eth0:4 } } [root@lb02 scripts]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb02 } vrrp_script chk_nginx_proxy { #<==定义vrrp脚本,检测HTTP端口。 script "/server/scripts/chk_nginx_proxy.sh" #<==执行脚本,当nginx服务有问题,就停掉keepalived服务。 interval 2 #<==间隔2秒。 weight 2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 53 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.238.3/24 dev eth0 label eth0:3 } track_script { chk_nginx_proxy #<==触发检查。 } } vrrp_instance VI_2 { state BACKUP interface eth0 virtual_router_id 52 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.238.4/24 dev eth0 label eth0:4 } }