Appearance
集群部署
提前为系统指定蓝图,在各种技术和实施方法中进行权衡,精心设计,合理利用各种资源、最终确定新系统的详细部署方案,为部署人员提供部署参照。
组件清单
组件 | 说明 | 要求 | 是否必须 |
---|---|---|---|
服务器 | 服务器硬件 | 最低配置4核心16G内存(推荐8核32G内存),系统盘,数据盘,Minio专用磁盘 | 是 |
操作系统 | 操作系统 | Centos/RedHat 7.9 | 是 |
nginx | 反向代理、负载均衡 | Nginx 1.10以上 | 是 |
redis | 数据缓存 | redis 5.0 以上 | 是 |
postgresql | 数据库 | postgresql 13.5以上 | 是 |
rabbitMQ | 消息队列 | rabbitMQ 3.9.16 | 是 |
onlyoffice | Office文档预览、编辑 | 7.1 以上 | 是 |
minio | 共享文件存储 | 2022-09-01以上 | 是 |
elastic-search | 全文检索,搜索引擎 | 7.0以上 | 是 |
informat-account | 低代码账号服务 | 无 | 是 |
informat-biz | 低代码应用服务 | 无 | 是 |
pgpool | 4.3.8版本以上 | pgsql集群中间件 | 是 |
资源分配
- 3台服务器均部署全组件,通过nginx做负载均衡
- Minio集群,通过NGINX做负载均衡
- pg数据库服务申请弹性IP访问,开通防火墙9999
- Redis集群,开通防火墙6381,6382
- Es、rabbitmq、onlyoffice启用单节点服务,通过虚IP进行访问
注意
集群部署最少需要3个服务节点,3个节点均需要全组件安装,且每个服务节点需要独立磁盘作为minio对象存储服务的数据目录
服务器资源分配
机器 | 配置 | 部署 | 备注 |
---|---|---|---|
Node1 | 8C/32G/50G系统盘/500G数据盘/100G Minio数据盘 | 全组件 | 数据库主节点,示例IP:10.0.1.101 |
Node2 | 8C/32G/50G系统盘/500G数据盘/100G Minio数据盘 | 全组件 | 数据库从节点,示例IP:10.0.1.102 |
Node3 | 8C/32G/50G系统盘/500G数据盘/100G Minio数据盘 | 全组件 | 数据库从节点,示例IP:10.0.1.103 |
VIP | 虚拟IP,作为节点漂移使用。 | 示例IP:10.0.1.100 |
对外服务端口
端口号 | 说明 |
---|---|
80 | 织信服务端口,必须 |
9002 | 文件预览服务端口,必须 |
19001 | minio控制台端口,非必须 |
15672 | rabbitmq控制台端口,非必须 |
9999 | 数据库端口,非必须 |
部署架构
redis
部署三主三从交叉复制的Redis集群,保证Redis集群的高可用。
postgresql一主多从 + pgpool
pgpool作为代理位于应用程序和数据库之间。它负责连接池管理、数据库负载均衡和自动故障切换。pgpool会监控主数据库的状态,如果主数据库发生故障,它将选择一个健康的从数据库升级为新的主数据库。
部署流程
参数变量说明
下文中所有bash命令包含以下变量的均替换为实际部署环境的内容
{node1}
: 节点1 IP地址 {node2}
: 节点2 IP地址 {node3}
: 节点3 IP地址 {VIP}
: 虚拟IP {device}
: Minio磁盘盘符,如/dev/sdb
下面提供一个示例,演示具体如何替换:
节点1 IP地址: 10.0.1.101 节点2 IP地址: 10.0.1.102 节点3 IP地址: 10.0.1.103
bash
# 脚本示例
/cluster-tools/sshUserSetup.sh -user root -hosts "{node1} {node2} {node3}" -advanced
# 替换后实际的脚本
/cluster-tools/sshUserSetup.sh -user root -hosts "10.0.1.101 10.0.1.102 10.0.1.103" -advanced
安装器命令行安装
每个节点先按照单机部署的方式进行部署,使用安装器命令行安装的方式进行安装,详细内容参考安装器命令行安装
注意
请不要变动安装目录,密码等参数,有可能会影响后续脚本运行
上传集群工具脚本
上传cluster-tools.zip
文件至所有服务器节点的根目录,并解压压缩包,对脚本赋权
注意
如果为Ubuntu系统请下载cluster-tools-ubuntu.zip
,并使用root账号运行
bash
unzip cluster-tools.zip
cd cluster-tools
chmod +x ./*.sh
chmod +x ./**/*.sh
建立SSH互信
bash
# 为ROOT用户创建互信,输入各个服务器的ROOT账号密码。建立ssh key 时 passphrase不要输入密码,直接Enter即可
./sshUserSetup.sh -user root -hosts "{node1} {node2} {node3}" -advanced
redis集群配置
在所有节点运行redis集群初始化服务
bash
./redis-cluster-tools/init.sh
# 查看redis集群服务是否正常
systemctl status redis-cluster
在任意节点运行建立集群命令
bash
/usr/local/redis/bin/redis-cli --cluster create --cluster-replicas 1 {node1}:6381 {node1}:6382 {node2}:6381 {node2}:6382 {node3}:6381 {node3}:6382
redis集群服务验证
bash
# 设置redis key
/usr/local/redis/bin/redis-cli -c -h {node1} -p 6381
set test "hello"
exit
# 返回redis 存储的值,查看是否正常获取,或者一致
/usr/local/redis/bin/redis-cli -c -h {node2} -p 6381
get test
exit
minio集群配置
在所有服务器节点运行以下命令
bash
#查看磁盘情况
lsblk
#查看分区情况
fdisk -l
# minio集群需要一个单独的磁盘作为minio数据目录,初始化minio磁盘,运行以下命令
./minio-cluster/init.sh -d {device} -n {node1} -n {node2} -n {node3}
minio服务验证
登录任意节点控制台http://{node1}:19001
账号:admin
密码:admin123455202221001
初始化工作:创建存储桶 informat-next
服务验证:上传文件并登录其他节点查看是否正常同步
postgers集群
在所有节点执行,初始化服务
bash
./postgresql-tools/init.sh
在任意节点运行
bash
# 为postgres用户创建互信,输入各个服务器的Postgres密码,默认为Informat-Next_#,.20221001。建立ssh key 时 passphrase不要输入密码,直接Enter即可
su - postgres
cd /cluster-tools
./sshUserSetup.sh -user postgres -hosts "{node1} {node2} {node3}" -advanced
exit
注意
由于pgpool涉及VIP漂移,需要对网卡进行操作。./postgresql-tools/install.sh
脚本内含网考操作脚本,默认为eth0
的网卡,如果网卡名称不一致,请手动修改脚本内相关脚本内容,再执行命令。 如pgpool.conf
中的相关参数:
bash
if_up_cmd = '/usr/bin/sudo /sbin/ip addr add $_IP_$/24 dev eth0 label eth0:1'
if_down_cmd = '/usr/bin/sudo /sbin/ip addr del $_IP_$/24 dev eth0'
arping_cmd = '/usr/bin/sudo /usr/sbin/arping -U $_IP_$ -w 1 -I eth0'
完成互信建立后,执行以下命令
bash
./postgresql-tools/install.sh -v {VIP} -n {node1} -n {node2} -n {node3}
# 查看集群节点状态
psql -d postgres -U pgpool -h 127.0.0.1 -p 9999 -c "show pool_nodes"
# 所有节点的status均为up,pg_status均为up,则代表服务正常
node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state |
last_status_change
---------+---------------+------+--------+-----------+-----------+---------+---------+------------+-------------------+-------------------+-------------------+------------------------+-
--------------------
0 | 192.168.1.110 | 5432 | up | up | 0.333333 | primary | primary | 44393 | false | 0 | | |
2024-09-24 23:21:44
1 | 192.168.1.111 | 5432 | up | up | 0.333333 | standby | standby | 66646 | true | 0 | | |
2024-09-24 23:21:44
2 | 192.168.1.112 | 5432 | up | up | 0.333333 | standby | standby | 69299 | false | 0 | | |
2024-09-24 23:21:44
(3 行记录)
其他命令
bash
# 查看pgpool服务状态
systemctl status pgpool
# 添加node_id为0的集群节点,也就是对应node1的节点
pcp_attach_node -h 127.0.0.1 -U pgpool -n 0
# 将node_id为0的节点提升为主节点
pcp_promote_node -h 127.0.0.1 -U pgpool -n 0
# 将node_id为1的节点恢复为从节点
pcp_recovery_node -U pgpool -h 127.0.0.1 -n 1
bash
# 手动创建备库,如果install脚本没有完成备库的创建,请手动执行完成备库创建
cp -rf /data/pgsql/data/ /data/pgsql/data_bak/
rm -rf /data/pgsql/data/*
pg_basebackup -h {node1} -p 5432 -U postgres -D /data/pgsql/data/ -P -Xs -R
chown -R postgres:postgres /data/pgsql/data/
chmod 700 /data/pgsql/data/
常见问题
bash
# 运行 psql -d postgres -U pgpool -h 127.0.0.1 -p 9999 -c "show pool_nodes" 报错
psql: error: ERROR: failed to authenticate with backend using SCRAM
DETAIL: valid password not found
# 在主节点运行以下命令重新修改密码,pgsql会自动将密码调整为MD5加密
psql -U postgres -p 5432 -h 127.0.0.1 -c "alter user postgres with encrypted password 'Informat-Next_#,.20221001';"
psql -U postgres -p 5432 -h 127.0.0.1 -c "alter user pgpool with encrypted password 'Informat-Next_#,.20221001';"
nginx配置
在任意节点运行初始化命令
bash
./nginx/install.sh -v {VIP} -n {node1} -n {node2} -n {node3}
# 查看服务是否正常
systemctl status nginx
informat配置
在任意节点运行初始化命令
bash
./informat/install.sh -v {VIP} -n {node1} -n {node2} -n {node3}
# 查看Account服务是否正常
systemctl status informat-account
# 查看Biz服务是否正常
systemctl status informat-biz
访问系统
浏览器地址栏输入地址:http://{VIP}进行访问