本帖最后由 willning 于 2023-2-27 17:48 编辑
为了帮助大家具备企业级应用的部署能力,轻松应对核心业务系统的部署要求,我们准备了 《活字格智能集群的架构与搭建方案》高级教程。学完本教程,你掌握的能力为“基于nginx配置服务器集群”,在 活字格核心开发技能清单中属于通用能力L4级别。
应用场景
如果你需要解决如下的问题,可以考虑搭建一套活字格智能集群:
- 提升系统可用性,避免因单台服务器宕机导致系统服务中断
- 在做好各项性能优化(参考系列教程)的前提下,需要进一步提升性能,以满足大并发量请求的响应速度
集群能力 活字格智能集群是我们官方提供的一套负载均衡解决方案,在传统的负载均衡集群提供的高可用性、高性能等优势的基础上,通过应用和配置的智能自动分发机制,进一步降低了集群的运维工作量。本方案提供的主要能力如下:- 负载均衡
- 可用性监控
- 较高可用性(包含应用服务器的故障转出和故障迁回)
特别提示:活字格智能集群不兼容内建SQLite数据库,您需要在外联数据库上构建数据表和业务。
搭建方案 搭建活字格智能集群需要用到Linux、nginx、Redis、NFS、MySQL/MariaDB/MSSQL(您可以在PostgreSQL、Oracle等数据库上开发业务功能,但仍需要使用这几款数据库来存储用户信息,支持的具体版本可参考活字格的环境要求,本教程以mysql为例)。在监控服务方面,局域网项目可采用Zabbix,互联网项目则推荐采用云服务商提供的监控服务(本教程以阿里云的云监控为例)。对上述技术的了解程度,很大程度上决定了您搭建出的集群的安全性、性能和可用性。
角色一览- 反向代理服务(10.2.0.1):nginx,实现负载均衡等分发策略,示例版本:1.18
- 应用服务器(10.2.0.2和10.2.0.3):活字格服务器管理器,运行活字格应用,示例版本:V8.0.103.0
- 缓存和分发数据库(10.2.0.4):redis,存放Session会话数据,提供应用和配置同步所需的消息,示例版本:5.0
- 用户信息数据库和业务数据库(10.2.0.5):推荐MySQL,存放用户、角色、权限等基础数据,示例版本:8.0
- 文件服务(主节点10.2.0.6):nfs,存放活字格应用、用户上传文件等集群所需的文件,需要在多个应用服务器间共享,示例版本:v4
- 监控服务:可选阿里云的云监控服务,确保第一时间能够发现服务器的故障
网络拓扑简图
生产环境中,活字格智能集群通常需要用到最少4台服务器:2个应用服务器,2个支持服务器(基于负载将角色分配到不同的服务器,如支持服务器A包含nginx和nfs;支持服务器B包含mysql和redis主节点)。此外,还需要1个云监控服务。
步骤0:更新RHEL
活字格支持的CentOS 7版本发布至今已有较长时间,原生组件比较老旧,需要使用EPEL对其进行更新和扩充。
# RHEL(含Redhat、CentOS、Alinos、银河麒麟、统信UOS高级服务器等)
sudo yum install epel-release -y
sudo yum update
步骤1:部署应用服务器
1.1 安装
在官网上获取活字格的安装脚本,分别在2台应用服务器(10.2.0.2和10.2.0.3)上执行:
# RHEL
sudo yum install wget -y
sudo rm -f huozige-installer-linux.tar && sudo wget https://downloads.grapecity.com.cn/HuoZiGe/Linux/huozige-installer-linux.tar && sudo tar -xvf huozige-installer-linux.tar && sudo chmod +x installForguncy_cn.sh && sudo ./installForguncy_cn.sh
# Ubuntu(含Ubuntu、Deepin、统信UOS桌面等)
sudo rm -f huozige-installer-linux.tar && sudo wget https://downloads.grapecity.com.cn/HuoZiGe/Linux/huozige-installer-linux.tar && sudo tar -xvf huozige-installer-linux.tar && sudo chmod +x installForguncy_cn.sh && sudo ./installForguncy_cn.sh
因为示例不涉及服务端的PDF和Excel导出,所以没有安装中文字体。安装方法参加:帮助文档
1.2 导入License
安装完成后,您需要登录管理控制台,导入License(负载均衡支持两种授权模式:按用户数授权和无限制授权)
1.3 允许端口访问
在防火墙(如firewalld)上允许22345(活字格内部使用)和8000-9000(推荐应用使用的端口号)端口;如果应用服务器基于云主机构建,需要开通对应的入站/上行端口。
# RHEL
sudo firewall-cmd --zone=public --add-port=22345/tcp --permanent
sudo firewall-cmd --zone=public --add-port=8000-9000/tcp --permanent
sudo firewall-cmd --reload
步骤2:部署和配置NFS
2.1:安装
首先,在文件服务器(10.2.0.6)上,安装nfs的server端,并设置为自启动。
# RHEL
sudo yum install nfs-utils -y
# Ubuntu
sudo apt-get update
sudo apt-get install nfs-kernel-server
创建文件目录、配置并重启服务
# RHEL & Ubuntu
sudo mkdir -p /nfs_data
sudo chmod 777 /nfs_data
sudo vi /etc/exports
sudo systemctl enable nfs-server
sudo systemctl start nfs-server
在配置文件/etc/exports中添加
/nfs_data 10.2.0.2(rw,sync,no_root_squash)
/nfs_data 10.2.0.3(rw,sync,no_root_squash)
禁用selinux,然后在防火墙(如firewalld)上允许nfs使用到的端口(111、2049、 /etc/sysconfig/nfs中设置的其他端口)也可以直接为nfs服务添加访问许可,如果部署在云服务器(如阿里云ECS),也需要在云主机配置上开发对应的端口。
# RHEL
sudo setenforce 0
sudo vi /etc/selinux/config
将SELINUX=enforcing修改为SELINUX=disabled
sudo firewall-cmd --add-service=nfs --zone=public --permanent
sudo firewall-cmd --reload
2.2:应用服务器
接下来在两台应用服务器上(10.2.0.2和10.2.0.3),分别安装nfs客户端。
# RHEL
sudo yum install nfs-utils -y
# Ubuntu
sudo apt-get update
sudo apt-get install nfs-common
将服务器上的文件夹挂在到本地之前,需要先创建“挂载点”,即本地的文件夹;然后修改/etc/fstab文件,让系统在开机时自动挂载文件服务器提供的卷;最后手动挂载,完成后续配置。
# RHEL & Ubuntu
sudo mkdir /share
sudo chmod 777 /share
sudo vi /etc/fstab
sudo mount -a
修改 /etc/fstab 时,在文件尾部追加:
10.2.0.6:/nfs_data /share nfs defaults,_netdev 0 0
如果挂载过程中发生错误,请再次检查2.1中的防火墙设置。
步骤3:部署MySQL
3.1 安装
活字格支持的MySQL版本为5.6、5.7和8.0。需要提示的是,MySQL存放的数据包含用户、组、权限等重要数据,需严格按照您公司的IT管理规定做好安全防护和备份工作。本教程中不涉及相关内容。
# RHEL
sudo yum install wget -y
sudo wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
sudo rpm -ivh mysql80-community-release-el7-7.noarch.rpm
sudo yum install mysql-community-server -y
sudo systemctl enable mysqld
sudo systemctl start mysqld
# Ubuntu
sudo apt-get install mysql-server
sudo systemctl enable mysql
sudo systemctl start mysql
3.2 设置密码、创建用户
新版的MySQL在安装时会自动生成root的密码,您需要使用这个密码才能登录root用户,以执行后续操作。密码存放在mysql的日志中
# RHEL & Ubuntu
sudo cat /var/log/mysqld.log
在文件中找到这一样行,root@localhost: 后面就是root的密码
[Server] A temporary password is generated for root@localhost: +l%7r=bSeIu1
使用内置的客户端登录到数据库服务器
# RHEL & Ubuntu
sudo mysql -uroot -p
首先执行下面的语句,将root的密码设置为你的使用习惯(MySQL8提升了密码强度要求,需包含大小写和特殊字符),确保在本地mysql客户端中登录的用户也拥有执行权限:
alter user root@"localhost" identified by "xA123456!";
use mysql;
update user set host='%' where user='root';
flush privileges;
grant all privileges on *.* to 'root'@'%' ;
然后设置活字格使用的账号。您可以直接使用root作为外网访问账号,在测试和学习阶段,推荐直接为root开放外网访问,便于使用设计器、mysql workbrench等可视化工具对数据进行查询和操作;生产环境则推荐创建专门的用户,并控制可访问的IP地址(仅允许应用服务器,可以用%指定内网的IP网段),以策安全。
CREATE USER 'hzg'@'10.2.0.%' IDENTIFIED BY 'xA123456!';
GRANT ALL ON *.* TO 'hzg'@'10.2.0.%';
flush privileges;
创建用户信息数据库。
CREATE DATABASE userservicedb;
输入 exit 退出mysql客户端。
3.3 启用网络访问
MySQL默认仅监听本地端口,需要修改配置文件才能提供给其他机器访问。MySQL的配置文件很多,推荐修改/etc/my.cnf文件。
# RHEL & Ubuntu
sudo vi /etc/my.cnf
在文件的最后,追加以下内容:
bind-address=0.0.0.0
3.4 允许端口访问
在防火墙(如firewalld)上允许3306端口,如果MySQL基于云主机构建,需要开通对应的入站/上行端口。
# RHEL
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
3.6 测试连接
MySQL的配置相对复杂,在执行下一步之前,建议在每一台应用服务器(10.2.0.2和10.2.0.3)上安装MySQL客户端,对MySQL服务器进行连接。
# RHEL
sudo wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
sudo rpm -ivh mysql80-community-release-el7-7.noarch.rpm
sudo yum install mysql-community-client -y
sudo mysql -h10.2.0.5 -uhzg -p
# Ubuntu
sudo apt-get install mysql-client
sudo mysql -h10.2.0.5 -uhzg -p
如果mysql提示无法连接,请再次检查3.3和3.4的设置。
步骤4:部署Redis
4.1 安装
在redis节点(10.2.0.4)上执行安装。在RHEL中,Redis在EPEL中。为了简化操作,避免出错,强烈推荐安装最新版的EPEL(具体操作参考本文的步骤0),而不是手动编译redis。
# RHEL
sudo yum install redis -y
# Ubuntu
sudo apt-get update
sudo apt-get install redis
4.2 修改配置
默认情况下,Redis不允许其他机器访问,需要修改配置文件,监听全部端口,并且关闭保护模式。修改配置文件后,需要重启redis服务。
# RHEL
sudo vi /etc/redis.conf
sudo systemctl restart redis
# Ubuntu
sudo vi /etc/redis/redis.conf
sudo systemctl restart redis-server
找到bind 127.0.0.1 ::1,在前面加上#,注释掉这一行。 找到protected-mode,把yes修改为no
4.3 允许端口访问
在防火墙(如firewalld)上允许6379端口,如果Redis基于云主机构建,需要开通对应的入站/上行端口。
# RHEL
sudo firewall-cmd --zone=public --add-port=6379/tcp --permanent
sudo firewall-cmd --reload
步骤5:配置活字格集群
5.1 配置管理控制台
完成上述环境准备后,我们需要依次登录应用服务(10.2.0.2和10.2.0.3)的管理控制台站点(http://{应用服务器IP地址}:22345/UserService/ManagementPage/LoginPage),完成集群配置。配置页面在【设置】选项卡的【负载均衡配置】菜单。
- 开启:勾选,启用负载均衡配置
- 数据库类型:用户信息数据库的类型,示例中采用MySQL
- 数据库链接字符串:用户信息数据库的链接字符串,即刚才搭建的支持服务器的MySQL的userservicedb数据库,参考:Server=10.2.0.5;User Id=hzg;password=xA123456;database=userservicedb;allowPublicKeyRetrieval=true; (MySQL8默认安全设置较高,需要在连接字符串上声明允许获取公钥)
- Redis服务地址:缓存服务器的IP和端口号(默认端口为6379),即刚才搭建的支持服务器的Redis
- 共享存储路径:用户存储应用和用户上传文件的共享目录,即刚才挂载GlusterFS服务器的本地目录
5.2 发布验证用工程
使用活字格设计器打开附件中的示例工程,将其发布到一台应用服务器(10.2.0.2)的外网地址,设置应用名为cluster_test,端口为8001。然后通过另一台应用服务器(10.2.0.3)的外网地址访问,确认集群的同步功能已成功运行。
集群验证.fgcc
(2.85 MB, 下载次数: 333)
|