keepalived双主vip+nginx域名自动负载均衡方案 |
发表者:admin分类:应用服务2022-03-17 15:58:28 阅读[712] |
keepalived双主vip+nginx域名自动负载均衡方案
一,环境说明。
1, 主机配置
主机:LB01,IP: 192.168.137.30,centos7,BT面板(只装nginx),Keepalived. LB01集群正常时VIP: 192.168.137.41
主机:LB02,IP: 192.168.137.31,centos7,BT面板(只装nginx),Keepalived. LB02集群正常时VIP: 192.168.137.42
docker主机:IP: 192.168.137.32,centos7,docker,安装4个nginx容器模拟4个web站点,两个业务集群,如下:
192.168.137.32:8341 ,OA业务集群站点
192.168.137.32:8342, OA业务集群站点
192.168.137.32:8343, shop业务集群站点
192.168.137.32:8344, shop业务集群站点
VIP: 192.168.137.41, OA业务的域名 oa.demo.cc,shop业务的域名 shop.demo.cc
VIP: 192.168.137.42 , shop业务的域名 shop.demo.cc ,OA业务的域名 oa.demo.cc
2,实现效果。
采用dns轮询方式,将两个业务域名解析到两个vip,保证群集正常时,两台LB主机资源都利用起来。
每个LB配置nginx时,将绑定两个业务域名,通过客户端访问的业务域名,自动负载均衡到后端业务站点。
二,keepalived主机配置。
1,LB主机的keepalived.conf配置。
集群正常时,LB01使用第一个实例中的vip,LB02使用第二个实现中的vip。
都是使用BACKUP角色,但是LB主机的优先级不一样。
global_defs {
notification_email {
root@localhost
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id mysql-1
# vrrp_skip_check_adv_addr
# vrrp_strict
# vrrp_garp_interval 0
# vrrp_gna_interval 0
}
# vrrp_script check_nginx {
# script "/etc/keepalived/bin/check_nginx.sh" #集群检测nginx的脚本
# weight -10 # 脚本异常退出后,使keepalived的优先级-10
# interval 2 # 脚本每2秒执行一次
# }
vrrp_instance VI_1 {
state BACKUP
# nopreempt #LB主机恢复正常后是否抢占vip
# preempt_delay 30 #LB主机恢复正常后抢占vip延迟30秒
interface eth0
virtual_router_id 55
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.137.41/24
}
# track_script {
# check_nginx
# }
}
vrrp_instance VI_2 {
state BACKUP
# nopreempt
# preempt_delay 30
interface eth0
virtual_router_id 56
priority 145
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.137.42/24
}
# track_script {
# check_nginx
# }
}
2,nginx负载均衡配置。
直接在宝塔面板上面配置一个web站点,然后绑定两个业务域名,将两个vip都监听端口。
再配置upstream负载均衡,名称使用业务域名,分别转发到不同的业务集群。
nginx使用proxy_pass根据访问的业务域名,自动代理到后端不同的业务站点。
upstream名称要使用域名,proxy_pass代理使用$host,即可实现效果。
proxy_pass如果使用$servername$1,那么两个域名都会转发到OA业务集群。
也可以使用 server_name localhost 方式,其它配置不变,这样可以实现,所有域名都可以访问,但是只有upstream的域名才可以显示。
具体nginx的配置内容如下。
upstream oa.demo.cc { # OA业务服务器池
server 192.168.137.32:8341 max_fails=2 fail_timeout=3s weight=1;
server 192.168.137.32:8342 max_fails=2 fail_timeout=3s weight=1;
# 假设为OA业务的两个集群节点
}
upstream shop.demo.cc { # shop业务服务器池
server 192.168.137.32:8343 max_fails=2 fail_timeout=3s weight=1;
server 192.168.137.32:8344 max_fails=2 fail_timeout=3s weight=1;
# 假设为shop业务的两个集群节点
}
server
{
listen 192.168.137.41:80;
listen 192.168.137.42:80;
server_name oa.demo.cc shop.demo.cc;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/demo.cc;
location / {
proxy_pass http://$host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
access_log /www/wwwlogs/demo.cc.log;
error_log /www/wwwlogs/demo.cc.error.log;
}
三,测试业务访问情况
1,测试两个业务域名访问正常。
转载请标明出处【keepalived双主vip+nginx域名自动负载均衡方案】。
《www.micoder.cc》
虚拟化云计算,系统运维,安全技术服务.
Tags: | [阅读全文...] |
最新评论