8、FinChat 部署手册


  • administrators

    1、服务部署说明

    1.1 安装配置docker,优化内核参数

    每台宿主机(Ubuntu16.04/centos7通用)均需执行以下命令安装配置docker,以及优化内核参数,或者下载到本地检查完脚本后安装.
    curl
    -fsSL "https://static.finogeeks.club/deploy/setup_docker.sh" | bash

    在服务对应标签宿主机新建目录并授权

    rm
      -rf /mnt/data/dendrite/ && mkdir -p
      /mnt/data/dendrite/{kafka,elasticsearch,minio,pg-master,pg-slave,zookeeper,mongo/db,es/{data,logs}}
      && chmod 777 -R /mnt/data/dendrite/
    

    FinChat的服务编排文件是基于Rancher2.x的Kubernetes进行服务编排,因此在部署FinChat的后台服务之前,需要先安装好Rancher2.x的基础环境。具体的安装方法可以参考Rancher的官方文档(https://rancher.com/docs/rancher/v2.x/en/installation/ha/)。

    • Rancher server 自有证书单点部署
    docker run
      -d --restart=unless-stopped \ 
    -p 8080:80
      -p 4430:443 \ 
    -e
      AUDIT_LEVEL=3 \ 
    -v
      /mnt/data/rancher-server/ssl/ssl.pem:/etc/rancher/ssl/cert.pem \ 
    -v
      /mnt/data/rancher-server/ssl/ssl.key:/etc/rancher/ssl/key.pem \ 
    -v
      /mnt/data/rancher-server/ssl/ssl.ca.pem:/etc/rancher/ssl/cacerts.pem \ 
    -v
      /mnt/data/rancher-server/data/:/var/lib/rancher \ 
    -v
      /mnt/data/rancher-server/auditlog:/var/log/auditlog \ 
    rancher/rancher:v2.2.3
    
    • Rancher server 自动创建ssl证书单点部署
    docker run
      -d --restart=unless-stopped \ 
    -p 8080:80
      -p 4430:443 \ 
    -e
      AUDIT_LEVEL=3 \ 
    -v
      /mnt/data/rancher-server/data/:/var/lib/rancher \ 
    -v
      /mnt/data/rancher-server/auditlog:/var/log/auditlog \ 
    rancher/rancher:v2.2.3
    

    1.1.1服务简易部署流程

    rancher2.x上部署finochat顺序
    global 新增helm库的catalog
    新增docker镜像仓库账号 project ->resources ->
           registries
    对节点打标签
    部署有状态服务,依照以下顺序部署
    4.1 在服务对应标签宿主机新建目录并授权 rm -rf
            /mnt/data/dendrite/ && mkdir -p
            /mnt/data/dendrite/{kafka,elasticsearch,minio,pg-master,pg-slave,zookeeper,mongo/db,es/{data,logs}}
            && chmod 777 -R /mnt/data/dendrite/
    4.2 部署zookeeper
    4.3 部署kafka
    4.4 部署storage -> mongo(namespace选择storage)
    4.5 部署codis(测试环境用主从,生产环境用redis-cluster)
    4.6 部署业务服务-chat->platform->auth->adapter->gateway->efk->bigdata-search
    4.7 导入账号,规则
    

    Rancher 详细部署流程
    帆信整套后台服务需要用到的数据库服务包括Postgres、MongoDB、Redis等数据库服务。
    配置Docker仓库和Rancher Catalog
    1)在每一台宿主机上登入Docker 私有仓库,docker
    login docker.finogeeks.club 。如果在登录失败,请联系我们的对接人员。
    2)点击 Catalogs,Add Catalog,填写我们提供的Catalog 地址,关闭Rancher默认的Library。
    3)新建一个环境后, 点击Resources,添加自定义的 Docker Registry 。
    0_1571303949583_R1.png
    0_1571303956941_R2.png

    1.2 部署数据存储基础服务

    数据存储、Kafka、Zookeeper、ElasticSearch涉及的Docker容器,会持久化数据到宿主机的/mnt/data目录下,目前凡泰应用数据需要存储的数据都会映射到本地磁盘目录。

    1.2.1数据存储

    数据存储基础服务包括Postgres数据库服务,Mongo数据库服务,Minio对象存储服务。
    Postgres提供主从复制,Postgres的主从复制流程如下:
    0_1571303981309_P1.png
    在部署Postgres时,需要先准备2台物理机器,2台机器的物理硬盘要尽可能的大些。在1台机器上设置label:“finochat.pg-master=yes”, 在另外1台机器上设置label:“finochat.pg-slave=yes”。凡泰提供Postgres主从之间的复制采用异步复制的方式。

    MongoDB提供的是Replica Sets模式(副本集)。MongoDB官方目前已不推荐使用主从模式,取而代之的是副本集模式。副本集其实是一种互为主从的关系,可理解为主主模式。副本集将数据复制,多份保存,不同服务器保存同一份数据,在出现故障时自动切换。副本集比传统的Master-Slave主从复制有改进的地方就是它可以进行故障的自动转移,如果我们停掉副本集的一个成员,那么剩余的成员会再自动选举为一个成员,作为主库。
    0_1571304450340_M3.png
    在部署MongoDB时,需要先准备三台机器,在每台机器上设置label: “mongo.env=yes”,用于调度MongoDB服务。(备注:三台机器部署MongoDB服务)。

    Minio作为底层的对象存储,在部署Minio集群时,需要准备4台机器,每台机器上设置label: “minio.env=yes”,用于调度Minio集群服务。

    Storage的catalog提供了Postgres, Mongo,Minio这个三个基础存储服务。在设置完主机的调度标签后,接下来我们开始部署基础的数据库存储服务。

    在Rancher的管理界面中点击catalog中选择“storage”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.0”版本,选择后会弹出storage服务的具体配置信息:

    0_1571304499922_S4.png

    storage的配置参数可以保持默认提供的即可,点击“Launch”进行部署。storage服务部署成功后,可以看到如下的服务列表:

    0_1571304539887_T5.png

    至此,基础的存储服务已经部署好了。

    1.2.2部署Redis

    Redis数据库主要提供一个缓存数据功能,Chat 服务中会使用Redis进行热点数据的缓存,接下来说明如何部署一套Redis集群服务。

    在Rancher的管理界面中点击catalog中选择“redis-cluster”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.0”版本,选择后会弹出Redis cluster服务的具体配置信息:

    0_1571304589503_R6.png

    Redis的配置参数可以根据默认的即可,点击“Launch”进行部署。Redis服务部署成功后,可以看到如下的服务列表:

    0_1571304622733_R7.png

    1.2.3 部署Kafka服务

    Kafka作为消息队列的中间件服务,FinChat聊天服务基于Kafka作为消息总线,而Kafka依赖于Zookeeper存储Broker、主题和分区等元数据信息。

    在部署zookeeper和Kafka之前,需要先对主机设置调度标签。在三台要署kafka的机器上添加label: “zookeeper.env=yes” 和 “kafka.env=yes”,用于调度Kafka 和Zookeeper服务。

    在Rancher的管理界面中点击Catalog Apps 中选择“zookeeper”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.0”版本,选择后会弹出Zookeeper的集群配置信息:

    0_1571304704180_Z8.png

    Zookeeper的Catalog默认提供的是3个节点的集群,默认的数据存储是挂载到“/mnt/data/volumes/zookeeper”的文件夹下,如果需要修改挂载的路径,可以根据实际情况进行配置,点击“Launch”进行部署。

    0_1571304744208_Z9.png

    zookeeper服务部署成功后,接下来可以开始部署Kafka集群。在Rancher的管理界面中点击Catalog Apps 中选择“kafka”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.0”版本,选择后会弹出Kafka的集群配置信息:

    0_1571304779949_K10.png

    需要特别注意的是,Kafka这里配置了连接Zookeeper 的服务地址,这里通过Rancher 的ServiceName.NameSpace:Port方式进行访问,默认情况下,部署的是zookeeper的NameSpace,点击“Launch”进行部署。Kafka服务部署成功后,可以看到如下的详细列表:

    0_1571304806702_K11.png

    1.2.4 部署efk

    Efk用于收集存储展示docker容器标准输出的日志,其中elasticsearch用于存储日志,fluent-bit用于收集日志,kibana用于展示日志.在部署efk时,需要先准备三台机器,在每台机器上设置label: “elasticsearch.env=yes“,用于调度efk服务。
    0_1571304939481_e1.png
    0_1571304945793_e2.png

    1.2.5 搜索服务

    搜索服务是无状态服务,直接通过helm部署。
    0_1571304996263_S1.png

    1.3部署帆信基础服务

    帆信基础服务主要是提供聊天相关的平台级功能,作为整个帆信的服务总线。在部署之前,需要先准备好server的域名,以及苹果推送服务的APNs证书文件。准备若干台服务器(具体数量和部署规模相关),用来部署帆信基础服务,其中至少一台要有访问外网的权限,用于苹果消息推送。

    在Rancher的管理界面中点击Catalog Apps中选择“chat”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.0”版本,选择后会弹出Chat服务的具体配置信息:

    0_1571305064416_T12.png

    chat涉及的配置参数比较多,具体各个参数的含义如下:
    需要注意的是MEDIA_UPLOAD_URL和MEDIA_THUNBNAIL_URL以及MEDIA_DOWNLOAD_URL这几个地址是对接的网盘URL的地址,默认情况下不需要进行修改;

    确认上述的配置信息准确无误后,点击“Launch”进行部署。chat服务部署成功后,可以看到如下的详细列表:

    0_1571305115256_T13.png

    网关服务提供FinChat的所有访问入口,该服务主要提供服务的路由、路由配置初始化和一个可视化的管理面板,查看当前gateway的路由配置信息。

    在Rancher的管理界面中点击Catalog Apps中选择“gateway”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.0”版本,选择后会弹出gateway服务的具体配置信息:

    0_1571305166812_T14.png

    确认上述的配置信息准确无误后,点击“Launch”进行部署。服务部署成功后,可以看到如下详细的列表:

    0_1571305216939_T15.png

    gateway服务部署成功后,接下来继续部署platform相关的服务。在Rancher的管理界面中点击Catalog Apps中选择“platform”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.0”版本,选择后会弹出platform服务的具体配置信息:

    0_1571305250943_T16.png

    需要注意的是这里AS token 和HomeServer Token 以及Id需要和chat 的Stack中的配置信息保持一致,否则msg-bridge无法收到HomeServer 推送过来的消息。确认上述的配置信息准确无误后,点击“Launch”进行部署。服务部署成功后,可以看到如下详细的服务列表:

    0_1571305281551_T17.png

    在platform服务部署成功后,接下来继续部署Auth服务,该服务主要是对接客户的登录认证。

    在Rancher的管理界面中点击Catalog Apps中选择“auth”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.0”版本,选择后会弹出auth服务的具体配置信息:

    0_1571305317045_T18.png

    确认上述的配置信息准确无误后,点击“Launch”进行部署。Auth服务部署成功后,可以看到如下的详细信息:

    0_1571305345596_T19.png

    部署完auth服务之后,接下来继续部署adapter服务,该服务主要用于对接用户登录认证的适配。

    在Rancher的管理界面中点击Catalog Apps中选择“adapter”这个Stack, 点击“View Details”进入到这个Stack的详细信息页面,在“Template Version”选择“1.0.2”版本,选择后会弹出adapter服务的具体配置信息:

    0_1571305381993_T20.png

    上述小程序的APP_ID和APP_SECRET需要根据实际的使用情况进行配置。确认上述的配置信息准确无误后,点击“Launch”进行部署。

    1.5服务对接

    FinChat部分服务提供了接口对接功能,灵活的对接第三方系统。

    1.5.1 账户登入接口

    FinChat自带了一套完整的账户体系,以及账户的登入校验功能。如果要自定义账户登入,需要按照接口规范实现登入接口。例如,可以按照接口规范实现从LDAP进行账户密码的校验。
    在线文档地址:https://api.finogeeks.club/api/docs/#api-Adapter-PostApiV1ProviderLogin

    按照文档实现接口,并部署在服务器后,需要修改FinChat的服务配置参数,让新的账户登入生效。
    具体步骤是:
    (1)登入 rancher的管理后台,查找到auth应用栈下的auth-center服务
    (2)点击升级,修改环境变量 login_provider.url 的值为上文提到的登入服务的URL

    0_1571305477123_U1.png

    1.5.2 通讯录接口

    帆信为员工端提供了通讯录功能,默认情况下通讯录中的内容是从组织架构中获取。如果想要按照自己的需求灵活定制通讯录,用于展示个性化的组织架构,需要按规范实现通讯录接口。

    在线文档地址:https://api.finogeeks.club/api/docs/#api-Adapter-GetApiV1FscUsersFcidContacts

    https://api.finogeeks.club/api/docs/#api-Adapter-GetApiV1FscUsersFcidContactsContacttype

    https://api.finogeeks.club/api/docs/#api-Adapter-GetApiV1FscUsersFcidContactsContacttypeId

    https://api.finogeeks.club/api/docs/#api-Adapter-GetApiV1FscUsersFcidProfilesMyidXxx

    https://api.finogeeks.club/api/docs/#api-Adapter-GetApiV1FscLocalSearchArgXxxContacttypeBranchesMyidXxx

    按照文档实现接口,并部署在服务器后,需要修改帆信的服务配置参数,让新的通讯录生效。

    具体步骤是:

    (1) 登入 rancher的管理后台,查找到platform应用栈下的platform-api服务
    (2) 点击升级,修改环境变量CONTACTSERVER 的值为自定义通讯录服务的URL
    (3) 修改Kong API网关 通讯录 相关的 配置, 修改 adapter-contacts 对应的URL

    0_1571305555033_C1.png

    0_1571305560669_C2.png

    修改网关接口路由
    gateway-dashboard的宿主机IP地址访问gateway的dashboard,默认是从30001端口,默认账户密码 admin/admin159357。 Dashboard的默认访问URL地址为:
    http://host_ip:30001/, 这里的host_ip为dashboard所在服务的宿主机外网IP地址;

    修改adapter-contacts 的 upstream_url为自定义的通讯录服务的URL

    0_1571305629609_L1.png

    0_1571305635491_L2.png

    1.5.3 账户初始化

    如果采用自定义的账户登入服务,需要调用帆信的账户初始化接口,该账户才能正常使用。

    客户登入成功后需要调用的接口:
    https://api.finogeeks.club/api/docs/#api-Platform_Initial_Service-PostApiV1FcInitAppsApptypeFcidTokenXxx

    https://api.finogeeks.club/docs/business/#api-Swan_Customer-PostApiV1SwanRetailRegister

    员工登入成功后需要调用的接口:
    https://api.finogeeks.club/api/docs/#api-Platform_Initial_Service-PostApiV1FcInitAppsApptypeFcidTokenXxx

    https://api.finogeeks.club/docs/business/#api-Swan_Manager-PostApiV1SwanManagerStaff

    1.5.4 单个Pod升级方法

    进入到从Workloads 点击进入 Pod的页面,
    然后点击edit 修改docker镜像的版本号或环境变量,
    最后点击upgrade进行升级。

    0_1571305732774_P21.png

    2、机器负载说明

    基于上述的部署方案,以下说明服务运行时需要的硬件资源信息。

    2.1 zookeeper服务

    服务名称 内存占用 CPU占用 磁盘 可伸缩
    zookeeper 250M % 10G 是(3实例)
    总计 750M 30G -

    2.2 kafka服务

    服务名称 内存占用 CPU占用 磁盘 可伸缩
    kafka 1.3G % 100G 是(3实例)
    总计 3.9G 300G -

    2.3 postgres服务

    服务名称 内存占用 CPU占用 磁盘 可伸缩
    postgres 800M % 100G (主从)
    总计 1.6G 200G -

    2.4 minio服务

    服务名称 内存占用 CPU占用 磁盘 可伸缩
    minio 150M % 200G 是(3实例)
    总计 450M 600G -

    2.5 redis服务

    服务名称 内存占用 CPU占用 磁盘 可伸缩
    redis 250M % 10G 是(3实例)
    总计 750M 30G -

    2.6 mongo服务

    服务名称 内存占用 CPU占用 磁盘 可伸缩
    mongo 1G % 100G 是(3实例)
    总计 3G 300G -

    2.7 gateway服务

    服务名称 内存占用 CPU占用 磁盘 可伸缩
    gateway 500M % 500M 是(2实例)
    dashboard 30M %
    总计 1030M 1G -

    2.8 platform服务

    服务名称 内存占用 CPU占用 磁盘 可伸缩
    bot-center 500M % 500M
    desktop 30M % 500M
    init-server 40M % 500M
    msg-bridge 42M 500M
    netdisk 50M 500M
    platform-api 60M 500M
    publish-center 600M 500M
    push-service 50M 500M
    qrcode-server 66M 500M
    rcs-server 300M 500M
    tag-server 7M 500M
    widget-server 300M 500M
    总计 2G 6G

    2.9 auth服务

    服务名称 内存占用 CPU占用 磁盘 可伸缩
    auth-center 200M % 1G
    总计 200M 1G

    2.10 adapter服务

    服务名称 内存占用 CPU占用 磁盘 可伸缩
    login-provider 40M % 1G
    总计 40M 1G

    2.11 chat服务

    服务名称 内存占用 CPU占用 磁盘 可伸缩
    proxy 180M % 2G
    as 40M % 2G
    front 500M 2G
    loader 40M 2G
    persist 70M 2G
    push 30M 2G
    sync 5G 2G
    总计 6G 14G

    根据上述的服务统计,大约需要内存:24G以上,磁盘:1.5T以上。以上信息是环境运行时需要的资源。如果在实际使用中用户的访问量突然增加,需要根据实际情况调整机器资源。


Locked