Docker搭建Nginx+keepalived高可用负载均衡服务器

avatar
作者
筋斗云
阅读量:0
一、背景
1.nginx高可用

在生产环境下,Nginx作为流量的入口,如果Nginx不能正常工作或服务器宕机,将导致整个微服务架构的不可用。所以负责负载均衡、反向代理的服务(Nginx)为了提高处理性能,高可用,也需要集群部署。本期咋们采用 keepalived 和 Nginx实现高可用。

2.KeepAlived

KeepAlived是Linux下的基于VRRP备份路由的高可靠性中间件。如果一台服务器宕机,KeepAlived会检测到并将发生故障的机器从集群中摘除,同时使用其他的服务器代替该故障机器的工作,当服务器重新正常工作后KeepAlived就会自动将该服务器加入到工作集群中,以上的工作都是KeepAlived自动完成无需人工介入。

3.VRRP协议

VRRP协议英文全称:Virtual Router Redundancy Protocol,即”虚拟路由冗余协议“。将多台提供相同功能的路由器组成路由器组,包含一个master和多个backup。提供虚拟IP,占有这个虚拟IP的master负责ARP的响应和转发IP数据包。master负责发布组广播消息,若master发送的广播长时间没有被backup接收到就会触发选举backup当新master。

4.Nginx+keepalived 双机主从模式

使用两台Nginx服务器,一台主服务器和一台热备服务器,正常情况下,主服务器绑定一个公网虚拟IP,提供负载均衡服务,热备服务器处于空闲状态;当主服务器发生故障时,热备服务器接管主服务器的公网虚拟IP,提供负载均衡服务;但是热备服务器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠。

5.Nginx+keepalived 双机主主模式

使用两台Nginx服务器,互为主备,且都处于活动状态,同时各自绑定一个公网虚拟IP,提供负载均衡服务;当其中一台发生故障时,另一台接管发生故障服务器的公网虚拟IP(这时由非故障机器一台负担所有的请求)。该方案解决了双击主从的资源浪费问题,但是有个性能瓶颈的问题在这种模式会出现。就是单台机器上的负载会瞬时过大。那如何解决这个问题呢,就出现了多点集群模式。

6.Nginx+keepalived 多点模式

以上两种方式都有各自的有缺点,多点集群模式应运而生。多点集群可以理解为双机热备在技术上的提升。多机服务器可以组成一个集群。根据应用的实际情况,可以灵活地在这些服务器上进行部署,同时可以灵活地设置接管策略。比如,可以由一台服务器作为其他所有服务器的备机,也可以设置多重的接管关系,等等。这样,就可以充分地利用服务器的资源,同时保证系统的高可用性。

二、docker部署双机主从模式
1.创建网络
# 创建bridge docker network create -d bridge --subnet 172.70.0.0/16 --gateway 172.70.0.1 nginx-network docker network ls # 查看信息 docker network ls docker network inspect minio-network # 删除 docker network rm networkId 
2.创建容器
# master docker run -it --name centos-master --privileged -v /home/centos/master:/mnt/software -p 10010:80 --net=nginx-network centos:7 # salve docker run -it --name centos-salve --privileged -v /home/centos/salve:/mnt/software -p 10020:80 --net=nginx-network centos:7 
3.安装准备
# 切换目录 cd /etc/yum.repos.d/ # 删除yum源 rm -rf CentOS* # 复制yum源 docker cp /etc/yum.repos.d/CentOS-Base.repo 容器id:/etc/yum.repos.d/CentOS-Base.repo # 安装工具 yum -y update yum install epel-release yum -y install net-tools yum -y install vim # 清除缓存 yum clean all # 生成缓存 yum makecache 
4.安装nginx
yum -y install nginx # 启动 nginx # 停止 nginx -s quit # 刷新配置 nginx -s reload 
5.安装keepalived
yum -y install keepalived  # 启动 keepalived -l -f /etc/keepalived/keepalived.conf # 停止 pkill keepalived # 查看 ps -ef | grep keepalived 
keepalived配置
  1. keepalived master配置

    # keepalived.conf ! Configuration File for keepalived global_defs {    notification_email {      acassen@firewall.loc      failover@firewall.loc      sysadmin@firewall.loc    }    notification_email_from Alexandre.Cassen@firewall.loc    smtp_server 192.168.200.1    smtp_connect_timeout 30    # 路由id,主备节点不能相同    router_id LVS_DEVEL_MASTER    vrrp_skip_check_adv_addr    #vrrp_strict    vrrp_garp_interval 0    vrrp_gna_interval 0    script_user root    enable_script_security } # nginx检查 vrrp_script chk_nginx {   script "/etc/keepalived/nginx_check.sh"   interval 1   weight 0 }  vrrp_instance VI_1 { 	# Keepalived的角色,MASTER 表示主节点,BACKUP 表示备份节点     state MASTER     # 指定监测的网卡,可以使用 ifconfig 或 ip a 进行查看     interface eth0     # 虚拟路由的id,主备节点需要设置为相同     virtual_router_id 51     # 优先级,主节点的优先级需要设置比备份节点高     priority 100     # 设置主备之间的检查时间,单位为秒     advert_int 1     # 定义验证类型和密码     authentication {         auth_type PASS         auth_pass 1111     }     # 虚拟IP地址,可以设置多个     virtual_ipaddress {         172.70.0.10     }     # 调用上面自定义的监控脚本     track_script {        chk_nginx     } }  
  2. keepalived salve配置

    # keepalived.conf ! Configuration File for keepalived global_defs {    notification_email {      acassen@firewall.loc      failover@firewall.loc      sysadmin@firewall.loc    }    notification_email_from Alexandre.Cassen@firewall.loc    smtp_server 192.168.200.1    smtp_connect_timeout 30    # 唯一值    router_id LVS_DEVEL_SALVE    vrrp_skip_check_adv_addr    # vrrp_strict    vrrp_garp_interval 0    vrrp_gna_interval 0    script_user root    enable_script_security }  # nginx检查 vrrp_script chk_nginx {   script "/etc/keepalived/nginx_check.sh"   interval 1   weight 0 }  vrrp_instance VI_1 {     state BACKUP     interface eth0     # 主从一致     virtual_router_id 51     priority 100     advert_int 1     authentication {         auth_type PASS         auth_pass 1111     }     virtual_ipaddress {         172.70.0.10     }     track_script {        chk_nginx     } } 
  3. nginx检查配置

    # nginx_check.sh A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ];then  #执行nginx启动命令  #nginx  # 启动失败停止keepalived  if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then 	pkill keepalived  fi fi 
  4. 补充配置

    # 文件授权 chmod +x check_nginx.sh chmod +x keepalived.conf 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!