腾讯蓝鲸自动化运维平台简介部署及常见报错解决

前言

腾讯蓝鲸智云,简称蓝鲸,是一套基于 PaaS 的技术解决方案,提供了完善的前后台开发框架、调度引擎、公共组件等模块,帮助业务的产品和技术人员快速构建低成本、免运维的支撑工具和运营系统。 目前,腾讯蓝鲸智云团队秉承着开放共赢的态度,正逐渐开放其自主研发的一套具有多项探索式创新的体系—蓝鲸智云软件体系。该套体系不仅提供了基础运维(发布变更、监控处理、数值调整、数据提取等)的无人值守服务,而且还给运维人员提供了解决方案(工具),并随时调整,避免重复性的操作服务。而运维人员则可以做些“用户体验优化”和“运营决策辅助”等运维增值工作,并且可以通过蓝鲸智云提供的集成平台,低成本的学习 DevOps技能,进一步提升自己的能力,加速转型。此外,这套体系还可以运行轻应用、管理类、及职能类应用,是个全方位的运维、管理平台。 腾讯蓝鲸智云,运维领域的一张新名片,正在多个层次、多个领域崭露着头角,逐渐释放着自身特有的价值,引领着行业新标杆,开创了运维体系 2.0 的新局面。

体系介绍

腾讯蓝鲸智云体系由平台级产品和通用 SaaS 服务组成,平台包括管控平台、配置平台、作业平台、数据平台、容器管理平台、挖掘平台、PaaS 平台、移动平台等,通用 SaaS 包括节点管理、标准运维、日志检索、蓝鲸监控、故障自愈等,为各种云(公有云、私有云、混合云)的用户提供不同场景、不同需求的一站式技术运营解决方案。

部署蓝鲸

开始安装蓝鲸社区版前,需按以下文档指南,做好准备工作。

获取安装包

蓝鲸社区版包含部署脚本、产品软件和开源组件。蓝鲸提供完整包与分包的下载通道,请自行到下载地址按需获取。新装环境及新用户建议下载完整包使用。

代码语言:javascript
复制
#	下载地址: https://bk.tencent.com/download/
#	下载完成后,请核对MD5码。

硬件选择

对于蓝鲸部署所需的硬件配置选型,并无定规。蓝鲸由众多开源组件和自研组件构成。 开源组件的硬件选型可以参考相应的官方文档,参见附录。

蓝鲸产品本身的建议配置如下:

代码语言:javascript
复制
# PaaS: 2核4G
# Cmdb: 2核2G
# Job: 2核4G
# Bkdata: 4核12G
# fta: 1核2G

如果硬件资源富余,可以一开始拆分搭建部署。若硬件资源不足,一开始可以混合搭建,注意观测资源消耗情况,可以适时增加机器,迁移模块的方式来保证整体的可用性。 资源规划是一个复杂的、动态的过程,更像是一门艺术而不是科学。 这里给出的一个比较合理的初始配置,基于以下考虑:

  1. 分布式模块达到高可用至少三个节点,所以至少需要三个OS(物理机或虚拟机均可)
  2. Bkdata是耗费资源最多的蓝鲸组件。请分配到4核16G以上的机器。
  3. 若日志检索,蓝鲸监控是主要使用场景,请给influxdb和elasticsearch模块更多的内存,更好磁盘性能比如SSD。
  4. nginx模块所在的机器需要有对外提供服务,可访问的IP。这是蓝鲸平台的总入口。
  5. 如果需要有跨云管理需求,gse部署的机器需要有跨云的网络条件。

根据以上考虑,官方建议安装蓝鲸初始配置,请满足:

代码语言:javascript
复制
  机器数量	建议硬件最低配置	更优配置  
  3   	4核12G   	24核64G
  4   	4核10G   	24核64G
  5   	4核心8G   	12核32G
CentOS系统设置

准备好硬件,安装完原生CentOS系统后。我们需要对初始系统做一些配置,保证后续安装过程的顺畅,和蓝鲸平台的运行。注意:所有待安装蓝鲸的机器均需要按以下清单检查和操作。

代码语言:javascript
复制
# 实际环境配置

IP Hostname 系统版本 内存,CPU
172.19.0.24 rbtnode1 CentOS7.2.1511 8c30G
172.19.0.23 paas-1 CentOS7.2.1511 8c30G
172.19.0.28 mongodb-1 CentOS7.2.1511 8c30G

系统版本:
要求CentOS-7.0以上版本,推荐CentOS-7.5

初始化

关闭SELinux及默认防火墙(firewalld)

安装和运行蓝鲸时,模块之间互相访问的端口策略较多,建议对蓝鲸后台服务器之间关闭防火墙。

代码语言:javascript
复制
systemctl stop firewalld
systemctl disable firewalld &>/dev/null
setenforce 0

修改配置文件,禁止开机自启动

sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
curl -o /etc/yum.repos.d/163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo &>/dev/null
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo &>/dev/null

cat >> /etc/security/limits.conf <<EOF

  • soft nproc 65530
  • hard nproc 65530
  • soft nofile 65530
  • hard nofile 65530
    EOF
    ulimit -n 65535
    ulimit -u 20480

同步时间

yum -y install ntpdate
ntpdate -b ntp1.aliyun.com

检查是否有rsync命令,如果有返回rsync路径,可以跳过后面的命令

which rsync

安装rsync

yum -y install rsync

获取安装包
代码语言:javascript
复制
    https://bk.tencent.com/download/	# 建议下载5.0.4,坑相对少一点
[root@rbtnode1 ~]# mkdir /data # 创建一个目录,将安装包解压到这个目录
[root@rbtnode1 ~]# tar xvf bkce_src-5.0.4.tar.gz -C /data/
关闭NetworkManager
代码语言:javascript
复制
    systemctl disable NetworkManager.service
systemctl stop NetworkManager.service
给所有机器分配服务组件
代码语言:javascript
复制
[root@rbtnode1 install]# mv install.config.3IP.sample install.config
[root@rbtnode1 install]# cat install.config
172.19.0.24 nginx,appt,rabbitmq,kafka,zk,es,bkdata,consul,fta # 中控机
172.19.0.23 mongodb,appo,kafka,zk,es,mysql,beanstalk,consul
172.19.0.28 paas,cmdb,job,gse,license,kafka,zk,es,redis,consul,influxdb

appt和appo不能部署到同一台机器

gse和redis必须部署到同一台机器

获取证书
代码语言:javascript
复制
    [root@rbtnode1 install]# cat install.config |grep gse
172.19.0.28 paas,cmdb,job,gse,license,kafka,zk,es,redis,consul,influxdb

[root@rbtnode1 install]# cat install.config |grep license
172.19.0.28 paas,cmdb,job,gse,license,kafka,zk,es,redis,consul,influxdb

[root@hadoop-3 job]#  cat /sys/class/net/eno16780032/address 
00:0c:29:01:6e:0c

[root@blueking-1 install]# tar xvf /root/ssl_certificates.tar.gz -C /data/src/cert/
# 输入GSE/LICENSE所在服务器的MAC地址,多个MAC地址使用换行或英文分号分隔</code></pre></div></div><h6 id="e73o" name="%E5%87%86%E5%A4%87pip%E6%BA%90%E5%92%8CNginx%E6%BA%90">准备pip源和Nginx源</h6><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">(4.0版本需要准备,没有这个目录和文件,需要创建) 

5.0不需要

[root@rbtnode1 ~]# mkdir /data/src/.pip
[root@rbtnode1 ~]# vim /data/src/.pip/pip.conf
[global]
index-url = http://mirrors.aliyun.com/pypi/simple
trusted-host = mirrors.aliyun.com
[root@rbtnode1 install]# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm</code></pre></div></div><h6 id="3vip4" name="%E9%85%8D%E7%BD%AESSH%E5%85%8D%E5%AF%86%E7%99%BB%E9%99%86">配置SSH免密登陆</h6><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">    cd /data/install
bash configure_ssh_without_pass  # 根据提示输入各主机的 root 密码完成免密登陆配置</code></pre></div></div><h6 id="ags10" name="%E5%AE%89%E8%A3%85%E5%89%8D%E6%A0%A1%E9%AA%8C%E7%8E%AF%E5%A2%83%E6%98%AF%E5%90%A6%E6%BB%A1%E8%B6%B3">安装前校验环境是否满足</h6><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">cd /data/install

bash precheck.sh

到本地电脑配置本地hosts
代码语言:javascript
复制
    Windows10:  C:\Windows\System32\drivers\etc\hosts  文件末尾加上
172.19.0.24 nginx-1
172.19.0.24 paas.bk.com
172.19.0.24 cmdb.bk.com
172.19.0.24 job.bk.com
172.19.0.24 rbtnode1 # 此处172.19.0.24为nginx地址

Linux:  vim /etc/hosts				# 文件末尾加上下面三行
172.19.0.28   hadoop-3
172.19.0.24 paas.bk.com
172.19.0.24 cmdb.bk.com
172.19.0.24 job.bk.com</code></pre></div></div><h5 id="7dju3" name="%E5%AE%89%E8%A3%85%E5%90%84%E4%B8%AA%E5%8A%9F%E8%83%BD%E7%BB%84%E4%BB%B6">安装各个功能组件</h5><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">    ./bk_install paas
./bk_install cmdb
./bk_install job
./bk_install app_mgr
./bk_install saas-o bk_nodeman
./bk_install bkdata
./bk_install saas-o bk_monitor
./bk_install fta
./bk_install saas-o bk_fta
./bkcec install gse_agent
# 执行报错不要往下继续走了,解决完报错再继续</code></pre></div></div><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://cdn.static.attains.cn/app/developer-bbs/upload/1722944048071170432.png" /></div></div></div></figure><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://cdn.static.attains.cn/app/developer-bbs/upload/1722944048374446785.png" /></div></div></div></figure><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://cdn.static.attains.cn/app/developer-bbs/upload/1722944048563382524.png" /></div></div></div></figure><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://cdn.static.attains.cn/app/developer-bbs/upload/1722944048821573933.png" /></div></div></div></figure><h5 id="3houa" name="%E5%B8%B8%E8%A7%81%E6%8A%A5%E9%94%99">常见报错</h5><h6 id="9bi4l" name="cmdb">cmdb</h6><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">    # 重启机器后或者安装上cmdb报错502,404
# 修改/etc/resolv.conf,首行添加nameserver 127.0.0.1
# 在网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0,加上一行配置PEERDNS=no
# 保存后执行:
systemctl restart network
./bkcec stop all
./bkcec start all</code></pre></div></div><h6 id="2f1u6" name="gse%E5%90%AF%E5%8A%A8%E5%A4%B1%E8%B4%A5">gse启动失败</h6><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">    # 内网IP自动获取不对时
# LAN_IP表示GSE服务器真实可用的内网IP(ip addr输出查看),需要根据实际IP替换 修改以下配置文件项,新增相关配置,注意json格式,逗号问题。
# 配置文件在gse机器上,/data/bkce/etc/gse
# data.conf
&#34;datasvrip&#34;:&#34;LAN_IP&#34;,

# task.conf
&#34;tasksvrip&#34;:&#34;LAN_IP&#34;,
&#34;tasksvrthirftip&#34;:&#34;LAN_IP&#34;,
&#34;tasksvrtrunkip&#34;:&#34;LAN_IP&#34;,

# dba.conf
&#34;servers&#34;:[{&#34;ip&#34;:&#34;LAN_IP&#34;,&#34;port&#34;:58817}],

# btsvr.conf
&#34;filesvrthriftip&#34;:&#34;LAN_IP&#34;,
&#34;btServerOuterIP&#34;:[{&#34;ip&#34;:&#34;LAN_IP&#34;,&#34;port&#34;:59173}],
&#34;btServerInnerIP&#34;:[{&#34;ip&#34;:&#34;LAN_IP&#34;,&#34;port&#34;:59173}],
Copy

# api.conf
&#34;cacheApiAddr&#34;:[{&#34;ip&#34;:&#34;LAN_IP&#34;, &#34;port&#34;:59313}],
Copy

# agent.conf
&#34;agentip&#34;:&#34;LAN_IP&#34;,
./bkcec stop consul
./bkcec install consul 1
./bkcece start consul

./bkcec stop cmdb
./bkcec start cmdb

./bkcec stop gse
./bkcec start gse

# 如果以上方法还是不行,重装
./bkcec stop gse
./bkcec initdata cmdb
./bkcec install gse 1
./bkcec status gse</code></pre></div></div><h6 id="cjust" name="job">job</h6><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">    # 如果部署install job 时候最后报错出现Failed]-- http port 8008 start fail!
# 用lsof 去每台机器看lsof -i:8008,然后kill -9  指定pid,15杀不掉java进程

# 如果job一直启动不起来,访问报错502
# 按顺序,大部分执行
./bkcec start xxx
# rabbitmq用
systemctl start rabbitmq-server
./bkcec start job
./bkcec start gse_agent
./bkcec start appo
./bkcec start saas-o</code></pre></div></div><h6 id="20lan" name="%E8%8A%82%E7%82%B9%E7%AE%A1%E7%90%86">节点管理</h6><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">    # 如果部署节点管理命令行出现
# 2019-10-28 17:12:29 126  INFO    check deploy result. retry 102
# 2019-10-28 17:12:32 126  INFO    check deploy result. retry 103
# 2019-10-28 17:12:35 126  INFO    check deploy result. retry 104
# 这些提示,到130左右可以直接去开发者中心一键部署,如果报错超时可以再进行部署一次,如果还报错,去mysql里面删掉指定库,再创建一个相应库,修改超时时间,再部署

# 加入新的agent时候如果安装失败就再进行重装一遍,基本都能成功


remote: You must verify your email address.
remote: See https://github.com/settings/emails.
fatal: unable to access &#39;https://github.com/You-Men/Shell-Script.git/&#39;: The requested URL returned error: 403

# 节点管理安装agent无日志输出
# 登录appo所在机器
# /data/bkce/paas_agent/apps/logs/bk_nodeman/看日志报错
# 重新部署节点管理
# saas如何重装 :::: 在开发者中心--&gt;s-mart应用--&gt;找到需要重装的saas--&gt;点击部署</code></pre></div></div><h6 id="15ooa" name="Rabbitmq%E5%90%AF%E5%8A%A8%E5%A4%B1%E8%B4%A5">Rabbitmq启动失败</h6><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">    # 表象:在部署蓝鲸JOB过程中需要进行RabbitMQ的安装,数据初始化,激活步骤,此问题多发生在此过程
# 思路方法:如果是在添加用户和vhost时报错,那么说明启动rabbitmq-server没有成功,通过以下方式确认

# 查看进程是否存在
$ ps -ef | grep beam
# 查看监听端口是否存在(5672, 15672, 25672 三个端口必须都在)
$ netstat -tnlpu | grep 5672

#	若没有启动,通过systemctl start rabbitmq-server启动。若系统没有systemctl命令,通过service rabbitmq start启动
#	首先排查/data/bkce/etc/rabbitmq目录,对rabbitmq用户是否有读权限,/data/bkce/public/rabbitmq目录对rabbitmq用户是否有写权限
#	自己处理好目录的权限问题后,再尝试重启 rabbitmq-server


# rabbitmq activate失败
# 表象:此问题发生在./bk_install app_mgr,会发生如下报错
# 思路方法:
# 确认umask,若不是022,修改/etc/profile,然后source /etc/profile,再卸载rabbitmq,重新安装
# 确认在安装过程,或在 rabbitmq activate 前主机域名是否做过调整修改</code></pre></div></div><h6 id="9drr6" name="%E7%9B%91%E6%8E%A7">监控</h6><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">    # 部署bkdata报错:Job is required for bkdata. Please install job first :::: 确认job拉起后,可以自行追加 
# echo start job &gt;&gt; /data/install/.bk_install.step

# ./bkcec  initdata bkdata 	# 执行此条命令如果报以下错误
# [172.19.0.29]20191028-190202 13   create topic failed.
# [172.19.0.29]20191028-190202 130   migrate failed for bkdata(dataapi)

# 原因一、kafka broker节点缺失
# 若社区版为3台部署的,必须返回[1, 2, 3]才正常,示例如下 若brokers ids不为[1, 2, 3],可能存在/data/bkce/public/kafka/.lock文件,有的话,删除此文件,再重新使用./bkcec stop kafka和./bkcec start kafka重启kafka,重启完再次确认状态

[root@rbtnode1 /data/install]# /data/bkce/service/zk/bin/zkCli.sh -server zk.service.consul:2181 
# ls /common_kafka/brokers/ids
Connecting to zk.service.consul:2181
log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[1, 2, 3]

# ./bkcec stop kafka
# rm -rf /data/bkce/public/kafka/.lock
# ./bkcec install kafka 1
# ./bkcec start kafka
# ./bkcec initdata bkdata
# 检查下kafka状态是否正确,再执行
# ./bkcec stop bkdata dataapi
# ./bkcec initdata bkdata


# 部署Saas提示超时
#	到appo机器,修改paas_agent的paas_agent_config.yaml,将EXECUTE_TIME_LIMIT调大,重启paas_agent即可。
# vim /data/bkce/paas_agent/paas_agent/etc/paas_agent_config.yaml
# EXECUTE_TIME_LIMIT: 300   &lt;可修改为900&gt;
# ./bkcec stop appo
# ./bkcec start appo</code></pre></div></div><h6 id="7bthh" name="%E5%8A%A0%E5%85%A5%E6%96%B0%E7%9A%84Paas">加入新的Paas</h6><blockquote><p> 如果部署新的paas模块报错,直接去mysql数据库删掉对应库,再创建对应库,再去开发者中心一键部署,如果卡顿或者没报错可以点下重新部署,多来两次,不行再去删掉对应库,再创建,基本除了监控,节点管理,其他的paas都是这样安装成功