文档编写目的
Cloudera Manager提供了一个嵌入式PostgreSQL数据库服务,用于在创建集群时进行演示和概念验证部署。为了提醒用户此嵌入式数据库不适合生产,Cloudera Manager将显示横幅文本:“您正在非生产模式下运行Cloudera Manager,该模式使用嵌入式PostgreSQL数据库。切换到使用支持的外部数据库,然后再投入生产”。
但是,如果您已使用嵌入式数据库,并且无法重新部署新的群集,则必须迁移到外部PostgreSQL数据库,接下来本篇文章主要介绍如何将CM嵌入式PostgreSQL迁移到外部的PostgreSQL服务。
- 内容概述
- 安装外部PostgreSQL服务
- 数据库迁移
- 验证
- 总结
- 测试环境
- CM和CDH版本均为5.16.2
- 集群已集成Sentry
- 采用root用户
安装外部PostgreSQL
选择一个节点用于安装PostgreSQL服务,命令如下
代码语言:javascript复制yum -y install postgresql-server
初始PostgreSQL数据库,对于某些版本的PostgreSQL,会在第一次启动服务时自动进行初始化操作。也可以在命令行执行如下命令进行手动初始化
代码语言:javascript复制postgresql-setup initdb
启动postgresql,并设置开机自启动
代码语言:javascript复制systemctl start postgresqlsystemctl enable postgresqlsystemctl status postgresql
修改/var/lib/pgsql/data/pg_hba.conf文件,启用MD5身份认证,在该文件中添加如下内容
代码语言:javascript复制host all all 127.0.0.1/32 md5
如果该文件中存在以下内容,则上述添加内容必须添加在下列内容之前。否则可能出现在运行scm_prepare_database.sh脚本时验证错误而失败
代码语言:javascript复制host all all 127.0.0.1/32 ident
修改/var/lib/pgsql/data/postgresql.conf文件,添加以下内容:
代码语言:javascript复制listen_addresses = '*'
重启postgresql
代码语言:javascript复制systemctl restart postgresqlsystemctl status postgresql
迁移前准备
查看使用内置postgresql数据库的角色
使用如下命令获取内置postgresql数据库超级用户cloudera-scm的密码
代码语言:javascript复制head -1 /var/lib/cloudera-scm-server-db/data/generated_password.txt
使用超级用户登录postgresql,查看使用该数据库的服务角色
代码语言:javascript复制psql -U cloudera-scm -p 7432 -h localhost -d postgresl
查看当前Hive中存在两个数据库,并且在default数据库下有两个表,一个为分区表,另一个为非分区表
并且表table_partitioned中含有测试数据
并且当前sentry中有授权信息
内置PostgreSQL迁移至外部PostgreSQL
将Cloudera Manager嵌入式PostgreSQL数据库迁移到外部PostgreSQL数据库,在迁移之前,需要满足以下条件:
- 外部PostgreSQL数据库服务运行正常
- 数据库配置为允许远程连接
- 数据库配置为接收用户使用md5方式登录
- 不需要在外部数据库上为任何要迁移角色手动创建数据库
- 当前集群是一个健康的集群
停止集群使用内置postgresql数据库的服务
导航到“ 主机” >“ 所有主机”,并记下分配给主机的角色数。还要注意他们是否处于委托状态。稍后您将需要此信息来验证您的信息SCM 数据库已正确迁移。
停止Cloudera Manager Server
代码语言:javascript复制systemctl stop cloudera-scm-serversystemctl status cloudera-scm-server
注意:如果在停止Cloudera Manager Server之前未从Cloudera Manager中停止服务,则它们将继续运行并维护与嵌入式数据库服务器的网络连接。如果发生这种情况,则嵌入式数据库服务器将忽略任何命令行停止命令,并要求您手动终止进程,从而导致服务崩溃而不是干净地停止。
使用超级用户cloudera-scm导出内置postgresql数据库中的角色,命令如下
代码语言:javascript复制head -1 /var/lib/cloudera-scm-server-db/data/generated_password.txtpg_dumpall -h localhost -p 7432 -U cloudera-scm -v --roles-only -f "/var/tmp/cloudera_user_roles.sql"
使用如下命令将所有服务的数据库导出
代码语言:javascript复制pg_dump -F c -h localhost -p 7432 -U cloudera-scm scm > /var/tmp/scm_db_backup-$(date %m-%d-%Y).dumppg_dump -F c -h localhost -p 7432 -U cloudera-scm hive > /var/tmp/hive_db_backup-$(date %m-%d-%Y).dumppg_dump -F c -h localhost -p 7432 -U cloudera-scm hue > /var/tmp/hue_db_backup-$(date %m-%d-%Y).dumppg_dump -F c -h localhost -p 7432 -U cloudera-scm sentry > /var/tmp/sentry_db_backup-$(date %m-%d-%Y).dumppg_dump -F c -h localhost -p 7432 -U cloudera-scm oozie_oozie_server > /var/tmp/oozie_oozie_server_db_backup-$(date %m-%d-%Y).dumppg_dump -F c -h localhost -p 7432 -U cloudera-scm amon > /var/tmp/amon_db_backup-$(date %m-%d-%Y).dumppg_dump -F c -h localhost -p 7432 -U cloudera-scm nav > /var/tmp/nav_db_backup-$(date %m-%d-%Y).dumppg_dump -F c -h localhost -p 7432 -U cloudera-scm navms > /var/tmp/navms_db_backup-$(date %m-%d-%Y).dumppg_dump -F c -h localhost -p 7432 -U cloudera-scm rman > /var/tmp/rman_db_backup-$(date %m-%d-%Y).dump12
数据库导出结果如下:
代码语言:javascript复制ll /var/tmp/
停止内置postgresql数据库服务,并禁止开机启动
代码语言:javascript复制systemctl stop cloudera-scm-server-dbchkconfig cloudera-scm-server-db offsystemctl status cloudera-scm-server-db
查看端口监听状态,确认服务已被停止
代码语言:javascript复制netstat -at | grep 7432
备份Cloudera Manager Server数据库配置文件
代码语言:javascript复制cp /etc/cloudera-scm-server/db.properties /etc/cloudera-scm-server/db.properties.embedded
如果外部PostgreSQL数据库与内置PostgreSQL数据库不在同一节点,还需将导出的角色文件cloudera_user_roles.sql和数据库文件拷贝到外部PostgreSQL数据库所在主机。
使用外部PostgreSQL默认的超级用户postgres导入用户角色
代码语言:javascript复制sudo -u postgres psql -f /var/tmp/cloudera_user_roles.sql
用户导入成功后如下:
导入数据库文件到外部PostgreSQL
未导入前外部PostgreSQL中的数据库情况如下:
修改验证方式为trust
注意:要成功运行pg_restore命令,数据库服务器上必须有现有数据库才能完成连接, 现有数据库不会被修改。如果-d <existing-database> 选项不包括在内,那么pg_restore 命令会失败
导入scm数据库文件
代码语言:javascript复制pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/scm_db_backup-09-05-2019.dump
导入amon数据库文件
代码语言:javascript复制pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/amon_db_backup-09-05-2019.dump
导入hive数据库文件
代码语言:javascript复制pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/hive_db_backup-09-05-2019.dump
导入hue数据库文件
代码语言:javascript复制pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/hue_db_backup-09-05-2019.dump
导入nav数据库文件
代码语言:javascript复制pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/nav_db_backup-09-05-2019.dump
导入navms数据库文件
代码语言:javascript复制pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/navms_db_backup-09-05-2019.dump
导入oozie数据库文件
代码语言:javascript复制pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/oozie_oozie_server_db_backup-09-05-2019.dump
导入rman数据库文件
代码语言:javascript复制pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/rman_db_backup-09-05-2019.dump
导入sentry数据库文件
代码语言:javascript复制pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/sentry_db_backup-09-05-2019.dump
查看外部PostgreSQL数据库如下
更新Cloudera Manager Server数据库配置文件以使用外部数据库服务器
编辑/etc/cloudera-scm-server/db.properties文件如下:
代码语言:javascript复制vim /etc/cloudera-scm-server/db.properties
启动cloudera-scm-server
代码语言:javascript复制systemctl start cloudera-scm-servernetstat -lnpt | grep 7180
查看主机角色未发生变化
修改各项服务的数据库端口为外部PostgreSQL数据库端口
以Hive服务为例,搜索“7432”,然后将Hive Metastore数据库端口修改为“5432”
依次修改hue、sentry、oozie、scm、rm、am等数据库端口。
改完后修改/var/lib/pgsql/data/pg_hba.conf文件,如下图
启动Cloudera Management Service
确认Cloudera Management Service的所有服务都启动,并且运行状况正常
启动其他服务
在装有内置postgresql的主机上备份
代码语言:javascript复制tar czvf /var/tmp/embedded_db_data_backup-$(date ”%m-%d-%Y”).tgz /var/lib/cloudera-scm-server-db/data
移除内置数据库服务
代码语言:javascript复制rpm --erase cloudera-manager-server-db-2rpm -qa|grep cloudera-manager-server-db-2
迁移验证
查看Hive表信息是否正确
查看表数据
Sentry授权信息如下
总结
- 在迁移过程中需要停止相关的服务和Cloudera Manager Server
- 在使用pg_restore命令导入数据库文件到外部PostgreSQL时,要成功运行pg_restore命令,需要与PostgreSQL数据库服务器上的现有数据库建立连接,但现有数据库不会被修改。本次连接使用的数据库是默认数据库postgres。如果-d <existing-database> 选项不包括在内,那么pg_restore 命令会失败。
- 在启动服务时,用到的数据库和用户信息需要在添加到/var/lib/pgsql/data/pg_hba.conf文件中,如下所示:
如不添加则启动服务时会报错: