搭建Keepalived Nginx高可用Web集群

WEB集群是由多台Web服务器主机相互联结而形成的一种服务器体系结构,一般结构主要由负载均衡器和后端多个Web节点组成。用户访问请求首先进入负载均衡器,由它根据负载均衡策略将请求分配给后端某个Web应用节点。

本实验采用Nginx实现负载均衡。

3. 操作步骤收起

3.1 申请云资源

3.1.1 创建云服务器

1. 打开谷歌浏览器,进入”弹性云服务器 ECS”控制台页面,选择右上角的【购买弹性云服务器】。如下图所示:

2. 在云服务器购买页面,根据以下参数,创建2台云服务器。

请严格按照以下参数进行创建,其余参数请保持默认。

云服务器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

云服务器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

3.1.2 申请虚拟 IP

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

2. 进入子网页面,单击 subnet-HA,进入子网详情页后,单击【IP地址管理页签】。如下图所示:

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

请记录虚拟 IP 地址,后续步骤需使用。

3.2 配置云服务器 esc-HA1 环境

1. 登录云服务器控制台,单击 ecs-HA1,进入详情页面,选择【弹性公网IP】页签。如下图所示:

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

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

ssh root@ecs-HA1的公网IP

登录密码为创建云服务器时设置的密码,本文为 Huawei@1234

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

yum install nginx keepalived -y

5. 执行以下命令,备份 nginx 配置文件。

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

6. 执行以下命令,创建新的配置文件。

vim /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;
                                            }

          }
   }

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

vim /usr/share/nginx/html/index.html

示例如下:

Welcome to ECS-HA1

8. 执行以下命令,设置 nginx 服务开机自启动并启动服务。

systemctl enable nginx
systemctl start nginx.service

9. 使用 Xfce 执行以下命令,进行单节点访问验证。

curl ecs-HA1公网IP

返回结果如下图所示:

10. 执行以下命令,备份 keepalived 配置文件。

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

11. 执行以下命令,创建新的配置文件。

vim /etc/keepalived/keepalived.conf

输入以下内容,并保存:

注意:请使用上文中记录虚拟 IP 地址,替换代码中的虚拟 IP 地址。

! 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 {
                             虚拟IP地址
                             }
track_script {
           chk_http_port
            }
}

12. 执行以下命令,编辑 nginx 监控脚本并保存。

vim /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

13. 执行以下命令,给脚本授权。

chmod +x /etc/keepalived/chk_nginx.sh

14. 执行以下命令,设置 keepalived 服务开机自启动并启动服务。

systemctl enable keepalived
systemctl start keepalived.service

3.3 配置云服务器 esc-HA2 环境

1. 登录云服务器控制台,单击 ecs-HA1 进入详情页面,选择【弹性公网IP】页签,并单击弹性公网 IP 后的【解绑】。如下图所示:

2. 进入 ecs-HA2 详情页面,选择【弹性公网IP】页签,弹性公网 IP 绑定至 ecs-HA2。绑定完成后如下图所示:

3. 打开实验桌面中的 Xfce 终端,执行以下命令,删除 ecs-HA1 相关登录信息。

rm -rf /home/user/.ssh/known_hosts

4. 通过以下命令,登录 ecs-HA2。

ssh root@ecs-HA2的公网IP

登录密码为创建云服务器时设置的密码,本文为 Huawei@1234

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

yum install nginx keepalived -y

6. 执行以下命令,备份 nginx 配置文件。

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

7. 执行以下命令,创建新的配置文件。

vim /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;
                              }
          }
}

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

vim /usr/share/nginx/html/index.html

示例如下:

Welcome to ECS-HA2

9. 执行以下命令,设置 nginx 服务开机自启动并启动服务。

systemctl enable nginx
systemctl start nginx.service

10. 使用 Xfce 执行以下命令,进行单节点访问验证。

curl ecs-HA2公网IP

返回结果如下图所示:

11. 执行以下命令,备份 keepalived 配置文件。

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

12. 执行以下命令,创建新的配置文件。

vim /etc/keepalived/keepalived.conf

输入以下内容,并保存:

注意:请使用上文中记录虚拟 IP 地址,替换代码中的虚拟 IP 地址。

! 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 {
                    虚拟IP地址
                    }
track_script {
     chk_http_port
     }
}

13. 执行以下命令,编辑 nginx 监控脚本并保存。

vim /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

14. 执行以下命令,给脚本授权。

chmod +x /etc/keepalived/chk_nginx.sh

15. 执行以下命令,设置 keepalived 服务开机自启动并启动服务。

systemctl enable keepalived
systemctl start keepalived.service

3.4 配置 esc-HA1 虚拟 IP 地址

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

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

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

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

1. 登录云服务器控制台,选择 ecs-HA1 后的【远程登录】,并在弹出窗口中选择 VNC 登录。如下图所示:

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

3. 执行以下命令,查看并记录需要绑定虚拟 IP 的网卡及对应连接。

nmcli connection

说明:

● DEVICE 列的 eth0 为需要绑定虚拟 IP 的网卡。

● NAME 列的 System eth0 为网卡对应的连接。

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

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

示例:

nmcli connection modify "System eth0" ipv4.addresses 192.168.0.186

5. 执行以下命令,使配置生效。

nmcli connection up "连接名"

示例:

nmcli connection up "System eth0"

返回结果如下图所示:

6. 可执行 ip a 命令,检查虚拟 IP 地址是否配置成功。如下图所示即为成功:

3.5 配置 esc-HA2 虚拟 IP 地址

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

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

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

2. 进入子网页面,单击 subnet-HA 进入子网详情页,选择【IP地址管理】页签,单击虚拟 IP 后的【绑定弹性公网IP】。如下图所示:

3. 在弹出页面中,选择已创建的弹性公网 IP。

4. 验证结果收起

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

2. 使用浏览器访问以下地址,验证是否可以访问到 ecs-HA1 节点上的 Web 页面。

http://弹性公网 IP/index.html

如下图所示,则表示访问正常:

3. 执行以下命令,停止 ecs-HA1 上的 keepalived 服务。

systemctl stop keepalived.service

4. 使用浏览器访问以下地址,验证是否可以访问到 ecs-HA2 节点上的 Web 页面。

http://弹性公网 IP/index.html

如下图所示,则表示访问正常:

至此实验结束。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注