• 蓝鲸维护说明
    • 统一术语
    • 登陆指定服务器
    • 查看日志
    • 组件的启动停止
      • supervisor托管
      • GSE
      • 开源组件
        • Java
        • Golang/C/C++
        • erlang
      • 蓝鲸组件
      • 第三方组件
    • 磁盘清理
    • 变更域名
    • 全站http切换https
    • 变更 DEFAULT_HTTP_PORT 端口
    • 更新cert
    • 迁移服务
    • 单机部署增加一台appt
    • 健康检查
    • 机器重启后

    蓝鲸维护说明

    统一术语

    • 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_IP,cmdb所在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 # 测试环境