蓝鲸维护说明

统一术语

  • INSTALL_PATH安装路径,默认为/data/bkce
  • CTRL_PATH安装维护脚本所在目录,默认为 /data/install
  • PKG_SRC_PATH组件原始包解压目录,默认为 /data/src
  • 中控机安装蓝鲸后台服务器中,选一台作为中控机,安装蓝鲸和运维蓝鲸,一般均从这台机器开始。
  • source utils.fc一些操作需要加载蓝鲸环境变量和函数后才能调用,此为cd $CTRL_PATH/ && source utils.fc的简写
  • bkcec <command> <module>若无特殊说明,含义是:cd $CTRL_PATH && ./bkcec <command> <module>
    下面提到路径时,均以默认路径为例,请根据实际安装路径修改相关命令。

登陆指定服务器

一般维护操作时,均从中控机出发,跳转到其他模块服务器进行操作。

假设发现job模块启动失败,想登陆到job模块所在服务器查看相关日志:

  1. source utils.fc

这个命令用来加载环境变量(/data/install/.env)和蓝鲸安装维护的函数(/data/install/.{rc,fc})。文档中,凡是提到查看xx函数的地方,可以用以下方法找到:

  • source utils.fc; type 函数名,例如想看 initdata_rabbitmq 做了什么事情,请运行 type initdata_rabbitmq,返回的内容里可能也有没见过的函数调用,那继续使用type 函数名来查看
  • grep "函数名 ()" .rc *.fc 通过过滤函数定义,来寻找位置
  • 编辑器内的搜索跳转。
  1. ssh $JOB_IP

因为/data/install/config.env里通过解析install.config,生成了模块对应的IP,所以,我们可以直接用 $MODULE_IP 这样的方式来访问。MODULE,用install.config里模块名的大写形式进行替换。譬如 bkdata所在的IP为$BKDATA_IPcmdb所在IP为$CMDB_IP,依此类推。

也可以输入$符号后,用<tab>补全试试。

  1. cd /data/bkce/logs/job

所有的组件日志均在$INSTALL_PATH/logs/$MODULE/ 目录下。

于是想看job相关的日志,登陆到Job服务器后,切换到cd /data/bkce/logs/job 目录即可看到所有job模块的日志。

查看日志

日志文件统一在 /data/bkce/logs/下,按模块名,组件名分目录存放。

SaaS较为特殊,在/data/bkce/paas_agent/apps/logs下,根据AppCode名分目录存放。

组件的启动停止

一般情况,可以在中控机用bkcec start/stop <module> <project>方式来整体启停进程,但了解每个组件的手动启停方式也有助于运维好蓝鲸。另外需要特别注意的是,开源组件里分布式架构的kafkazkconsul,这些尽量逐个启停。

下面分三类来介绍不同组件的启停命令

supervisor托管

supervisord和supervisorctl都会使用python虚拟环境(virtualenv)来单独安装隔离。每个模块对应的虚拟环境名称,可以在机器上输入workon命令查看。

特别注意的是:consul使用全局的/opt/py27/bin/supervisord/opt/py27/bin/supervisorctl

supervisor托管的分两级维度,module和project,project可以单独启停。

例如

  1. ./bkcec stop paas esb
  2. ./bkcec start paas esb

使用supervisor托管的模块如下:

  • bkdata/{monior,databus,dataapi}
  • paas_agent
  • open_paas (即paas)
  • fta (fta比较特殊,单独封装了/data/bkce/fta/fta/bin/fta.sh 启停脚本)
  • cmdb-server (cmdb的后台进程)
  • consul(使用全局supervisor)
    bkdata/dataapi为例,单独启动dataapi的进程:
  1. # 进入虚拟环境
  2. workon dataapi
  3. # 启动
  4. supervisord -c /data/bkce/etc/supervisor-bkdata-dataapi.conf
  5. #临时停止,但不退出supervisord
  6. supervisorctl -c /data/bkce/etc/supervisor-bkdata-dataapi.conf stop all
  7. # 完全退出,包括supervisord
  8. supervisorctl -c /data/bkce/etc/supervisor-bkdata-dataapi.conf shutdown

其他模块依此类推,不再赘述。

GSE

gse组件分为gse后台,gse客户端,gse插件分别对应三个不同的启停进程:

  • gse后台服务端:/data/bkce/gse/server/bin/gsectl [start|stop|restart] <module>
  • gse客户端(agent): `/usr/local/gse/agent/bin/gsectl [start|stop|restart]
  • gse插件进程(plugin):/usr/local/gse/plugins/bin/{stop,start,restart}.sh <module>

开源组件

Java

  • es: 切换到es用户执行 /data/bkce/service/es/bin/es.sh start
  • zk: /data/bkce/service/zk/bin/zk.sh start
  • kafka: /data/bkce/service/kafka/bin/kafka.sh start

Golang/C/C++

  • nginx: nginx 或者nginx -s reload
  • beanstalk: nohup beastalkd -l $LAN_IP -p $BEANSTALK_PORT &>/dev/null &
  • mysql: /data/bkce/service/mysql/bin/mysql.sh start
  • mongodb: /data/bkce/service/mongodb/bin/mongodb.sh start

erlang

  • rabbitmq: systemctl start rabbitmq-server

蓝鲸组件

  • license: /data/bkce/license/license/bin/license.sh start
  • job: /data/bkce/job/job/bin/job.sh start
  • saas-o/saas-t: 从/data/bkce/paas_agent/apps/Envs/*下遍历workon home,然后使用apps用户调用supervisord拉起进程。

第三方组件

  • bknetwork: /data/bkce/bknetwork/bknetwork/bin/nms.sh start >/dev/null 2>&1

磁盘清理

可能产生比较大数据量的目录有:

  • /data/bkce/logs
  • /data/bkce/public
  • /data/bkce/service
    logs 目录可以按需设置自动清理N天前的日志。

public 目录一般不能手动删除,一般比较大的组件可能有

  • mysql数据库太大
  • kafka 数据
  • elasticsearch 数据

变更域名

  • 修改 globale.env 中的域名配置信息。
  • 修改 每台机器上的/etc/hosts 匹配上新的域名
  • 修改完成后按如下命令顺序执行:
  1. ./bkcec clean cron # V4.0版本及以前的需要执行,V4.1以后的无需执行
  2. ./bkcec sync common
  3. echo fta bkdata job cmdb paas nginx | xargs -n 1 ./bkcec stop
  4. echo fta bkdata job cmdb paas nginx | xargs -n 1 ./bkcec render
  5. echo nginx paas cmdb job bkdata fta | xargs -n 1 ./bkcec start
  6. ./bkcec install cron # V4.0版本及以前的需要执行,V4.1以后的无需执行

如果有安装SaaS,到开发者中心-Smart应用-已上线的SaaS操作栏里的部署按钮,重新一键部署SaaS

全站http切换https

  • 修改 globale.env 中的HTTP_SCHEMA='https'
  • 修改完成后按如下命令顺序执行:
  • 全站https切换http,只需要修改globale.env 中的HTTP_SCHEMA='http'即可,然后执行相同步骤即可
  1. ./bkcec sync common
  2. ./bkcec install nginx
  3. ./bkcec stop nginx
  4. ./bkcec start nginx
  5. echo job cmdb paas | xargs -n 1 ./bkcec stop
  6. echo job cmdb paas | xargs -n 1 ./bkcec render
  7. echo job cmdb paas | xargs -n 1 ./bkcec start
  8. echo job cmdb paas | xargs -n 1 ./bkcec status

变更 DEFAULT_HTTP_PORT 端口

安装好后的蓝鲸访问端口默认是80,如果安装成功后想修改它,需要按以下步骤:

  • 修改 ports.env 文件里的 DEFAULT_HTTP_PORT 值为新的端口
  • 同步配置到其他机器:./bkcec sync common
  • 渲染涉及到的进程的模块文件
  1. ./bkcec render $module

知道如何操作以及为什么需要这样操作:

修改DEFAULT_HTTP_PORT后,PAAS_HTTP_PORT CMDB_HTTP_PORT JOB_HTTP_PORT,这些端口都发生了变化。我们需要了解哪些配置文件模板引用了他们。所以,执行命令:

  1. grep -lrE "(JOB|CMDB|PAAS|DEFAULT)_HTTP_PORT" /data/src/*/support-files/

发现,涉及的文件所在模块为:bkdata,cmdb,fta,gse,job,miniweb,open_paas,paas_agent,nginx。所以这些文件均需要重新render配置,然后重启模块生效。

以下模块需要render操作

  1. echo cmdb job gse paas appo bkdata fta | xargs -n 1 ./bkcec render

appo(paas_agent)的配置需要一个特殊操作:

  1. ./bkcec initdata appo

nginx和miniweb较为特殊,需要以下命令:

  1. ./bkcec install nginx
  2. ./bkcec stop nginx
  3. ./bkcec start nginx

重启其余进程:

  1. for module in cmdb job gse paas appo bkdata fta; do ./bkcec stop $module ; sleep 2; ./bkcec start $module ;done

更新cert

有时候 gse 和 license 所在服务器的mac地址发生了变化,此时证书需要重新从官网生成下载。然后操作更新证书的步骤。

中控机上解压新的证书

  1. cd /data/src/cert && rm -f *
  2. tar -xvf /data/ssl_certificates.tar.gz -C /data/src/cert/

操作更新相关组件

  1. source /data/install/utils.fc
  2. for ip in ${ALL_IP[@]}; do
  3. _rsync -a $PKG_SRC_PATH/cert/ root@$ip:$PKG_SRC_PATH/cert/
  4. _rsync -a $PKG_SRC_PATH/cert/ root@$ip:$INSTALL_PATH/cert/
  5. done
  6. for ip in ${JOB_IP[@]}; do
  7. rcmd root@$ip "gen_job_cert"
  8. done
  9. ./bkcec stop license
  10. ./bkcec start license
  11. ./bkcec stop job
  12. ./bkcec start job
  13. ./bkcec install gse 1
  14. ./bkcec stop gse
  15. ./bkcec start gse
  16. ./bkcec stop bkdata
  17. ./bkcec start bkdata
  18. ./bkcec stop fta
  19. ./bkcec start fta

proxy和agent的更新,需要把新的cert目录传到对应机器的路径:

  • agent: /usr/local/gse/agent/cert/
  • proxy: /usr/local/gse/proxy/cert/
    然后重启进程:

  • agent和proxy均为:/usr/local/gse/agent/bin/gsectl restart

迁移服务

假设想将 bkdata 模块从目前混搭的服务器上,迁移到一台新机器,可以按如下步骤操作:

  • 停掉原来服务器上的bkdata进程./bkcec stop bkdata
  • 修改 install.config 文件,新增一行 $ip bkdata ip为待迁移的机器IP,删除原ip所在行的bkdata
  • 新机器配置好中控机的 ssh 免密登陆
    除非特别指出,在中控机上依次执行以下命令,每一个命令成功后,再继续下一个:
  1. # 同步install.config更改
  2. ./bkcec sync common
  3. # 同步基础依赖 consul
  4. ./bkcec sync consul
  5. # 同步 bkdata 模块
  6. ./bkcec sync bkdata
  7. # 安装 consul
  8. ./bkcec install consul
  9. # 重启 consul
  10. ./bkcec stop consul
  11. ./bkcec start consul
  12. # 安装 bkdata
  13. ./bkcec install bkdata
  14. # 给新机器授予mysql权限
  15. ./bkcec initdata mysql
  16. # 给新的bkdata补上初始化标记文件
  17. ssh $BKDATA_IP 'touch /data/bkce/.dataapi_snaphost'
  18. # 启动新的bkdata
  19. ./bkcec start bkdata

登陆到老的bkdata机器,将标记文件 /data/bkce/.installed_module 文件中的bkdata行删除:

  1. sed -i '/bkdata/d' /data/bkce/.installed_module

其余模块的迁移流程大致和bkdata类似。只是部分模块有一些特殊注意事项需要额外做一些操作。列举如下:

  • PaaS迁移。因为PaaS IP地址发生了改变,而Job的配置文件job.conf中,有一项api.ip.whitelist配置,需要随之修改。可以在迁移完PaaS后运行如下命令自动修改生效。
  1. ./bkcec render job
  2. ./bkcec stop job
  3. ./bkcec start job

PaaS迁移后,Nginx上对PaaS的反向代理配置也需要跟随改变,Nginx需要重新渲染配置,重新加载配置。

单机部署增加一台appt

使用单机部署方案,虽然install.config里自动配置了appt和appo两个模块,但实际生效的只有appo。部署蓝鲸官方的SaaS,只需要appo即可。

用户如果有自己开发SaaS应用,提测时,平台会提示没有可用的测试环境。这时需要扩充一个appt环境。运维操作如下, 以下命令均在中控机上执行:

  • 新增一台服务器(假设IP为10.0.0.2)作为appt,机器配置1核1G以上即可,跑的测试SaaS越多,配置需求越高。
  • 登陆中控机,编辑install.config, 新增一行
  1. 10.0.0.2 appt

并将原来install.config第一行中的appo,appt换成appo

  • 对10.0.0.2配置好ssh免密登陆。
  • 依次运行以下命令开始安装appt
  1. ./bkcec sync common
  2. ./bkcec sync consul
  3. ./bkcec sync appt
  4. ./bkcec install consul
  5. ./bkcec stop consul
  6. ./bkcec start consul
  7. ./bkcec install appt
  8. ./bkcec initdata appt
  9. ./bkcec start appt
  10. ./bkcec activate appt
  • 查看开发者中心->服务器信息中,类别为《测试服务器》的信息是否正确,状态是否激活。

健康检查

蓝鲸产品后台提供了健康检查的接口,用HTTP GET请求访问,接口地址和端口用变量表达:

  1. cd /data/install && source utils.fc
  2. # PAAS 注意URL末尾带上/
  3. curl http://$PAAS_FQDN:$PAAS_HTTP_PORT/healthz/
  4. # CMDB(beta),目前版本不够准确
  5. curl http://$CMDB_IP:$CMDB_API_PORT/healthz
  6. # JOB
  7. curl http://$JOB_FQDN:$PAAS_HTTP_PORT/healthz

蓝鲸监控SaaS的监控检查接口,可以用浏览器直接访问:

  1. http://$PAAS_FQDN:$PAAS_HTTP_PORT/o/bk_monitor/healthz/

机器重启后

  • 确认 /etc/resolv.conf 里第一个nameserver是 127.0.0.1option选项不能有rotate
  • 检查重启机器的crontab,是否有自动拉起进程的配置 crontab -l | grep process_watch,重启后的自动拉起主要靠crontab
  • 中控机上确认所有进程状态:./bkcec status all, 正常情况下应该都是正常拉起RUNNING状态,如果有EXIT的,则尝试手动拉起。手动拉起的具体方法参考组件的启动停止
  • 如果社区版所有机器同时重启,很大概率会有很多进程启动失败,因为不同机器上组件恢复的时间没法控制,导致依赖的组件还没启动起来,导致失败,连锁反应。所以这种情况,遵循和安装时的启动原则:

    • 先启动db
    • 启动依赖的其他开源组件及服务
    • 启动蓝鲸产品
  • 如果已经部署过SaaS,那么手动拉起。
  1. ./bkcec start saas-o # 正式环境
  2. ./bkcec start saas-t # 测试环境