点击上方蓝色文字关注我们
大家好,这次给大家带来的问题解决方法,还是在实战中研究出来的,非常实用,下面我们不说废话,直接上干货。
我们在客户现场遇到的问题是这样的(由于安全原因,未能截图,请谅解),客户会定期会针对DB与PROXY进行扩容,为产出更多的实例供应用系统使用(DB与Proxy扩容步骤将会在最后也发给大家),但是在每次扩容完成后创建实例的时候,都会卡在70%左右不动。一般来说一个实例的正常创建时间在几分钟左右,但是70%一卡就是十几二十分钟,甚至二三十分钟都不会更进一步,我们也只能在到达一定时间之后,点击删除任务,再次尝试。 这个问题一到我这里,我首先就会想创建实例的流程。在上一期的文章中也有提到,实例的创建是赤免运营平台以jason格式通过http形式传参给OSS API,OSS调用创建实例的函数,然后在zookeeper创建job,通知manager(包括scheduler和manager)创建实例,manager在创建实例前要检查资源是否够,并且lock 资源后再创建资源。各位手中如果有环境资源的话可以去尝试一下,在赤兔平台的实例创建流程到达70%那一块时,已经lock住资源开始创建了,也可以去查看一下安装实例的日志:
#cd data/home/tdsql/tdsqlinstall/log/
#vim pkginstall.log.开头日志
#vim shell_pkginstall开头日志
复制
查看error记录或者看相应时间的记录,可以看出问题出在scheduler机器上,这个工作到了scheduler后便没有该有的记录了,于是再去看看scheduler的日志,发现日志非常多,几乎每个小时都会产生一个sys_scheduler开头的日志,大小不会超过955MB,然后看一下创建时间覆盖我们创建实例的时间段的日志,正好是最后一个,大小还未达到955MB,我便猜测可能是磁盘满了这个时间段的日志写不进去了。接着看一下磁盘的使用情况,发现已经达到了100%,于是清理一下时间比较久的日志,腾出一些空间来。返回赤兔平台删除卡住的任务重新创建,该问题解决。
schedur日志增长逻辑:在赤兔操作较频繁情况下,/目录磁盘使用会达到100%,导致实例创建Hang住。
当前/data/scheduler_log/sys_scheduler日志增长量与增长频率为每天增加26G左右,每天日志将占磁盘容量近30%。
日志增长逻辑:大致按每1小时递增一个sys_scheduler文件,每个大小不会超过1G,当到达954MB左右时,将会自动生成新sys_scheduler文件,后缀从‘当前日期.0’开始递增,步长为1。当天上限一般不会超过30G。
网关组扩容:
在主控机上添加newproxy.yml脚本
到tdsql_install/playbooks目录下
# vim newproxy.yml
添加如下内容:
- name: install newproxy beginning
hosts: newproxy
remote_user: root
gather_facts: false
roles:
- tdsql_beginning
- name: install proxy_module server
hosts: newproxy
remote_user: root
gather_facts: false
roles:
- tdsql_db_module
(1)修改tdsql_hosts文件内容
在ansible路径下的tdsql_hosts文件中添加类似如下内容
[newproxy]
newproxy1 ansible_ssh_host=1.1.1.1 <------------这里就写要添加的新的proxy机器的ip地址
newproxy2 ansible_ssh_host=2.2.2.2 <------------这里就写要添加的新的proxy机器的ip地址
(2)后台安装proxy
执行前确保新增的proxy机器的时间和集群中其它机器的时间同步和ansible机器到目标的免密登录
执行安装新proxy
# ansible-playbook -i tdsql_hosts playbooks/newproxy.yml
复制
(3)前台上报proxy机器和网关组扩容
前台上报新增proxy机器
前台网关组扩容
扩容成功后验证:
后台验证 新增proxy机器上执行 # ps –ef|grep proxy
DB资源扩容:
(1)修改newdb.yml文件内容
在ansible的路径下有一个newdb.yml文件
# cat tdsql_newdb.yml
- name: install db beginning <--------这一块是初始化机器
hosts: tdsql_newdb
remote_user: root
gather_facts: false
roles:
- tdsql_beginning
- name: install db_module server <--------这一块是推db包到机器上
hosts: tdsql_newdb
remote_user: root
gather_facts: false
roles:
- tdsql_db_module
- name: install hdfs_single on db <--------这一块是安装单点hdfs的客户端(2选1)
hosts: tdsql_newdb
remote_user: root
gather_facts: false
roles:
- hdfs_on_db_single
- name: install hdfs on db <--------这一块是安装高可用hdfs的客户端(2选1)
hosts: tdsql_newdb
remote_user: root
gather_facts: false
roles:
- tdsql_hdfs_on_db
根据实际的情况,如果没有部署hdfs的话,就删掉第3和第4块内容
如果部署的是hdfs单点架构的话,就删掉第4块内容
如果部署的是hdfs高可用架构的话,就删掉第3块内容
(2)修改tdsql_hosts文件内容
在ansible路径下的tdsql_hosts文件中添加类似如下内容
[tdsql_newdb]
tdsql_newdb1 ansible_ssh_host=1.1.1.1 <------------这里就写要添加的新的db机器的ip地址
tdsql_newdb2 ansible_ssh_host=2.2.2.2
tdsql_newdb3 ansible_ssh_host=3.3.3.3
(3)后台安装db
执行前确保新增的db机器的时间和集群中其它机器的时间同步
执行安装新db
ansible-playbook -i tdsql_hosts playbooks/tdsql_newdb.yml
(4)前台上报db机器资源
点击阅读“原文”,评论并留言