华为云之使用Keepalived+Nginx部署高可用Web集群【玩转华为云】

举报
江湖有缘 发表于 2023/06/27 18:46:47 2023/06/27
【摘要】 华为云之使用Keepalived+Nginx部署高可用Web集群【玩转华为云】

一、本次实践介绍

1.1 实践环境简介

1.本次实践环境使用华为KooLabs云实验平台。
2.本次实践基于华为云ECS弹性云服务器。

1.2 本次实践目的

1.了解Web集群的服务器体系结构
2.掌握如何通过Nginx实现负载均衡
3.学会部署Keepalived+Nginx部署高可用Web集群。

1.3 本次实验介绍

1.本实验使用弹性云服务器实现Keepalived+Nginx高可用WEB集群搭建。
2.虚拟IP(VIP)主要用于弹性云服务器的主备切换,达到高可用性HA的目的。
3.当主服务器发生故障无法对外提供服务时,动态将虚拟IP切换到备服务器,继续对外提供服务。

二、相关技术名词介绍

2.1 ECS云服务器介绍

  • 弹性云服务器 ECS

弹性云服务器(Elastic Cloud Server, ECS)是一种云上可随时自助获取、可弹性伸缩的计算服务,可帮助您打造安全、可靠、灵活、高效的应用环境。
image.png

2.2 Nginx介绍

Nginx是一款高性能、轻量级的Web服务器和反向代理服务器。Nginx的特点是占用资源少,启动快,处理请求效率高,能够支持高并发、负载均衡、动静分离、反向代理、访问控制等众多功能。

2.3 keepalived介绍

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

三、实验环境准备工作

3.1 预置实验环境

1.开始实验之前请点击手册上方“预置实验环境”按钮。
2.预置实验环境约等待【2分钟】后预置成功。
3.环境预置成功会创建好对应VPC,安全组和子网,并生成弹性公网EIP。

image.png

image.png

3.2 登录华为云

一般在实验环境中,默认打开浏览器,系统会自动登录华为云,如果没有自动登录,则选择【IAM用户登录】模式,使用系统给出的账号进行登录即可。

image.png

image.png

四、创建两台ECS云服务器

4.1 进入ECS控制台

在服务列表,选择ECS弹性云服务器,进入ECS控制台的管理页面。

image.png

4.2 购买ECS服务器ecs-HA1

云服务器1:
●计费模式:按需计费
●规格:通用计算型s6,s6.small.1
●镜像:公共镜像 CentOS 7.4 64bit
●系统盘:高IO
●网络:选择预置的 vpc-HA 及 subnet-HA,并手动分配 IP 地址为192.168.0.10
●安全组:选择sg-HA
●弹性公网IP:暂不购买
●云服务器名称:ecs-HA1
●密码:Huawei@1234

image.png
image.png
image.png
image.png
image.png

4.3 检查ecs-HA1服务器状态

检查ecs-HA1服务器状态

image.png

4.4 购买ECS服务器ecs-HA2

云服务器2:
●计费模式:按需计费
●规格:通用计算型s6,s6.small.1
●镜像:公共镜像 CentOS 7.4 64bit
●系统盘:高IO
●网络:选择预置的 vpc-HA 及 subnet-HA,并手动分配 IP 地址为192.168.0.20
●安全组:选择sg-HA
●弹性公网IP:暂不购买
●云服务器名称:ecs-HA2
●密码:Huawei@1234

image.png

4.5 查看ecs-HA2服务器状态

查看ecs-HA2服务器状态

image.png

4.6 申请虚拟IP

  • 进入“虚拟私有云”控制台,选择左侧导航栏中的【子网】

image.png
image.png

  • 单击【申请虚拟IP地址】后,在弹出窗口中单击【确定】即可。

image.png
image.png

五、云服务器esc-HA1的nginx配置

5.1 绑定弹性公网IP

  • 登录云服务器控制台,单击 ecs-HA1,进入详情页面,选择【弹性公网IP】页签

image.png

  • 在弹出窗口中,将实验预置的弹性公网 IP 绑定至 ecs-HA1。

image.png

5.2 远程连接esc-HA1服务器

打开实验桌面中的 Xfce 终端,通过以下命令,登录 ecs-HA1。

ssh root@ecs-HA1的公网IP

image.png

5.3 安装nginx等软件包

执行以下命令安装 nginx、keepalived 软件包及相关依赖包。

yum install nginx keepalived -y

image.png

5.4 备份 nginx 配置文件

备份 nginx 配置文件

mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

5.5 创建新的nginx配置文件

创建新的nginx配置文件

[root@ecs-ha1 ~]# cat /etc/nginx/nginx.conf
user root;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
       worker_connections 1024;
}  
http {
     include mime.types;
     default_type application/octet-stream;
     #log_format main '$remote_addr  - $remote_user [$time_local] "$request" '
     # '$status $body_bytes_sent  "$http_referer" '
     # '"$http_user_agent"  "$http_x_forwarded_for"';
     #access_log logs/access.log main;
     sendfile on;
     #tcp_nopush on;
     #keepalive_timeout 0;
     keepalive_timeout 65;
     #gzip on;
     server {
            listen 80;
            server_name localhost;
             #charset koi8-r;
             #access_log logs/host.access.log main;            
            location / {
                        root html;
                        index index.html index.html;
                      }
                      #error_page 404  /404.html;
                      # redirect server error pages to the static page /50x.html
                      error_page 500 502 503 504 /50x.html;
                      location =  /50x.html {
                                            root html;
                                            }

          }
   }


5.6 编辑index.html

执行以下命令,编辑 index.html 文件内容以演示访问效果并保存。

echo "Welcome to ECS-HA1"  > /usr/share/nginx/html/index.html

5.7 设置nginx服务

设置 nginx 服务开机自启动并启动服务

systemctl enable nginx
systemctl start nginx.service

5.8 单节点访问验证

执行以下命令,进行单节点访问验证。

[root@ecs-ha1 ~]# curl 120.46.219.213
Welcome to ECS-HA1


六、云服务器esc-HA1的keepalived配置

6.1 创建keepalived.conf文件

创建keepalived.conf文件,由于VIP设置的是192.168.0.142,则virtual_ipaddress填写这个IP。

[root@ecs-ha1 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
router_id master-node
}
vrrp_script chk_http_port {
                      script  "/etc/keepalived/chk_nginx.sh"
                      interval 2
                      weight -5
                      fall 2
                      rise 1
                     }
vrrp_instance VI_1 {
                state MASTER
                interface eth0
                mcast_src_ip 192.168.0.10
                virtual_router_id 51
                priority 101
                advert_int 1
                authentication {
                              auth_type PASS
                              auth_pass 1111
                             }
                unicast_src_ip 192.168.0.10                                   
                virtual_ipaddress {
                             192.168.0.142
                             }
track_script {
           chk_http_port
            }
}


6.2 编辑 nginx 监控脚本

编辑 nginx 监控脚本


[root@ecs-ha1 ~]# cat /etc/keepalived/chk_nginx.sh 
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0"  ]; then
  systemctl start nginx.service
   sleep 2
   counter=$(ps -C nginx  --no-heading|wc -l)
   if [ "${counter}" =  "0" ]; then
      systemctl stop keepalived.service
   fi
fi

  • 给脚本授权
chmod +x /etc/keepalived/chk_nginx.sh

6.3 设置keepalived 服务

设置 keepalived 服务开机自启动并启动服务。

systemctl enable keepalived
systemctl start keepalived.service

七、 配置云服务器esc-HA2环境

7.1 连接esc-HA2服务器

esc-HA2的操作与esc-HA2的一样,这里就只记录关键步骤。

  • 删除 ecs-HA1 相关登录信息。
rm -rf /home/user/.ssh/known_hosts
  • 解绑弹性公网

image.png

  • 将弹性公网IP地址绑定esc-HA2服务器

image.png

  • 连接esc-HA2服务器

image.png

7.2 安装nginx等软件

yum install nginx keepalived -y

7.3 编辑nginx.conf配置文件

  • 备份nginx.conf配置文件

mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
  • 编辑nginx.conf配置文件
[root@ecs-ha2 ~]# cat /etc/nginx/nginx.conf
user root;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
      worker_connections 1024;
      }
http {
     include mime.types;
     default_type application/octet-stream;
     #log_format main '$remote_addr  - $remote_user [$time_local] "$request" '
     # '$status $body_bytes_sent  "$http_referer" '
     # '"$http_user_agent"  "$http_x_forwarded_for"';
     #access_log logs/access.log main;
     sendfile on;
     #tcp_nopush on;
     #keepalive_timeout 0;
     keepalive_timeout 65;
     #gzip on;
     server {
          listen 80;
          server_name localhost;
          #charset koi8-r;
          #access_log logs/host.access.log main;
          location / {
                    root html;
                    index index.html index.htm;
                    }
          #error_page 404  /404.html;
          # redirect server error pages to the static page /50x.html
          error_page 500 502 503 504 /50x.html;
          location =  /50x.html {
                              root html;
                              }
          }
}


7.4 编辑 index.html 文件

编辑 index.html 文件

echo "Welcome to ECS-HA2"  > /usr/share/nginx/html/index.html

7.5 设置nginx服务

设置 nginx 服务开机自启动并启动服务

systemctl enable nginx
systemctl start nginx.service

7.6 编辑keepalived 配置文件

  • 备份keepalived 配置文件
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

  • 编辑keepalived 配置文件,由于VIP设置的是192.168.0.142,则virtual_ipaddress填写这个IP。

[root@ecs-ha2 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id master-node
}
vrrp_script chk_http_port {
          script  "/etc/keepalived/chk_nginx.sh"
          interval 2
          weight -5
          fall 2
          rise 1
        }
vrrp_instance VI_1 {
     state BACKUP
     interface eth0
     mcast_src_ip 192.168.0.20
     virtual_router_id 51
     priority 100
     advert_int 1
     authentication {
               auth_type PASS
               auth_pass 1111
               }
     unicast_src_ip 192.168.0.20                                                   
     virtual_ipaddress {
                    192.168.0.142
                    }
track_script {
     chk_http_port
     }
}

7.7 编辑 nginx 监控脚本

  • 编辑 nginx 监控脚本
[root@ecs-ha2 ~]# cat /etc/keepalived/chk_nginx.sh 
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0"  ]; then
     systemctl start nginx.service
     sleep 2
     counter=$(ps -C nginx  --no-heading|wc -l)
     if [ "${counter}" =  "0" ]; then
          systemctl stop keepalived.service
     fi
fi


  • 给脚本执行权限
chmod +x /etc/keepalived/chk_nginx.sh

7.8 设置keepalived服务

设置 keepalived 服务开机自启动并启动服务

systemctl enable keepalived
systemctl start keepalived.service

八、配置 esc-HA1 虚拟 IP 地址

8.1 解绑esc-HA2的弹性公网IP

登录云服务器控制台,单击 ecs-HA2 进入详情页面,选择【弹性公网IP】页签,并单击弹性公网 IP 后的【解绑】

image.png

8.2 将虚拟IP绑定至ecs-HA1云服务器

1.进入“虚拟私有云”控制台,选择左侧导航栏中的【子网】。

  1. 进入子网页面,单击 subnet-HA 进入子网详情页,选择【IP地址管理】页签,单击虚拟 IP 后的【绑定服务器】。

image.png

image.png

  • 在弹出页面中,将虚拟 IP 绑定至 ecs-HA1云服务器。

image.png

image.png

8.3 VNC登录ecs-HA1

登录云服务器控制台,选择 ecs-HA1 后的【远程登录】,并在弹出窗口中选择 VNC 登录

image.png
image.png

  • 在 VNC 界面中输入 root 账户及密码进行登录(密码不会显示)。登录成功如下图所示:

image.png

8.4 查看本地网卡eth0

查看并记录需要绑定虚拟 IP 的网卡及对应连接

nmcli connection

image.png

8.5 添加虚拟IP

执行以下命令,在目标连接中添加虚拟 IP。

nmcli connection modify "连接名" ipv4.addresses <虚拟IP地址>

image.png

  • 使配置生效

nmcli connection up "System eth0"

image.png

8.6 检查虚拟IP地址是否配置成功

检查虚拟IP地址是否配置成功

ip add

image.png

8.7 ecs-HA2的虚拟IP配置

重复以上步骤,,将虚拟 IP 绑定至 ecs-HA2 并完成配置。

8.8 虚拟 IP 绑定至弹性公网 IP

  1. 进入“虚拟私有云”控制台,选择左侧导航栏中的【子网】。2. 进入子网页面,单击 subnet-HA 进入子网详情页,选择【IP地址管理】页签,单击虚拟 IP 后的【绑定弹性公网IP】。如下图所示

image.png

image.png

九、验证实验结果

9.1 重启两台云服务器

登录云服务器控制台,选择云服务器后的【更多】>【重启】,分别重启 ecs-HA1 及 ecs-HA2 两台云服务器。

image.png

9.2 使用公网IP访问测试ecs-HA1

使用浏览器访问以下地址,验证是否可以访问到 ecs-HA1 节点上的 Web 页面。
http://弹性公网 IP/index.html

image.png

9.3 停止ecs-HA1上的keepalived 服务

  • 查看ecs-HA1的IP地址,虚拟机IP此时绑定在了ecs-HA1的eth0网卡上。
ip add

image.png

  • 停止 ecs-HA1 上的 keepalived 服务
systemctl stop keepalived.service

image.png

9.4 使用公网IP访问测试ecs-HA2

使用浏览器访问以下地址,http://弹性公网 IP/index.html,
验证是否可以访问 ecs-HA2 节点上的 Web 页面,此时虚拟IP绑定在了ecs-HA2的eth0网卡上。

image.png

image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。