华为云之使用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)是一种云上可随时自助获取、可弹性伸缩的计算服务,可帮助您打造安全、可靠、灵活、高效的应用环境。
2.2 Nginx介绍
Nginx是一款高性能、轻量级的Web服务器和反向代理服务器。Nginx的特点是占用资源少,启动快,处理请求效率高,能够支持高并发、负载均衡、动静分离、反向代理、访问控制等众多功能。
2.3 keepalived介绍
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
三、实验环境准备工作
3.1 预置实验环境
1.开始实验之前请点击手册上方“预置实验环境”按钮。
2.预置实验环境约等待【2分钟】后预置成功。
3.环境预置成功会创建好对应VPC,安全组和子网,并生成弹性公网EIP。
3.2 登录华为云
一般在实验环境中,默认打开浏览器,系统会自动登录华为云,如果没有自动登录,则选择【IAM用户登录】模式,使用系统给出的账号进行登录即可。
四、创建两台ECS云服务器
4.1 进入ECS控制台
在服务列表,选择ECS弹性云服务器,进入ECS控制台的管理页面。
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
4.3 检查ecs-HA1服务器状态
检查ecs-HA1服务器状态
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
4.5 查看ecs-HA2服务器状态
查看ecs-HA2服务器状态
4.6 申请虚拟IP
- 进入“虚拟私有云”控制台,选择左侧导航栏中的【子网】
- 单击【申请虚拟IP地址】后,在弹出窗口中单击【确定】即可。
五、云服务器esc-HA1的nginx配置
5.1 绑定弹性公网IP
- 登录云服务器控制台,单击 ecs-HA1,进入详情页面,选择【弹性公网IP】页签
- 在弹出窗口中,将实验预置的弹性公网 IP 绑定至 ecs-HA1。
5.2 远程连接esc-HA1服务器
打开实验桌面中的 Xfce 终端,通过以下命令,登录 ecs-HA1。
ssh root@ecs-HA1的公网IP
5.3 安装nginx等软件包
执行以下命令安装 nginx、keepalived 软件包及相关依赖包。
yum install nginx keepalived -y
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
- 解绑弹性公网
- 将弹性公网IP地址绑定esc-HA2服务器
- 连接esc-HA2服务器
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 后的【解绑】
8.2 将虚拟IP绑定至ecs-HA1云服务器
1.进入“虚拟私有云”控制台,选择左侧导航栏中的【子网】。
- 进入子网页面,单击 subnet-HA 进入子网详情页,选择【IP地址管理】页签,单击虚拟 IP 后的【绑定服务器】。
- 在弹出页面中,将虚拟 IP 绑定至 ecs-HA1云服务器。
8.3 VNC登录ecs-HA1
登录云服务器控制台,选择 ecs-HA1 后的【远程登录】,并在弹出窗口中选择 VNC 登录
- 在 VNC 界面中输入 root 账户及密码进行登录(密码不会显示)。登录成功如下图所示:
8.4 查看本地网卡eth0
查看并记录需要绑定虚拟 IP 的网卡及对应连接
nmcli connection
8.5 添加虚拟IP
执行以下命令,在目标连接中添加虚拟 IP。
nmcli connection modify "连接名" ipv4.addresses <虚拟IP地址>
- 使配置生效
nmcli connection up "System eth0"
8.6 检查虚拟IP地址是否配置成功
检查虚拟IP地址是否配置成功
ip add
8.7 ecs-HA2的虚拟IP配置
重复以上步骤,,将虚拟 IP 绑定至 ecs-HA2 并完成配置。
8.8 虚拟 IP 绑定至弹性公网 IP
- 进入“虚拟私有云”控制台,选择左侧导航栏中的【子网】。2. 进入子网页面,单击 subnet-HA 进入子网详情页,选择【IP地址管理】页签,单击虚拟 IP 后的【绑定弹性公网IP】。如下图所示
九、验证实验结果
9.1 重启两台云服务器
登录云服务器控制台,选择云服务器后的【更多】>【重启】,分别重启 ecs-HA1 及 ecs-HA2 两台云服务器。
9.2 使用公网IP访问测试ecs-HA1
使用浏览器访问以下地址,验证是否可以访问到 ecs-HA1 节点上的 Web 页面。
http://弹性公网 IP/index.html
9.3 停止ecs-HA1上的keepalived 服务
- 查看ecs-HA1的IP地址,虚拟机IP此时绑定在了ecs-HA1的eth0网卡上。
ip add
- 停止 ecs-HA1 上的 keepalived 服务
systemctl stop keepalived.service
9.4 使用公网IP访问测试ecs-HA2
使用浏览器访问以下地址,http://弹性公网 IP/index.html,
验证是否可以访问 ecs-HA2 节点上的 Web 页面,此时虚拟IP绑定在了ecs-HA2的eth0网卡上。
- 点赞
- 收藏
- 关注作者
评论(0)