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

一、背景
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
    
  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker+Consul+Nginx+keepalived是一种常用的云原生架构方案,它结合了容器化、服务发现、负载均衡高可用等多种技术手段,可用于构建高可用、弹性、可扩展的应用系统。 该方案的主要组件包括: 1. Docker:用于容器化应用程序和服务,提供了高效、轻量、可移植的应用打包和部署方式。 2. Consul:用于服务发现和配置管理,支持多数据中心、跨平台、高度可扩展的分布式系统。 3. Nginx:用于负载均衡和反向代理,支持高并发、高可用的流量分发。 4. keepalived:用于实现高可用的服务和节点,提供了基于 VRRP 协议的故障转移和自动切换功能。 在该方案中,Docker 容器作为应用程序和服务的运行环境,使用 Consul 进行服务注册和发现,并通过 Nginx 进行流量分发和负载均衡。同时,使用 keepalived 实现高可用的服务和节点,确保系统的稳定性和可用性。 项目描述可以按照以下步骤进行撰写: 1. 项目背景和目的:简要介绍本项目的背景和目的,说明为什么选择 Docker+Consul+Nginx+keepalived 方案。 2. 技术架构:详细介绍该方案的技术架构和组件,包括 Docker、Consul、Nginxkeepalived 的作用和使用方式。 3. 系统功能:描述系统的主要功能和特点,包括服务发现、负载均衡高可用等方面。 4. 实现方式:介绍系统的具体实现方式和实现步骤,包括 Docker 镜像的构建、应用程序的容器化、Consul 的配置和使用、Nginx 的配置和使用、keepalived 的配置和使用等。 5. 测试和验证:对系统进行测试和验证,验证系统的功能和性能是否符合预期,是否满足高可用和弹性的要求。 6. 总结和展望:对本项目进行总结和展望,分析该方案的优缺点和适用范围,展望未来的发展方向和趋势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值