集群管理MGR部署

部署集群

第一步:配置环境变量

编译或安装adbmgr之后,会在指定目录(即$ADBHOME目录)的bin目录下产生initmgrmgr_ctl可执行文件。要想初始化adbmgr还需要配置PATH变量才行。 向当前用户下的隐藏文件.bashrc中(执行vim ~/.bashrc打开文件)追加如下内容:

export ADBHOME=/opt/app/antdb  
export PATH=$ADBHOME/bin:$PATH 
export LD_LIBRARY_PATH=$ADBHOME/lib:$LD_LIBRARY_PATH 
export PGDATABASE=postgres 
 
export mgrdata=/data/antdb/mgr1 
alias adbmgr='psql -p 6432 -d postgres ' 
alias mgr_stop='mgr_ctl stop -D $mgrdata -m fast' 
alias mgr_start='mgr_ctl start -D $mgrdata'

注意:ADBHOME需要根据AntDB的编译产生的二进制可执行文件的存放路径设置。 mgrdata 同样需要根据各自环境的实际路径进行修改。

然后执行source ~/.bashrc 使其生效即可。

第二步:初始化adbmgr

initmgr -D $mgrdata

其中$mgrdata是用户自己指定的存放adbmgr 的安装目录(该文件目录需要预先创建)。

初始化后,在指定的目录下生成如下文件:

[gd@INTEL175 ~]$ cd /data/antdb/mgr1 
[gd@INTEL175 mgr1]$ ll 
total 112 
drwx------ 5 gd gd  4096 Oct 17 17:28 base 
drwx------ 2 gd gd  4096 Oct 17 17:28 global 
drwx------ 2 gd gd  4096 Oct 17 17:28 pg_clog 
drwx------ 2 gd gd  4096 Oct 17 17:28 pg_commit_ts 
drwx------ 2 gd gd  4096 Oct 17 17:28 pg_dynshmem 
-rw------- 1 gd gd  4450 Oct 17 17:28 pg_hba.conf 
-rw------- 1 gd gd  1636 Oct 17 17:28 pg_ident.conf 
drwx------ 4 gd gd  4096 Oct 17 17:28 pg_logical 
drwx------ 4 gd gd  4096 Oct 17 17:28 pg_multixact 
drwx------ 2 gd gd  4096 Oct 17 17:28 pg_notify 
drwx------ 2 gd gd  4096 Oct 17 17:28 pg_replslot 
drwx------ 2 gd gd  4096 Oct 17 17:28 pg_serial 
drwx------ 2 gd gd  4096 Oct 17 17:28 pg_snapshots 
drwx------ 2 gd gd  4096 Oct 17 17:28 pg_stat 
drwx------ 2 gd gd  4096 Oct 17 17:28 pg_stat_tmp 
drwx------ 2 gd gd  4096 Oct 17 17:28 pg_subtrans 
drwx------ 2 gd gd  4096 Oct 17 17:28 pg_tblspc 
drwx------ 2 gd gd  4096 Oct 17 17:28 pg_twophase 
-rw------- 1 gd gd     4 Oct 17 17:28 PG_VERSION 
drwx------ 3 gd gd  4096 Oct 17 17:28 pg_xlog 
-rw------- 1 gd gd    88 Oct 17 17:28 postgresql.auto.conf 
-rw------- 1 gd gd 22234 Oct 17 17:28 postgresql.conf

第三步:修改adbmgr配置参数

  1. 修改postgresql.conf
cat  >> ${mgrdata}/postgresql.conf << EOF 
port = 6432 
listen_addresses = '*' 
log_directory = 'pg_log' 
log_destination ='csvlog' 
logging_collector = on 
log_min_messages = error 
max_wal_senders = 3 
hot_standby = on 
wal_level = replica 
EOF

adbmgr 的默认端口是 6432,用户可以根据规划设置一个可用的端口。

  1. 修改pg_hba.conf
cat  >> ${mgrdata}/pg_hba.conf << EOF 
host    replication     all        10.0.0.0/8                 trust 
host    all             all          10.0.0.0/8               trust 
EOF

hba中的IP需要根据实际情况进行修改。

第四步:启动 adbmgr

adbmgr初始化成功后,就可以启动它了。

mgr_ctl start -D /data/antdb/mgr1

/data/antdb/mgr1 要与初始化路径保持一致,均为变量mgrdata 的值。

[gd@INTEL175 ~]$ mgr_ctl start -D /data/antdb/mgr1   
server starting 
[gd@INTEL175 ~]$ LOG:  database system was shut down at 2017-10-17 17:38:15 CST 
LOG:  MultiXact member wraparound protections are now enabled 
LOG:  database system is ready to accept connections 
LOG:  autovacuum launcher started 
LOG:  adb monitor launcher started

若adbmgr在启动的过程中报端口被占用,原因是当前端口号已经被其他进程使用(adbmgr默认使用端口是6432)。需要修改 /data/antdb/mgr1/postgresql.conf 文件中变量 port 的值使其不与其他的进程冲突即可。

启动后,ps可以查看mgr的进程如下:

67456 ?        S      0:00 /data/antdb/app/bin/adbmgrd -D mgr 
 67458 ?        Ss     0:00  \_ adbmgr: checkpointer process    
 67459 ?        Ss     0:00  \_ adbmgr: writer process    
 67460 ?        Ss     0:00  \_ adbmgr: wal writer process    
 67461 ?        Ss     0:00  \_ adbmgr: autovacuum launcher process   
 67462 ?        Ss     0:00  \_ adbmgr: stats collector process   
 67463 ?        Ss     0:00  \_ adbmgr: adb monitor launcher process

第五步:配置备机adbmgr(可选)

在实际的生产环境中,adbmgr也需要做高可用,所以也需要给adbmgr配置备机。 在功能验证阶段可不加adbmgr的备机,在后期验证高可用的时候再进行添加。

在选定的部署adbmgr备机的主机上,使用antdb用户执行:

pg_basebackup -h 10.20.16.175 -p 6432 -U antdb -D /data/antdb/mgr_standby --nodename mgr -Xs -Fp -R

其中:

  • -h adb05中的adb05 为adbmgr master的主机名,此处也可以使用IP。
  • -p 6432 为adbmgr master的端口。
  • -U antdb 表示使用antdb用户去连接adbmgr master
  • -D 指定了 adbmgr slave 在执行主机上的数据目录,确保权限正确。
  • 其他参数保持不变。

执行完成后,启动 adbmgr slave:

mgr_ctl start -D /data/antdb/mgr_standby

第六步:add 主机

根据规划,集群部署在几台主机上,就添加几台主机。

add host 主机名(port=22,protocol='ssh',adbhome='对应主机的AntDB安装路径]',address='服务器IP',agentport=agent端口号,user=主机用户);
  • port:ssh端口号,默认22;
  • protocol:登录协议,默认ssh,用户可以不写;
  • adbhome:antdb安装目录,下一步deploy二进制程序会将mgr上的二进制程序复制到此目录;
  • address:主机IP地址;
  • agentport:由于在每一个host上会启动一个agent进程,这里就是对应的端口号;
  • user:ssh登录用户名;

例如:

add host host1(port=22,protocol='ssh',adbhome='/home/uatadb/app',address='10.20.16.227',agentport=31001,user='uatadb');
add host host2(port=22,protocol='ssh',adbhome='/home/uatadb/app',address='10.20.16.228',agentport=31001,user='uatadb');

第七步:deploy二进制程序

deploy命令会将AntDB的二进制执行文件打包发送到host表中所有主机上,就是上一步添加的主机。

在集群内各主机之间如果没有设置互信的情况下,执行deploy all需要输入用户密码(当前用户的登录密码),如果设置主机间互信,则可以省去密码的繁琐设置。

一次部署所有主机:

deploy all password '123456';

部署指定的主机,例如部署指定的主机adb01和adb02:

deploy adb01,adb02 password '123456';