记录日常工作关于系统运维,虚拟化云计算,数据库,网络安全等各方面问题。

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》 虚拟化云计算,系统运维,安全技术服务.

网站已经关闭评论