网络架构图

 

部署步骤

文件准备

文件

说明

nla-agent-setup.tar

AIChat安装包

nginx-v1.25.tar

nginx docker镜像

nfs.zipnfs离线安装包

cluster.tar

集群配置参考文件

--docker-compose.yml

单节点启动文件

--docker-swarm.yml

propertycenter/aiweb等组件启动文件

--docker-swarm-base.yml

mysql/redis/mongo组件组件文件

--hosts

/etc/hosts配置参考

--resolv.conf

/etc/resolv.conf配置参考

--nginx_conf

nginx配置目录

– smartbi.ai.conf

nginx配置文件

服务器信息

服务器主机名

服务器ip

ecs-7295-node1-0001

192.168.1.59

ecs-7295-node1-0002

192.168.1.3

操作系统: centos 7.9,其他linux类似

安装AIChat

参考单节点的wiki文档,每个服务器上都安装,目的是让所有节点上都有docker 镜像。
参考安装目录:/data/smartbi-nla
安装完成后记得运行stop.sh,停掉所有启动的容器

安装nfs

推荐使用云存储,如果没有云存储,可以在其中一台服务器安装nfs服务,另一台安装nfs客户端,并把aichat的部分目录拷贝到nfs。
例如在节点192.168.1.59,部署nfs服务

# 在线安装
sudo yum install nfs-utils rpcbind -y
sudo systemctl start rpcbind
sudo systemctl enable rpcbind
sudo systemctl start nfs-server
sudo systemctl enable nfs-server
sudo systemctl status rpcbind
sudo systemctl status nfs-server

如果不能联网,可以离线安装nfs。zip文件可以用于centos,其他linux可自行寻找离线包。

# 解压离线包, centos
unzip nfs.zip
# rpm安装
rpm -ivh *.rpm --force --nodeps

配置nfs共享目录

mkdir /dafa_nfs
sudo vi /etc/exports
# 文件内容
/data_nfs  *(rw,sync,insecure,no_subtree_check,no_root_squash)
# 加载nfs配置
sudo exportfs -r
# 验证共享
sudo exportfs -v

拷贝AIChat目录到nfs

cd /data/smartbi-nla
cp -ra services scripts data /data_nfs

在节点192.168.1.3,安装nfs客户端并挂载目录

yum install nfs-utils -y
mkdir -p /data_nfs
mount -t nfs -o vers=3,nolock 192.168.1.59:/data_nfs /data_nfs
# 验证挂载
df -h

加载nginx 镜像

注:如果使用外部的nginx或者东方通THS等,则不需要此步骤。配置可以参考smartbi.ai.conf。
在节点192.168.1.59

cd /data/software
docker load -i nginx-v1.25.tar

配置docker swarm

配置/etc/hosts,名称和ip映射。(每台服务器都需要配置)

# 添加内容
192.168.1.59    ecs-7295-node1-0001     ecs-7295-node1-0001
192.168.1.3     ecs-7295-node1-0002     ecs-7295-node1-0002


创建swarm集群

# 节点1,设置为leader节点
docker swarm init --advertise-addr 192.168.1.59
# 运行后,会返回其他节点加入集群的命令
# 节点2执行该命令,设置为worker节点
# 示例 docker swarm join --token SWMTKN-1-3sp127u2zzms62cql5laxi93yrk01m1f64s5ulx4bx67reuwhz-e5j4s1nq0mpnvp9asgmic6jah 192.168.1.59:2377


其他命令

#查看当前 Swarm 集群的状态,包括所有节点的信息,可以在任意管理节点上运行
docker node ls

为了避免网络配置影响docker 集群的启动速度,可以做以下配置。
修改//etc/resolv.conf,全部注释掉

启动aichat集群

在节点192.168.1.59
拷贝cluster目录中的docker-swarm.yml,docker-swarm-base.yml,nginx.yml,nginx_conf到/data/smartbi-nla。

cp -ra nginx_conf /data/smartbi-nla
cp docker-swarm.yml docker-swarm-base.yml nginx.yml /data/smartbi-nla

如果部署的目录不同,则应修改yml文件。
注意:必须修改nginx目录下的smartbi.ai.conf,改成实际的IP。

nginx使用了18080端口,如果该服务器也部署了smartbi,可能会和smartbi端口冲突,需进行修改。

由于mysql/redis/mongo是共享服务,所以只需要部署一个实例,其他组件部署两个实例。(在yml中已配置)

在节点192.168.1.59

cd /data/smartbi-nla
# 启动基础组件
docker stack deploy -c docker-swarm-base.yml smartbi-nla
# 等待10秒,启动其他组件
docker stack deploy -c docker-swarm.yml smartbi-nla
# 启动nginx
docker-compose -f nginx.yml up -d

其他docker命令

# 停止集群
docker stack rm smartbi-nla
# 停止nginx
docker-compose -f nginx.yml down
# 重启某个服务
docker service update --force your_service_name
docker service update --force smartbi-nla_aiweb
# 查看集群
docker stack ls
#查看容器列表
docker ps
#查看容器日志
docker logs 容器id
#进入容器内部
docker exec -it 容器id /bin/sh
docker exec -it c9fd007091c7 /bin/sh
# 测试容器之间的联通
docker exec -it 容器id ping 服务名称
docker exec -it e6ceee48c807   ping admin
# 查看网络
docker network inspect smartbi-nla_smartbi-nla-network
docker service ls -q | xargs -I {} docker service inspect {} --format '{{.Spec.Name}}: {{json .Endpoint.VirtualIPs}}'


配置AIChat

参考单节点wiki,到AIChat管理后台配置Smartbi服务器地址,大模型,训练图谱。
Smartbi的自然语言配置,应指向nginx 暴露的aiweb地址。
如果smartbi也是集群,则每个smartbi应在config.jsp配置redis,用于会话保持。

升级AIChat

1.停止集群:
docker stack rm smartbi-nla
2.解压升级包

tar -xzf nla-agent-upgrade.tar.gz

3.替换services文件
进入共享目录/data_nfs,备份services文件,然后将升级包中的services目录拷贝过来,新的services目录授权chmod 777 -R *
4.启动集群:

cd /data/smartbi-nla
# 启动基础组件
docker stack deploy -c docker-swarm-base.yml smartbi-nla
# 等待10秒,启动其他组件
docker stack deploy -c docker-swarm.yml smartbi-nla

5.检查升级
docker ps


结束。