场景:不同客户部署的苍穹版本不一样,为了保持稳定性,不考虑升级苍穹。这样的话,就会存在多个版本的苍穹服务,那么多个版本苍穹,如何在同一个服务器上共存呢?是我们本次需要研究的内容。
首先,多套苍穹共享,通过在MC创建多集群实现。我们先从苍穹依赖的服务分析,哪些服务可以共享,哪些服务需要启动多个进程。
nginx服务:服务苍穹服务的转发,涉及到静态资源的访问。可公用,但需要修改或增加conf文件。
zookeeper服务:苍穹配置中心和注册中心,通过集群编码隔离,可公用。
redis服务:缓存数据中心,通过集群编码或数据中心id隔离,可公用。
rabbitmq服务:消息服务,不同的集群,可通过增加vhost隔离消息。可公用。
kafka服务:日志消息服务,可公用
logstash服务:日志解析服务,负责从kafaka读取日志并写入到es服务中。可公用,但要修改配置。
- elasticsearch服务:日志存储服务,通过索引为集群编码隔离,可公用。
- MC服务:苍穹管理服务,跟苍穹平台没有强依赖关系,可公用。
- mservice服务:苍穹服务,启动需要从appstore拉取jar包,不能公用。
- mservice-qing服务:轻分析服务,启动需要从appstore拉取jar包,不能公用。
- mysql/postgresql服务:数据库服务,通过数据库隔离,可公用,需要多套数据中心,增大数据库开销。
- fileserver服务:通过数据中心隔离,可公用。
针对上一步的分析,做个简单的总结:
1. zookeeper,redis,kafka,elasticsearch,fileserver,MC服务可以直接共享,不需要做任何调整
2. mservice,mservice-qing需要多套,根据集群编码启动。
3. mysql/postgresql数据库可以公用,但需要初始化多套数据中心, 会加大数据库的连接数。可通过安装多个数据库分担压力。
4. nginx,rabbitmq,logstash可公用,但要修改配置支持。
每增加一套苍穹,资源消耗也会随着增加,确保服务器有足够的资源,大体需要的额外资源如下:
1. 磁盘空间,每增加一套苍穹,appstore和静态资源都要多一份。
2. 数据库存储,每增加一套苍穹,需要多一套数据中心。
3. 每增加一套苍穹,需要启动新的mservice,mservice-qing服务,约4G内存消耗
4. 其他服务小额消耗,可不处理,定期关注服务器资源消耗情况即可。
理论分析完成,那么要如何操作可以达到我们想要的效果呢?本文以linux苍穹为例,其他方式搭建的苍穹,可灵活调整。
假设苍穹安装目录为/kingdee,新加的苍穹集群编码为demo
1. 在苍穹安装目录/kingdee下创建"cosmic_集群编码"的目录,例如cosmic_demo,将/kingdee/cosmic目录下的mservice和mservice-qing服务,复制到/kingdee/cosmic_demo目录下。
2. 进入到新苍穹目录/kingdee/cosmic_demo目录下,修改mservice和mservice-qing服务下/bin/setappenv.sh文件的APPSTORE_URL,clusterNumber和WEB_PORT值。如下:
3. 配置service服务,将/usr/lib/systemd/system目录下的mservice.service和mservice-qing.service服务复制一份,以“mservice_集群编码”格式命令。例如mservice.service复制成mservice_demo.service,并修改内容,如下:
4. 修改完成后,新的苍穹服务还不能正常启动,因为修改了APPSTORE_URL地址,而nginx的配置还没修改,因此启动会失败。那么我们现在来修改nginx。在/usr/local/nginx/conf/conf.d/目录下,复制ierp.conf文件,修改监听端口并调整/ierp拦截跳转的服务地址和访问静态资源的跳转。
5. 转发规则已经配置完成了,但是appstore和静态资源还没上传多份。在/var/appstatic/appstore目录下,创建"cosmic_集群编码“的目录,将新苍穹的appstore复制到这个目录下。在/var/appstatic/static-files/创建创建"cosmic_集群编码“的目录,上传新苍穹的静态资源到该目录下的webapp目录下。
6. 修改完成后重启nginx。到此nginx处理完成。新苍穹还是不能正常启动,我们处理了appstore和静态资源,接下来我们处理元数据,也就是在数据库服务,创建数据中心,并导入数据文件。(若有多个数据库,不需要执行当前步,在MC数据库管理维护记录即可)
7. rabbitmq新增vhost,vhost值可以用“集群编码”,如下图:
8. 登录MC服务,创建集群,创建租户,新增数据中心,绑定建库规则。保存后发布zk。
9. 重启mservice_demo和mservice-qing_demo服务,到此苍穹可以正常访问了。
10. 苍穹能正常访问之后,我们来处理日志服务。日志服务只需要处理logstash服务,路径:苍穹安装目录/elk/logstash/logstash-6.8.0/config,修改javalog.conf,复制大框的内容,按格式修改小框的信息。如下图:
总结:最后,回顾整个过程,步骤并不多,说复杂其实也不难,需要我们对整个苍穹服务有深刻的理解,熟悉各组件之间的关系逻辑,就能做出来。如若上述内容有错误的地方,欢迎大家指导~
推荐阅读