adbmgr 初始化操作
背景
在部分版本替换的场景中,如果adbmgr新增了功能,因为对mgr的系统表做了修改,所以需要对adbmgr进行初始化操作。
比如,在某个版本中,新增了显示节点物理大小的命令,在直接替换版本后,无法使用这个命令:
postgres=# list node size all;
ERROR: function mgr_list_nodesize_all(boolean) does not exist
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
注意:数据库集群不需要初始化。
操作步骤
导出mgr侧相关表
AntDB提供了 mgr_dump
工具来导出mgr中用到的表。
导出mgr侧表的命令如下:
mgr_dump -p 16432 -d postgres --mgr_table -f mgr_tab.sql
其中:
- -p 的参数需要修改为实际环境端口
- -f 的参数需要修改为实际操作的文件名
导出monitor 相关表
adbmgr内置了一些job,用于采集主机、节点的相关性能指标,如果开启了job,也需要将job的采集结果数据导出。
检查是否开启job,登陆adbmgr:
postgres=# list job;
joboid | name | nexttime | interval | status | command | description
--------+-----------------+-------------------------------+----------+--------+--------------------------------------------+-------------
16399 | slowlog_for_adb | 2019-01-29 17:29:59.369626+08 | 60 | t | select monitor_slowlog_insert_data(); |
16398 | tps_for_adb | 2019-01-29 17:29:59.373206+08 | 60 | t | select monitor_databasetps_insert_data(); |
16397 | usage_for_adb | 2019-01-29 17:29:59.367332+08 | 60 | t | select monitor_databaseitem_insert_data(); |
16396 | usage_for_host | 2019-01-29 17:29:59.374407+08 | 60 | t | select monitor_get_hostinfo(); |
(4 rows)
如果,list job
返回结果为空,则说明没有开启job,这个步骤可以跳过。
如果返回结果,但是 status
为f, 则也建议导出monitor数据。
执行导出命令:
mgr_dump "port=16432 dbname=postgres options='-c command_mode=sql'" -t 'monitor_*' -a -f monitor_data.sql
如果存在的monitor比较多,导出需要花费些时间。
adbmgr 初始化
数据导出完成后,停止adbmgr,准备初始化操作。
停止adbmgr:
mgr_ctl stop -D /data/danghb//data/adb40/d1/mgr -m fast
如果有mgr slave,记得要把slave也停掉。
初始化adbmgr,初始化之前最好先备份下:
# 备份mgr数据目录
cp -R /data/danghb//data/adb40/d1/mgr /data/danghb//data/adb40/d1/mgr_190130
# 清空mgr数据目录
rm -rf /data/danghb//data/adb40/d1/mgr
# 初始化mgr
initmgr -D /data/danghb//data/adb40/d1/mgr
# 恢复mgr的配置文件
cp /data/danghb//data/adb40/d1/mgr_190130/postgresql.conf /data/danghb//data/adb40/d1/mgr/postgresql.conf
cp /data/danghb//data/adb40/d1/mgr_190130/pg_hba.conf /data/danghb//data/adb40/d1/mgr/pg_hba.conf
# 启动mgr
mgr_ctl start -D /data/danghb//data/adb40/d1/mgr
此时查看节点信息,都是空的:
postgres=# list node;
name | host | type | mastername | port | sync_state | path | initialized | incluster | readonly
------+------+------+------------+------+------------+------+-------------+-----------+----------
(0 rows)
导入mgr侧数据
进入之前mgr_dump 出来的文件所在目录,执行导入操作:
psql -p 16432 -d postgres -f mgr_tab.sql
already exists
类型的错误可以忽略。
导入monitor数据
进入之前mgr_dump 出来的文件所在目录,执行导入操作:
psql "port=16432 dbname=postgres options='-c command_mode=sql'" -f monitor_data.sql
下面三个报错可以忽略:
- ERROR: duplicate key value violates unique constraint “monitor_host_threshold_pkey”
- ERROR: duplicate key value violates unique constraint “monitor_job_pkey”
- ERROR: duplicate key value violates unique constraint “monitor_user_pkey”
验证数据
通过 list node
、list host
、list job
等命令来验证数据是否正确。
验证新增的功能
背景介绍中报错的那个命令,初始化完成后,我们再来看下:
postgres=# list node pretty size all;
nodename | type | port | nodepath | nodesize
----------+--------------------+-------+-----------------------------------+----------
gc_1 | gtmcoord master | 11018 | /data/danghb//data/adb40/d1/gc1 | 2957 MB
gc_2 | gtmcoord slave | 11019 | /data/danghb//data/adb40/d2/gc2 | 751 MB
cd1 | coordinator master | 11010 | /data/danghb//data/adb40/d1/cd1 | 16 GB
cd4 | coordinator master | 11013 | /data/danghb//data/adb40/d1/cd4 | 329 MB
cd2 | coordinator master | 11011 | /data/danghb//data/adb40/d1/cd2 | 336 MB
cd3 | coordinator master | 11012 | /data/danghb//data/adb40/d1/cd3 | 336 MB
db1_1 | datanode master | 11020 | /data/danghb//data/adb40/d1/db1 | 4895 MB
db2_1 | datanode master | 11030 | /data/danghb//data/adb40/d1/db2 | 9292 MB
db3_1 | datanode master | 11040 | /data/danghb//data/adb40/d1/db3 | 9434 MB
db1_2 | datanode slave | 11021 | /data/danghb//data/adb40/d2/db1 | 4307 MB
db1_3 | datanode slave | 11022 | /data/danghb//data/adb40/d2/db1_3 | 4307 MB
db1_4 | datanode slave | 11023 | /data/danghb//data/adb40/d2/db1_4 | 4307 MB
db2_2 | datanode slave | 11031 | /data/danghb//data/adb40/d2/db2 | 4686 MB
db3_2 | datanode slave | 11041 | /data/danghb//data/adb40/d2/db3 | 4645 MB
(14 rows)
postgres=# list node size all;
nodename | type | port | nodepath | nodesize
----------+--------------------+-------+-----------------------------------+-------------
gc_1 | gtm master | 11018 | /data/danghb//data/adb40/d1/gc1 | 3100170258
gc_2 | gtm slave | 11019 | /data/danghb//data/adb40/d2/gc2 | 787110334
cd1 | coordinator master | 11010 | /data/danghb//data/adb40/d1/cd1 | 17022981962
cd4 | coordinator master | 11013 | /data/danghb//data/adb40/d1/cd4 | 344869775
cd2 | coordinator master | 11011 | /data/danghb//data/adb40/d1/cd2 | 351882452
cd3 | coordinator master | 11012 | /data/danghb//data/adb40/d1/cd3 | 351850439
db1_1 | datanode master | 11020 | /data/danghb//data/adb40/d1/db1 | 5133107468
db2_1 | datanode master | 11030 | /data/danghb//data/adb40/d1/db2 | 9743861157
db3_1 | datanode master | 11040 | /data/danghb//data/adb40/d1/db3 | 9892059237
db1_2 | datanode slave | 11021 | /data/danghb//data/adb40/d2/db1 | 4516621960
db1_3 | datanode slave | 11022 | /data/danghb//data/adb40/d2/db1_3 | 4516623037
db1_4 | datanode slave | 11023 | /data/danghb//data/adb40/d2/db1_4 | 4516630156
db2_2 | datanode slave | 11031 | /data/danghb//data/adb40/d2/db2 | 4913885024
db3_2 | datanode slave | 11041 | /data/danghb//data/adb40/d2/db3 | 4870957246
(14 rows)
成功返回结果,验证通过。
设置节点属性
因为没有初始化集群,所以需要将节点的initialized和incluster设置为true,adbmgr提供了命令来操作:
postgres=# set cluster init;
SET CLUSTER INIT
postgres=#
重新拉slave(可选)
如果环境中存在mgr slave,在mgr master初始化完成之后,需要把重新拉一份slave,具体操作如下:
# 备份mgr 数据目录
mv /data/adb/mgr /data/adb/mgr_bak
# 用pg_basebackup 拉取备份
pg_basebackup -h adb05 -p 16432 -U adb -D /data/adb/mgr --nodename mgr -Xs -Fp -R
# 修改数据目录权限
chmod 700 /data/adb/mgr
# 启动mgr slave
mgr_ctl start -D /data/adb/mgr
注意事项
- 在初始化过程中,如果发生数据节点故障,可能导致无法自动切换,所以要选择合适的时间点操作。