1000+节点的cdh集群主服务迁移全过程

Posted 涤生大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1000+节点的cdh集群主服务迁移全过程相关的知识,希望对你有一定的参考价值。

一. 迁移背景:

   由于种种原因,线上cdh集群的管理服务Cloudera Manager所在主机不能正常使用,Cloudera Manager相关的服务需要迁移到新的主机运行,且生产迁移不能影响任何生产环境的使用。

 

二. 迁移准备

    本次迁移主要涉及到的是Cloudera Manager相关的管理服务,下面我们回顾一下Cloudera Manager整体技术架构以及各个组件的核心作用和对应的数据存储。

 

    从Cloudera Manager整体技术架构我们可以发现,其核心点就是server部分,本次我们需要迁移的真是server部分,server部分包含的组件及作用具体如下:

1.1 Cloudera Manager Server

     默认支持两个存储方式,嵌入式 PostgreSQL 数据库和外部mysql、PostgreSQL 或 Oracle 数据库用来存储数据,此部分的存储数据对于集群很重要的,其中包括,集群、服务、角色的配置以及定义 Cloudera Manager 及其托管主机部署的其他必要信息。所有这部分的存储需要及时的备份和监控。

说明:这部分我们线上历史使用的是嵌入式 PostgreSQL 数据库且和server部分部署在同一个节点,所以也做了从嵌入式 PostgreSQL 数据库迁移数据到外部PostgreSQL 数据库此部分本文不做详解,可自行参考对应资料。

1.2 Activity Monitor

此部分一般也会选用数据库来存储,主要存储的是 MapReduce 作业的监控数据,默认的存储时间是14天,这部分我们可以根据实际使用情况进行自定义配置,具体详情会在安装录屏课中做详细的讲解. 经验来说保持默认值即可。

 1.3 Service Monitor

       默认的存储路路径在主机的 /var/lib/cloudera-service-monitor/ ,这个服务组件主要监控收集有关集群中已配置角色和服务的指标,并运行主动健康测试。这些运行状况测试与空闲和使用时间无关,因为它们总是相关的。无论集群中的活动水平如何,服务监视器都会收集指标和运行状况测试结果。即使在空闲集群中,这些数据也会继续增长。默认值也是10G左右,也可以在配置项中自定义更改。

1.4Host Monitor

默认的存储路径/var/lib/cloudera-host-monitor/,默认的存储也是占用10G大小,主机监视器收集有关主机级感兴趣项目的指标(例如:磁盘空间使用情况、RAM、CPU 使用情况、交换等),并通知主机健康测试。无论集群中的活动水平如何,主机监视器都会收集指标和运行状况测试结果。即使在空闲集群中,这些数据也会继续相当线性地增长。

1.5 Event Server

默认的本地存储路径:/var/lib/cloudera-scm-eventserver/,

事件服务器是一个托管的 Lucene 索引,它收集集群内发生的相关事件,例如健康测试的结果、当日志条目与一组用于识别感兴趣消息的规则匹配时创建的日志事件,并使它们可用于搜索、过滤和附加操作。您可以在 Cloudera Manager 管理控制台的诊断>事件选项卡上查看和过滤事件。您还可以使用 Cloudera Manager API 轮询此数据。

三. 开始迁移

整个的迁移分两部分来完成, cloudera-manager-server部分和Cloudera Management Service部分。下面是cloudera-manager-server部分的迁移(此部分是迁移的重点)。

1.cloudera-manager-server迁移流程如下

第一步:确定安装 Cloudera Manager 的新主机。并将新主机添加到现有的cm管理的集群中(具体步骤参考 cm添加agent的详细步骤)

第二步:在新的节点安装Cloudera Manager Server服务。

重要的:需要确保目标主机上的 Cloudera Manager Server 版本必须与源主机上的版本匹配

第三步:需要将/opt/cloudera/parcel-repo,/opt/cloudera/csd,/var/lib/cloudera-scm-server/路径下的所有数据从老节点拷贝到新的主机对应的路径下。

重要的:确保文件目录的权限为cloudera-scm。

第四步:更新/etc/cloudera-scm-server/db.properties文件中包含数据库名称、数据库实例名称、用户名和密码。

com.cloudera.cmf.db.type=postgresql
com.cloudera.cmf.db.host=localhost
com.cloudera.cmf.db.name=scm
com.cloudera.cmf.db.user=ds_scm
com.cloudera.cmf.db.password=ds_scm

重点:如果数据库不可用,需要迁移数据到新的数据库中,具体的可以参考数据库迁移的资料。

特别注意,如果使用的是mysql进行数据的存储,不要遗漏了对应路径下依赖jar包:/usr/share/cmf/lib/mysql-connector-java.jar

第五步:更改所有所有主机的agent相关的配置文件,然后重启所有agent服务。

 

补充说明:

这一部分的操作可以使用脚本批量化操作,这里给大家分享一个我们自己使用的ansible的批量执行的Playbooks 的配置文件。

cat change_agent_ip.yml

---
- hosts: all_agents
  gather_facts: F # 跳过gather_facts环节
  remote_user: root
  tasks:
  - name: "修改cm_agent配置文件的server-ip选项"
    lineinfile:
      path: /etc/cloudera-scm-agent/config.ini
      regexp: ' item.regexp '
      line: ' item.line '
      state: present
    with_items:
      - regexp: "^server_host"
        line: "server_host=10.90.48.134"
    notify:
      - restart cloudera-scm-agent
  handlers:
    - name: restart cloudera-scm-agent
      service:
        name: cloudera-scm-agent
        state: restarted

自动获取cm中所有agent节点ip的脚本

cat ds_get_agent.py

#!/bin/python2.7
# -*- coding:utf-8 -*-

import json,requests

if __name__ == '__main__':
    """
    配置集群cm_web IP和admin用户的登录密码
    """
    cdh_list = ['url': 'cm_web的ip+端口', 'name': "cm的登录用户", "password": "cm登录用户密码"]
    for cdh in cdh_list:
        datas = json.loads(requests.get("http://0/api/v13/hosts".format(cdh.get("url")),auth=(cdh.get("name"),cdh.get("password"))).content.decode('utf-8'))
    head_txt ='''[all:vars]
ansible_ssh_port=57522
[all_agents]
'''

    with open("agent.hosts", "w") as f:
        f.write(head_txt)
    for hosts in datas.get("items"):
        with open("agent.hosts", "a") as f:
            f.write(hosts.get('ipAddress'))
            f.write('\\n')

执行操作脚本:

cat run.sh

Python2 ds_get_agent.py #获取所有agent主机写入agent.hosts文件
ansible-playbook -i agent.hosts change_agent_ip.yml -f 30 #执行更换ip和重启操作

第六步:启动新节点的Cloudera Manager Server

重点:如果迁移过程中没有迁移数据库,在启动新的Cloudera Manager Server服务前需要关闭老的Cloudera Manager Server,否则会出现Cloudera Manager Server脑裂的问题,当然也可以在Cloudera Manager Server配置文件中添加对应的参数来规避。同时下面配置文件中关于jvm内存的配置,也需要和老节点保持一致。

cat /etc/default/cloudera-scm-server

export CMF_JAVA_OPTS="-Xmx4G -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Dcom.cloudera.server.cmf.components.scmActive.killOnError=false"

上述步骤操作完成,新节点的cm web 即可正常打开,此时需要重启一下Cloudera Management Service。

 

2. Cloudera Management Service部分迁移

     这一部分的迁移主要是集群cm控制台进行操作,相对来说比较简单,对应服务的数据因为都是监控类型的数据,所以如果想要保留,把对应的目录数据同步到新节点即可,如果不保留,将现有的服务组件删除,在新节点上重新添加即可。具体细节这里不在赘述。

四.  迁移后验证

在完成步骤三中的所有操作之后,等待5分钟左右,如果没有问题,cm页面上会恢复到健康状态。这时还是需要手动验证几个点,看是不是有异常。

  • 1.观察服务和主机的监控指标数据,是否正常更新展示。

  • 2.找一个slave节点,对其操作重启操作,看是否可以正常完成。

  • 3.修改某个服务的非核心配置文件,看页面上是否有配置变更的提示,然后再页面上分发配置,看是否可正常完成。

  • 4.如有条件,也可添加一个新的节点到集群,验证是否可以正常添加节点。

        本文由涤生大数据强哥分享,强哥前百度资深大数据运维,现任某上市公司大数据运维专家岗,运维集群数十个,节点上千台,是资深的cdh运维专家,在cdh运维这块有着丰富的经验和深入的理解。

       涤生大数据运维课程全部基于生产标准服务器录制课程,实战使用,目前十几家中小公司买我们的运维课程拿过去直接就可以用,目前也在帮外部公司外包运维。大数据运维课程老师阿里树哥,前百度强哥,包括我都是管理上千节点集群的人,此外课程还由腾讯,美团小伙伴合作录制。

     全网独家大数据运维实战课程, 大数据运维课程适合哪些人?

  • 1.大数据运维在职的人进阶,进一步提升拿高薪

  • 2.准备转行大数据运维的人(试不试需要评估,因为运维相对难度大)

  • 3.大数据开发储备学习准备去中小公司的人:既懂开发也懂运维去小公司很吃香,做管理层,大数据架构。

 

以上是关于1000+节点的cdh集群主服务迁移全过程的主要内容,如果未能解决你的问题,请参考以下文章

1000+节点的cdh集群主服务迁移全过程

1000+节点的cdh集群主服务迁移全过程

K8S集群安装和迁移

CDH集成的kerberos迁移实战

CDH集成的kerberos迁移实战

如何修改CDH集群元数据库地址