- 蓝鲸维护说明
- 统一术语
- 登陆指定服务器
- 查看日志
- 组件的启动停止
- 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模块所在服务器查看相关日志:
source utils.fc
这个命令用来加载环境变量(/data/install/.env)和蓝鲸安装维护的函数(/data/install/.{rc,fc})。文档中,凡是提到查看xx函数的地方,可以用以下方法找到:
source utils.fc; type 函数名
,例如想看 initdata_rabbitmq 做了什么事情,请运行type initdata_rabbitmq
,返回的内容里可能也有没见过的函数调用,那继续使用type 函数名
来查看grep "函数名 ()" .rc *.fc
通过过滤函数定义,来寻找位置- 编辑器内的搜索跳转。
ssh $JOB_IP
因为/data/install/config.env
里通过解析install.config,生成了模块对应的IP,所以,我们可以直接用 $MODULE_IP 这样的方式来访问。MODULE,用install.config里模块名的大写形式进行替换。譬如 bkdata所在的IP为$BKDATA_IP
,cmdb所在IP为$CMDB_IP
,依此类推。
也可以输入$
符号后,用<tab>
补全试试。
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>
方式来整体启停进程,但了解每个组件的手动启停方式也有助于运维好蓝鲸。另外需要特别注意的是,开源组件里分布式架构的kafka
、zk
、consul
,这些尽量逐个启停。
下面分三类来介绍不同组件的启停命令
supervisor托管
supervisord和supervisorctl都会使用python虚拟环境(virtualenv)来单独安装隔离。每个模块对应的虚拟环境名称,可以在机器上输入workon
命令查看。
特别注意的是:consul使用全局的/opt/py27/bin/supervisord
和/opt/py27/bin/supervisorctl
supervisor托管的分两级维度,module和project,project可以单独启停。
例如
./bkcec stop paas esb
./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的进程:
# 进入虚拟环境
workon dataapi
# 启动
supervisord -c /data/bkce/etc/supervisor-bkdata-dataapi.conf
#临时停止,但不退出supervisord
supervisorctl -c /data/bkce/etc/supervisor-bkdata-dataapi.conf stop all
# 完全退出,包括supervisord
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 匹配上新的域名
- 修改完成后按如下命令顺序执行:
./bkcec clean cron # V4.0版本及以前的需要执行,V4.1以后的无需执行
./bkcec sync common
echo fta bkdata job cmdb paas nginx | xargs -n 1 ./bkcec stop
echo fta bkdata job cmdb paas nginx | xargs -n 1 ./bkcec render
echo nginx paas cmdb job bkdata fta | xargs -n 1 ./bkcec start
./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'即可,然后执行相同步骤即可
./bkcec sync common
./bkcec install nginx
./bkcec stop nginx
./bkcec start nginx
echo job cmdb paas | xargs -n 1 ./bkcec stop
echo job cmdb paas | xargs -n 1 ./bkcec render
echo job cmdb paas | xargs -n 1 ./bkcec start
echo job cmdb paas | xargs -n 1 ./bkcec status
变更 DEFAULT_HTTP_PORT 端口
安装好后的蓝鲸访问端口默认是80,如果安装成功后想修改它,需要按以下步骤:
- 修改 ports.env 文件里的
DEFAULT_HTTP_PORT
值为新的端口 - 同步配置到其他机器:
./bkcec sync common
- 渲染涉及到的进程的模块文件
./bkcec render $module
知道如何操作以及为什么需要这样操作:
修改DEFAULT_HTTP_PORT后,PAAS_HTTP_PORT CMDB_HTTP_PORT JOB_HTTP_PORT,这些端口都发生了变化。我们需要了解哪些配置文件模板引用了他们。所以,执行命令:
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操作
echo cmdb job gse paas appo bkdata fta | xargs -n 1 ./bkcec render
appo(paas_agent)的配置需要一个特殊操作:
./bkcec initdata appo
nginx和miniweb较为特殊,需要以下命令:
./bkcec install nginx
./bkcec stop nginx
./bkcec start nginx
重启其余进程:
for module in cmdb job gse paas appo bkdata fta; do ./bkcec stop $module ; sleep 2; ./bkcec start $module ;done
更新cert
有时候 gse 和 license 所在服务器的mac地址发生了变化,此时证书需要重新从官网生成下载。然后操作更新证书的步骤。
中控机上解压新的证书
cd /data/src/cert && rm -f *
tar -xvf /data/ssl_certificates.tar.gz -C /data/src/cert/
操作更新相关组件
source /data/install/utils.fc
for ip in ${ALL_IP[@]}; do
_rsync -a $PKG_SRC_PATH/cert/ root@$ip:$PKG_SRC_PATH/cert/
_rsync -a $PKG_SRC_PATH/cert/ root@$ip:$INSTALL_PATH/cert/
done
for ip in ${JOB_IP[@]}; do
rcmd root@$ip "gen_job_cert"
done
./bkcec stop license
./bkcec start license
./bkcec stop job
./bkcec start job
./bkcec install gse 1
./bkcec stop gse
./bkcec start gse
./bkcec stop bkdata
./bkcec start bkdata
./bkcec stop fta
./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 免密登陆
除非特别指出,在中控机上依次执行以下命令,每一个命令成功后,再继续下一个:
# 同步install.config更改
./bkcec sync common
# 同步基础依赖 consul
./bkcec sync consul
# 同步 bkdata 模块
./bkcec sync bkdata
# 安装 consul
./bkcec install consul
# 重启 consul
./bkcec stop consul
./bkcec start consul
# 安装 bkdata
./bkcec install bkdata
# 给新机器授予mysql权限
./bkcec initdata mysql
# 给新的bkdata补上初始化标记文件
ssh $BKDATA_IP 'touch /data/bkce/.dataapi_snaphost'
# 启动新的bkdata
./bkcec start bkdata
登陆到老的bkdata机器,将标记文件 /data/bkce/.installed_module 文件中的bkdata行删除:
sed -i '/bkdata/d' /data/bkce/.installed_module
其余模块的迁移流程大致和bkdata类似。只是部分模块有一些特殊注意事项需要额外做一些操作。列举如下:
- PaaS迁移。因为PaaS IP地址发生了改变,而Job的配置文件job.conf中,有一项api.ip.whitelist配置,需要随之修改。可以在迁移完PaaS后运行如下命令自动修改生效。
./bkcec render job
./bkcec stop job
./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, 新增一行
10.0.0.2 appt
并将原来install.config第一行中的appo,appt
换成appo
。
- 对10.0.0.2配置好ssh免密登陆。
- 依次运行以下命令开始安装appt
./bkcec sync common
./bkcec sync consul
./bkcec sync appt
./bkcec install consul
./bkcec stop consul
./bkcec start consul
./bkcec install appt
./bkcec initdata appt
./bkcec start appt
./bkcec activate appt
- 查看开发者中心->服务器信息中,类别为《测试服务器》的信息是否正确,状态是否激活。
健康检查
蓝鲸产品后台提供了健康检查的接口,用HTTP GET请求访问,接口地址和端口用变量表达:
cd /data/install && source utils.fc
# PAAS 注意URL末尾带上/
curl http://$PAAS_FQDN:$PAAS_HTTP_PORT/healthz/
# CMDB(beta),目前版本不够准确
curl http://$CMDB_IP:$CMDB_API_PORT/healthz
# JOB
curl http://$JOB_FQDN:$PAAS_HTTP_PORT/healthz
蓝鲸监控SaaS的监控检查接口,可以用浏览器直接访问:
http://$PAAS_FQDN:$PAAS_HTTP_PORT/o/bk_monitor/healthz/
机器重启后
- 确认 /etc/resolv.conf 里第一个nameserver是
127.0.0.1
,option
选项不能有rotate
- 检查重启机器的crontab,是否有自动拉起进程的配置
crontab -l | grep process_watch
,重启后的自动拉起主要靠crontab - 中控机上确认所有进程状态:
./bkcec status all
, 正常情况下应该都是正常拉起RUNNING状态,如果有EXIT的,则尝试手动拉起。手动拉起的具体方法参考组件的启动停止 如果社区版所有机器同时重启,很大概率会有很多进程启动失败,因为不同机器上组件恢复的时间没法控制,导致依赖的组件还没启动起来,导致失败,连锁反应。所以这种情况,遵循和安装时的启动原则:
- 先启动db
- 启动依赖的其他开源组件及服务
- 启动蓝鲸产品
- 如果已经部署过SaaS,那么手动拉起。
./bkcec start saas-o # 正式环境
./bkcec start saas-t # 测试环境