Docker centos8 Nginx负载均衡高可用

1.Docker 建立centos容器

docker pull centos

docke images

Docker centos8 Nginx负载均衡高可用_第1张图片

创建容器,我这里在创建容器之前选择先建立网络桥段(可以选择不建立)

docker network create --driver bridge --subnet=172.18.12.0/16 --gateway=172.18.1.1 br0

docker network ls 此行命令用于列出已建立的网络桥段 可以使用 docker network inspect br0 查看具体信息

Docker centos8 Nginx负载均衡高可用_第2张图片Docker centos8 Nginx负载均衡高可用_第3张图片

创建容器 --name指定容器名 --network指定网络桥段 --ip指定容器ip地址, -p指定端口映射 宿主机端口:容器端口 最后镜像名称

docker run -itd --name centos --network=br0 --ip 172.18.0.10 -p 9980:80 centos

运行容器 docker exec -it centos /bin/bash

2.安装nginx

在CentOS 8系统中安装Nginx只需输入以下命令即可:

$ sudo yum install nginx

安装完成后,使用以下命令启用并启动Nginx服务:

$ sudo systemctl status nginx

$ sudo systemctl start nginx

Docker centos8 Nginx负载均衡高可用_第4张图片

浏览器访问localhost:9980,出现nginx欢迎页面则安装成功

Docker centos8 Nginx负载均衡高可用_第5张图片

3.安装keepalived
安装环境
su - root

yum -y install kernel-devel*

yum -y install openssl-*

yum -y install popt-devel

yum -y install lrzsz

yum -y install openssh-clients

yum -y install libnl libnl-devel popt

yum -y install gcc gcc-c++ 

在CentOS系统下安装keepalived可使用如下命令:

yum -y install keepalived

4.配置nginx负载均衡和keepalived

这里提前准备了两台nginx容器分别对应端口9980,9981,一台master容器(9982)和一个backup(9983)容器作为演示

不多说,直接附上配置

nginx配置

   upstream proxy_test {
        server 172.18.0.10:80  weight=2;
        server 172.18.0.11:80  weight=1;

    }

 server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                proxy_pass  http://proxy_test;
                index   index.html;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

主keepalived配置

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   #smtp_server 192.168.200.1
   #smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0

   script_user root
   enable_script_security
}

vrrp_script chk_nginx

{
    script "/etc/keepalived/nginx_check.sh" #运行脚本
    interval 2 # 检测时间间隔
    weight -20 # 如果条件成立,则权重 -20
    rise 1
    fall 2
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 8880
    }
    track_script {
        chk_nginx  #执行 Nginx 监控服务
    }
    virtual_ipaddress {
        192.168.200.100
        #192.168.200.17
        #192.168.200.18
    }
}

备keepalived配置

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   #smtp_server 192.168.200.1
   #smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0

   script_user root
   enable_script_security
}

vrrp_script chk_nginx

{
    script "/etc/keepalived/nginx_check.sh" #运行脚本
    interval 2 # 检测时间间隔
    weight -20 # 如果条件成立,则权重 -20
    rise 1
    fall 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 8880
    }
    track_script {
        chk_nginx  #执行 Nginx 监控服务
    }
    virtual_ipaddress {
        192.168.200.100
        #192.168.200.17
        #192.168.200.18
    }
}

测试,先将主备nginx和keepalived都启动

查看主nginx的eth0设置:

vip绑定在主nginx的eth0上。

Docker centos8 Nginx负载均衡高可用_第6张图片

查看备nginx的eth0设置:

Docker centos8 Nginx负载均衡高可用_第7张图片

主机宕机

将主nginx的keepalived停止或将主nginx关机(相当于模拟宕机),查看主nginx的eth0:

eth0没有绑定vip

Docker centos8 Nginx负载均衡高可用_第8张图片

注意这里模拟的是停止 keepalived进程没有模拟宕机,所以还要将nginx进程也停止表示主nginx服务无法提供。

 

查看备nginx的eth0:

vip已经漂移到备nginx。

Docker centos8 Nginx负载均衡高可用_第9张图片

主机恢复

将主nginx的keepalived和nginx都启动。

查看主nginx的eth0:

Docker centos8 Nginx负载均衡高可用_第10张图片

查看备nginx的eth0:

eth0没有绑定vip

Docker centos8 Nginx负载均衡高可用_第11张图片

到此配置成功。

如有问题,欢迎关注公众号(灵心师),大家一起交流探讨。我是灵心一动

你可能感兴趣的:(nginx,Docker)