mysql迁移至postgresql_0694-5.10.2-如何将CM内嵌PostgreSQL服务迁移至外部PostgreSQL

作者:朱超杰

文档编写目的

Cloudera Manager提供了一个嵌入式PostgreSQL数据库服务,用于在创建集群时进行演示和概念验证部署。为了提醒用户此嵌入式数据库不适合生产,Cloudera Manager将显示横幅文本:“您正在非生产模式下运行Cloudera Manager,该模式使用嵌入式PostgreSQL数据库。切换到使用支持的外部数据库,然后再投入生产“。

但是,如果您已使用嵌入式数据库,并且无法重新部署新的群集,则必须迁移到外部PostgreSQL数据库,接下来本篇文章主要介绍如何将CM嵌入式PostgreSQL迁移到外部的PostgreSQL服务。

  • 内容概述

1.安装外部PostgreSQL服务

2.数据库迁移

3.验证

4.总结

  • 测试环境

1.CM和CDH版本均为5.10.2

2.集群已集成Sentry

3.采用root用户

安装外部PostgreSQL

1.选择一个节点用于安装PostgreSQL服务,命令如下

yum -y install postgresql-server
f1c84237c04a4e999841e123251f86ef

2.初始PostgreSQL数据库,对于某些版本的PostgreSQL,会在第一次启动服务时自动进行初始化操作。也可以在命令行执行如下命令进行手动初始化

postgresql-setup initdb 
f2718240ac6d42feacd343723d5974a1

3.启动postgresql,并设置开机自启动

systemctl start postgresqlsystemctl enable postgresqlsystemctl status postgresql
94b3ad714b9d4d1684d881d75823faeb

4.修改/var/lib/pgsql/data/pg_hba.conf文件,启用MD5身份认证,在该文件中添加如下内容

host all all 127.0.0.1/32 md5

如果该文件中存在以下内容,则上述添加内容必须添加在下列内容之前。否则可能出现在运行scm_prepare_database.sh脚本时验证错误而失败。

host all all 127.0.0.1/32 ident
47bfe929aed3422bace5c801a4228edb

修改/var/lib/pgsql/data/postgresql.conf文件,添加以下内容:

listen_addresses = '*'
97e91a2e00854ff999c33f57f93df37f

重启postgresql

systemctl restart postgresqlsystemctl status postgresql
7c6b0910356947bdbfe2507b3911d638

迁移前准备

1.查看使用内置postgresql数据库的角色

使用如下命令获取内置postgresql数据库超级用户cloudera-scm的密码

head -1 /var/lib/cloudera-scm-server-db/data/generated_password.txt

使用超级用户登录postgresql,查看使用该数据库的服务角色

psql -U cloudera-scm -p 7432 -h localhost -d postgresl
507fe819a3554fc68fd0dd2688c7566c

查看当前Hive中存在两个数据库,并且在default数据库下有两个表,一个为分区表,另一个为非分区表

fe78f449acf3465788ed6b90b2fb687e

并且表mytest中含有测试数据

f0742015de14444b88603e20b9279179

并且当前sentry中有授权信息

52f64d8d34e641c383d0ad3b55d381c1

内置PostgreSQL迁移至外部PostgreSQL

将Cloudera Manager嵌入式PostgreSQL数据库迁移到外部PostgreSQL数据库,在迁移之前,需要满足以下条件:

  • 外部PostgreSQL数据库服务运行正常
  • 数据库配置为允许远程连接
  • 数据库配置为接收用户使用md5方式登录
  • 不需要在外部数据库上为任何要迁移角色手动创建数据库
  • 当前集群是一个健康的集群

1.停止集群使用内置postgresql数据库的服务

1532bfbef0a54f18b474f90a04416c87

导航到“ 主机” >“ 所有主机”,并记下分配给主机的角色数。还要注意他们是否处于委托状态。稍后您将需要此信息来验证您的信息SCM 数据库已正确迁移。

4fb769c540eb4393bbafb6c82acfbfb5

2.停止Cloudera Manager Server

systemctl stop cloudera-scm-serversystemctl status cloudera-scm-server
6763aea561b9477399fb85728dfd5d7e
注意:如果在停止Cloudera Manager Server之前未从Cloudera Manager中停止服务,则它们将继续运行并维护与嵌入式数据库服务器的网络连接。如果发生这种情况,则嵌入式数据库服务器将忽略任何命令行停止命令,并要求您手动终止进程,从而导致服务崩溃而不是干净地停止。

3.使用超级用户cloudera-scm导出内置postgresql数据库中的角色,命令如下:

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"
fe56dc19f64441b197d3c4c0a946e361
97c46b04819b47f494878bf2b3cf101c

4.使用如下命令将所有服务的数据库导出

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).dump
66163dd3c60f45838a61ce3e26f05ea0

数据库导出结果如下:

ll /var/tmp/
6fcbfcc35c4c4658a437c4c5b7594863

5.停止内置postgresql数据库服务,并禁止开机启动

systemctl stop cloudera-scm-server-dbchkconfig cloudera-scm-server-db offsystemctl status cloudera-scm-server-db
da6e0d65f3a54af088cae1d48d025350

查看端口监听状态,确认服务已被停止

netstat -at | grep 7432
b1803bd9ec0d4260bb7268a3af2ae8c1

6.备份Cloudera Manager Server数据库配置文件

cp /etc/cloudera-scm-server/db.properties /etc/cloudera-scm-server/db.properties.embedded
9ff9062a235e44d0a11ae3ef1eb14724

如果外部PostgreSQL数据库与内置PostgreSQL数据库不在同一节点,还需将导出的角色文件cloudera_user_roles.sql和数据库文件拷贝到外部PostgreSQL数据库所在主机。

7.使用外部PostgreSQL默认的超级用户postgres导入用户角色

sudo -u postgres psql -f /var/tmp/cloudera_user_roles.sql
32b0ab7f43564045813c462d04233070

用户导入成功后如下:

6b7e4d53ed604145ab8a5da359024c5b

8.导入数据库文件到外部PostgreSQL

未导入前外部PostgreSQL中的数据库情况如下:

df21593b34aa452d970d8a0e56c7b421
注意:要成功运行pg_restore命令,数据库服务器上必须有现有数据库才能完成连接, 现有数据库不会被修改。如果-d 选项不包括在内,那么pg_restore 命令会失败

导入scm数据库文件

pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/scm_db_backup-07-30-2019.dump
3c014d3dcb714a0a86579fe3837fcfef

导入amon数据库文件

pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/amon_db_backup-07-30-2019.dump
d9a79d71341a4a819aad7a4510c6e1fd

导入hive数据库文件

pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/hive_db_backup-07-30-2019.dump
1d6c68a7be0e4ac7b3bbc453784d4301

导入hue数据库文件

pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/hue_db_backup-07-30-2019.dump
4b7872630b89447ba41d712538ac539a

导入nav数据库文件

pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/nav_db_backup-07-30-2019.dump
1ad72c2325fb43678a44aad7d08acfae

导入navms数据库文件

pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/navms_db_backup-07-30-2019.dump
d8b6f1b58d2b4e2ca8cfec3652b6864a

导入oozie数据库文件

pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/oozie_oozie_server_db_backup-07-30-2019.dump
c25f356347bd42d7a23e9c3cf69e34f1

导入rman数据库文件

pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/rman_db_backup-07-30-2019.dump
28a65f1c92a04088b26d1a3dfcf70698

导入sentry数据库文件

pg_restore -C -h localhost -p 5432 -d postgres -U cloudera-scm -v /var/tmp/sentry_db_backup-07-30-2019.dump
b64c3f86e7e24bc8a688f0a453466950

查看外部PostgreSQL数据库如下

83dc9f33e6ea49039aaac2151a8a8789

9.更新Cloudera Manager Server数据库配置文件以使用外部数据库服务器

编辑/etc/cloudera-scm-server/db.properties文件如下:

vim /etc/cloudera-scm-server/db.properties
97726c872efc4d018d69daef939de86d

10.启动cloudera-scm-server

systemctl start cloudera-scm-servernetstat -lnpt | grep 7180
5c3a1f24f22144f2a3e951c3a685c547

11.查看主机角色未发生变化

685732b5388f45f6aa91d4a49fac701d

12.修改各项服务的数据库端口为外部PostgreSQL数据库端口

以Hive服务为例,搜索“7432”,然后将Hive Metastore数据库端口修改为“5432”

0ef05dfcb19045ccbb1f87a34b64b701

依次修改hue、sentry、oozie、scm、rm、am等数据库端口。

13.启动Cloudera Management Service

a10618eb48794247a916a890dba661c0

确认Cloudera Management Service的所有服务都启动,并且运行状况正常

686fec5e4c3f4225ac233e0f510805bf

启动其他服务

ffba4d56058b49e994370cc85e1a41d4

14.在装有内置postgresql的主机上备份

tar czvf /var/tmp/embedded_db_data_backup-$(date +”%m-%d-%Y”).tgz /var/lib/cloudera-scm-server-db/data
5e5af367595041a5bd8f1b841d3e9188

移除内置数据库服务

rpm --erase cloudera-manager-server-db-2rpm -qa|grep cloudera-manager-server-db-2
d8712ef74f2e4368b3dbd22cd3364f9c

迁移验证

查看Hive表信息是否正确

7689d3d6099d4c8180ee1357f5853447

查看表数据

e4f1eff8321b45d0829f1ad39c87bc09

Sentry授权信息如下

ef5e4690a79844a4a96ec3196d9545c6

总结

1.在迁移过程中需要停止相关的服务和Cloudera Manager Server

2.在使用pg_restore命令导入数据库文件到外部PostgreSQL时,要成功运行pg_restore命令,需要与PostgreSQL数据库服务器上的现有数据库建立连接,但现有数据库不会被修改。本次连接使用的数据库是默认数据库postgres。如果-d 选项不包括在内,那么pg_restore 命令会失败。

3.在启动服务时,用到的数据库和用户信息需要在添加到/var/lib/pgsql/data/pg_hba.conf文件中,如下所示:

1735264d9714421197baea22d2709ed8

如不添加则启动服务时会报错:

051b71f1ba2d408ca50b7a84708ed310
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值