亚马逊 AWS 是葡萄城的生态合作伙伴。为了帮助您充分利用 AWS 的托管服务快速构建起一套集群环境,彻底去掉“单一故障点”,实现最高的可用性,我们准备了《低代码智能集群 @AWS 的架构与搭建方案》看完本文,带你掌握“基于 nginx 配置服务器集群”。
如果你需要解决如下的问题,可以考虑搭建一套活字格 @AWS 智能集群:
本方案是官方与生态合作伙伴亚马逊 AWS 提供的一套高可用负载均衡解决方案,在活字格智能集群的基础上,通过引入 ALB 等托管服务,进一步提升可用性。本方案提供的主要能力如下:
特别提示:活字格智能集群不兼容内建 SQLite 数据库,您需要在外联数据库上构建数据表和业务。
活字格&亚马逊 AWS 集群需要用到亚马逊提供的 EC2 负载均衡器( ALB 模式)、ElasticCache Redis 集群、Elastic File Systems 、RDS for MySQL 、CloudWatch 托管服务,还需要用到 nginx 实现应用服务器内部的端口转发。对上述技术的了解程度,很大程度上决定了您搭建出的集群的安全性、性能和可用性。
网络拓扑简图
为了实现高可用的目标,本方案的应用服务器设计为位于不同可用区的 2 台 EC2 ,其他托管服务也选择了多可用区的配置。
步骤 1:配置 EFS
在 AWS 控制台中选择 EFS 服务,创建文件系统,点击“自定义”按钮后,按照下面的推荐值完成配置:
创建完成后,等文件系统的文件系统状态变成“可用”,点击刚创建的文件系统,DNS 名称就是用来访问该 EFS 的地址,记录下来备用。
步骤 2:配置 RDS
RDS 的默认安全设置与活字格不兼容。所以,在创建数据库前,你需要创建参数组,具体做法如下: 在 AWS 控制台中选择 RDS 服务,在“资源”区域,点击“参数组”,创建新的参数组,选择和创建 RDS 时一致的版本,示例中组名和描述都设置为“huozige-aws”。点击创建好的参数组,在搜索框中输入“log_bin_trust_function_creators”,然后点击“编辑参数”按钮,将值修改为 1 。
然后回到控制台,点击“创建数据库”,点击“标准创建”后,按照下面的推荐值完成配置:
创建完成后,等数据库的状态变成“可用”,点击刚创建的数据库实例,找到连接和安全性选项卡下的“终端节点”,这个就是数据库服务的地址,记录下来备用。使用本地安装的 MySQL Workbrench 等工具登录到该地址,创建一个 userservicedb 数据库备用。
步骤 3:配置 EC Redis
在 AWS 控制台中选择 ElastiCache 服务,点击右侧菜单中“资源→Redis 集群”,点击“创建 Redis 集群”后,按照下面的推荐值完成配置:
创建完成后,等集群的状态变成“可用”,点击刚创建的集群,找到“主终端节点”,这个就是 Redis 的地址,记录下来备用。
步骤 4:配置应用服务器
在 AWS 控制台中选择 EC2 服务,点击右侧菜单中“实例→实例”,点击“创建新实例”后,按照下面的推荐值完成配置:
创建完成后,等实例状态变成“正在运行”后,点击查看详情,私有 IPv4 地址即内网 IP ,用于配置负载均衡器;公有 IPv4 DNS 是外网地址,用于监控( EC2 实例停止后重新启动时,公有 IPv4 地址会发生变化,所以,不能使用这个地址做监控),记录下这两个值备用。点击“连接”按钮,进入 SSH 客户端选项卡,复制“示例”下的 ssh 命令,记录备用。
在 Windows 电脑上,将下载的 pem 证书拷贝到%homepath%(如 C:\Users\Will )下,这里也是 Windows 终端的启动目录。启动终端,用 EC2 共的 ssh 命令就可以远程登录到该服务器,执行下面的安装和配置操作。
4.1 安装中文字体
受到版权限制,我们无法为您预置常用的“微软雅黑”等中文字体,如果您需要导出 PDF 功能,需要手动安装字体,具体方法见 帮助文档的第 6 节。
4.2 安装和配置 ngnix
nginx 负责将各应用的端口统一成 8200 (可修改,需要和安全组的设置匹配)。
首先,我们需要安装 nginx 。安装完成后,修改 ngnix.conf 文件
sudo apt-get update
sudo apt-get install nginx
在 http 节点下,为管理控制台和每一个应用分别创建 upstream
# 内置服务指向本机 22345 固定端口
upstream local-us{
server localhost:22345;
}
# 针对每个应用创建上游,指向本机即可
upstream local-e{
server localhost:8005;
}
然后,在 http→server 节点下,设置侦听端口,过滤 location 并转发管理控制台和每一个应用
server {
# 对外的端口号
listen 8200;
server\_name huozige-aws-app-server.com;
proxy\_set\_header Upgrade $http\_upgrade;
proxy\_set\_header Connection keep-alive;
proxy\_set\_header Host $host;
proxy\_cache\_bypass $http\_upgrade;
proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
proxy\_set\_header X-Forwarded-Proto $scheme;
proxy\_set\_header X-Real-IP $remote\_addr;
# 转发内置服务
location ^~ /UserService/ {
proxy\_pass http://local-us/UserService/;
proxy\_redirect default;
}
# 针对每个应用做转发,去掉端口号
location ^~ /app\_e/ {
proxy\_pass http://local-e/app\_e/;
proxy\_redirect default;
}
}
配置文件修改完毕,让 nginx 做热加载,不中断服务器的前提下,读取新的配置
sudo nginx -s reload
4.3 挂载 EFS 目录
创建挂载用文件夹 /share ,然后修改 /etc/fstab 文件,再执行重新加载命令,将 EFS 的文件系统挂载到该文件夹
sudo mkdir /share
sudo vim /etc/fstab
sudo mount -a
/etc/fstab 的内容如下,其中 fs-0402a832717e9d61e.efs.cn-northwest-1.amazonaws.com.cn 为前面创建的 NFS 的地址:
fs-0402a832717e9d61e.efs.cn-northwest-1.amazonaws.com.cn:/ /share nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,\_netdev 0 0
4.4 配置活字格负载均衡
完成上述环境准备后,我们需要依次登录应用服务的管理控制台站点( http://{应用服务器外网地址}:22345/UserService/ManagementPage/LoginPage ),完成集群配置。配置页面在 [设置] 选项卡的 [负载均衡配置] 菜单。
步骤 5:配置 ALB
ALB 的配置分为负载均衡器和目标群组两部分。在 2022.08 版本 AWS 中,ALB 的配置界面大多数是英文。
5.1 设置目标群组
首先,你需要基于第四步中创建的应用服务器信息设置目标群组。
在 AWS 控制台中选择 EC2 服务,点击右侧菜单中“负载均衡→目标群组”,点击 Create target group 按钮,按照下面的推荐值完成配置:
点击 Next 按钮,在 Step 2 区域里,添加步骤 4 中创建的应用服务器的内网 IP ,将 Ports 设置为 8200 (步骤 4 中应用服务器的应用端口);点击 Include as pending below 按钮,将其添加到候选列表,再点击 Create target group 按钮完成创建。
提示:没有关联到负载均衡器之前,targets 的 heath status 都是 Unused
5.2 设置负载均衡器
在 AWS 控制台中选择 EC2 服务,点击右侧菜单中“负载均衡→负载均衡器”,点击“创建负载均衡器”按钮,按照下面的推荐值完成配置:
点击刚创建的负载均衡器,在描述选项卡下的 DNS 名称,就是集群对外提供服务地址了。
步骤 6:配置 CloudWatch
在 AWS 控制台中选择 CloudWatch 服务,点击右侧菜单中“应用程序监控→Synthetics Canary”,点击 Canary 版本区域的“创建 Cannary 版本”按钮,按照下面的推荐值完成配置:
点击“创建”按钮后,系统需要一分钟左右的时间进行处理,你需要留意刚才输入的邮箱地址,系统会给你发送一封邮件,点击该邮件上“Confirm subscription”连接,启用邮件通知。
文内实例下载地址:
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.