跳至主要內容

Klustron集群运维操作

Klustron大约 26 分钟

Klustron集群运维操作

01 集群各组件启停

1.1 计算节点启停

查看计算节点进程:

ps -ef|grep $port  # $port是指计算节点的端口号

示例:

ps -ef|grep 23001

到计算节点的安装目录中与bin目录同级的scripts目录下:

cd /$install_dir/instance_binaries/computer/$port/kunlun-server-$version/scripts

# $install_dir是指计算节点安装目录
# $port是指计算节点端口号
# $version是指计算节点的版本号,例如:1.2.1

示例:

cd /data/ha/kunlun/instance_binaries/computer/23001/kunlun-server-1.2.1/scripts

启动:

python2 start_pg.py --port=$port

示例:

python2 start_pg.py --port=23001

停止:

python2 stop_pg.py --port=$port

示例:

python2 stop_pg.py --port=23001

1.2 存储节点启停

查看存储节点进程:

ps -ef|grep $port # $port是指存储节点的端口号

示例:

ps -ef|grep 33503

到存储节点的安装目录中与bin目录同级的scripts目录下:

cd/$install_dir/instance_binaries/storage/$port/kunlun-storage-$version/dba_tools

# $install_dir是指存储节点安装目录
# $port是指存储节点端口号
# $version是指存储节点的版本号,例如:1.2.1

示例:

cd /data/ha/kunlun/instance_binaries/storage/33503/kunlun-storage-1.2.1/dba_tools

启动:

./startmysql.sh $port

示例:

./startmysql.sh 33503

停止:

./stopmysql.sh $port

示例:

./stopmysql.sh 33503

1.3 cluster_mgr节点启停

查看cluster_mgr进程:

ps -ef|grep cluster_mgr

到cluster_mgr的安装目录中与conf目录同级的bin目录下:

cd /$install_dir/kunlun-cluster-manager-$version/conf/cluster_mgr.cnf

# $install_dir是指cluster_mgr安装目录
# $version是指计算节点的版本号,例如:1.2.1

示例:

cd /data/ha/kunlun/kunlun-cluster-manager-1.2.1/bin

启动:

./start_cluster_mgr.sh

停止:

./stop_cluster_mgr.sh

1.4 node_mgr节点启停

查看node_mgr进程:

ps -ef|grep node_mgr

到node_mgr的安装目录中与conf目录同级的bin目录下:

cd /$install_dir/kunlun-node-manager-$version/conf/

# $install_dir是指node_mgr安装目录
# $version是指计算节点的版本号,例如:1.2.1

示例:

cd /data/ha/kunlun/kunlun-node-manager-1.2.1/bin

启动:

./start_node_mgr.sh

停止:

./stop_node_mgr.sh

1.5 元数据节点启停

Tips :元数据集群的启停方式和存储节点的启停方式相同,但需要注意修改对应安装目录和对应的端口号。

1.6 XPanel启停

查看xpanel进程:

sudo docker ps -a

**Tips:**查看xpanel进程的状态:Exited表示进程停止,Up表示进程存活。

启动:

sudo docker container start $xpanel_service_name

# $xpanel_service_name是指xpanel服务名,由xpanel_$xpanel-service-p
# ort组成,例如xpanel_10024

示例:

sudo docker container start xpanel_10024

停止:

sudo docker container stop $xpanel_service_name

示例:

sudo docker container stop xpanel_10024

1.7 扩缩机器节点

扩容机器节点

扩容机器节点用作于什么组件,由配置参数nodetype决定,nodetype: 用于指定机器的用途,字符串类型,当前有 4 个可选值 'none', 'storage', 'server', 'both', 分别表示该机器将不部署任何节点,用于部署存储节点,用于部署计算节点,以及用于部署存储和计算节点。值默认为 both。

编辑新的json文件,例如add_node.json文件,在中控机/data1/softwares/setuptools-36.5.0/cloudnative/cluster目录下编辑文件,配置的内容样例如下:

{
    "machines":[
        {
            "ip":"192.168.0.132",
            "basedir":"/data1/kunlun",
            "user":"kunlun"
        },
        {
            "ip":"192.168.0.134",
            "basedir":"/data1/kunlun",
            "user":"kunlun"
        }
    ],
    "meta":{
	    "group_seeds": "192.168.0.110:6001,192.168.0.111:6002,192.168.0.100:6003"
    },
    "node_manager": {
           "nodes": [
		{
 		"ip": "192.168.0.132"
		},
		{ 
 		"ip": "192.168.0.134"
		}
	    ]	
    }
}

以上配置样例中,machines表示新增扩容的机器信息;meta表示当前元数据集群ip和port;node_manager表示执行cluster_mgr下发命令的组件,每台机器都需要部署。

在机器扩容前,新增的机器需要按照3.2.1章节“部署前准备工作-所有机器操作”和3.2.2章节中的第一个步骤“中控机与其他机器配置SSH互信”。

执行机器扩容

原集群中控机上,kunlun用户执行命令:

cd /data1/softwares/setuptools-36.5.0/cloudnative/cluster
sudo python2 setup_cluster_manager.py --config=add_node.json --action=install
bash -e clustermgr/install.sh

扩容机器完成后,可以在XPanel的“计算机管理”->“计算机列表”查看到新扩容的机器。如下图片中红框的就是新增的机器。

img

缩容机器节点

1.8 摧毁所有集群

高危警告!!!再三确认所有集群可以摧毁后,方可执行,此操作不可逆!!!

中控机上执行摧毁所有集群命令:

cd /data1/softwares/setuptools-36.5.0/cloudnative/cluster
python setup_cluster_manager.py --autostart --config=$config_file --product_version=$version --action=clean
bash /data1/softwares/setuptools-36.5.0/cloudnative/cluster/clustermgr/clean.sh

# $config_file是指Klurton Cluster的拓扑文件,文件以.json格式结尾。
# $version是指当前集群的版本号,例如:1.2.1

示例:

python setup_cluster_manager.py --autostart --config=cluster_and_node_mgr.json --product_version=1.2.1 --action=clean
bash /data1/softwares/setuptools-36.5.0/cloudnative/cluster/clustermgr/clean.sh

02 各组件日志目录和配置文件目录

2.1 日志目录

Tips :klustron集群中各个模块的端口号都可以在XPanel上进行查看。

计算节点kunlun-server

通过如下命令查看计算节点kunlun-server日志目录:

ps -ef|grep 23001 

#这里以23001计算节点端口号为例

如图:

img

cd /data/ha/kunlun/server_datadir/23001/log

如图:

img

日志文件分类:

  • kunlun-postgresql-*.log 记录的是计算节点运行日志文件,记录计算节点运行期间所接收到SQL语句与计算节点程序本身的日志、ERROR、WARNING等信息。
  • kunlun-postgresql-*-slow.log 记录的是计算节点出现的慢SQL日志,计算节点上慢SQL由变量log_min_duration_statement控制阈值大小,默认值10,单位s,超过10s的sql会记录到该日志文件中。
  • kunlun-postgresql-*-sql.log 记录的是从计算节点发给存储节点的SQL语句,由变量enable_sql_log控制打开或者关闭该日志,默认值off,处于关闭。

存储节点storage-server

通过如下命令查看存储节点storage-server日志目录:

ps -ef|grep 33501 

#这里以33501存储节点端口号为例

cd /data/ha/kunlun/storage_logdir/33501

如图:

img

主要查看的是mysqld.err日志,该日志记录存储节点运行信息、Warning、ERROR等信息。

cluster_mgr节点

通过如下命令查看cluster_mgr节点日志目录:

ps -ef|grep cluster_mgr 

log目录与conf目录同级

cd /data/ha/kunlun/kunlun-cluster-manager-1.2.1/log

如图:

img

主要查看的是sys_cluster_mgr*.log.*日志,记录的是cluster_mgr运行期间打印的任务,管理调度,错误等信息。

元数据集群

通过如下命令查看元数据节点日志目录:

ps -ef|grep 23301 

# 这里以23301元数据节点端口号为例

cd /data/ha/kunlun/storage_logdir/23301/

如图:

img

主要查看的是mysqld.err日志,该日志记录元数据节点运行信息、Warning、ERROR等信息。

node_mgr节点

通过如下命令查看node_mgr节点日志目录:

ps -ef|grep node_mgr 

log目录与conf目录同级

cd /data/ha/kunlun/kunlun-node-manager-1.2.1/log

如图:

img

主要查看的是sys_node_mgr.*.log.*日志,该日志记录着cluster_mgr下发的任务让node_mgr执行的相关shell命令,例如:集群安装,扩缩容节点,备份恢复,主备切换等任务对应的shell命令。

2.2 修改配置模板

在创建集群前如有特殊需求,可以在配置模板中修改对应的配置,最后再创建集群。

计算节点

环境部署前

修改步骤如下:

到部署工具目录下,以Klustron1.2.1集群版本命令为例:

cd setuptools-36.5.0/cloudnative/cluster/clustermgr

tar xf kunlun-server-1.2.1.tgz

cd kunlun-server-1.2.1/resources

vim postgresql.conf

如图:

img

编辑配置模板文件,修改对应的配置值即可。请注意!!!修改配置值之前可以与Klustron数据库团队确认是否可以更改,以免配置失败影响使用。

最后打包压缩:

mv kunlun-server-1.2.1.tgz kunlun-server-1.2.1_bak.tgz

tar czf kunlun-server-1.2.1.tgz kunlun-server-1.2.1/

再按照部署步骤完成部署。

环境部署后

Klustron的环境已经部署完成,使再次创建集群时按照新的配置文件进行配置。

修改步骤如下:

cd $base_dir/program_binaries/kunlun-server-1.2.1/resources

vim postgresql.conf

$base_dir是指安装基础目录,可以在部署时的拓扑文件.json中查看。

以Klustron1.2.1集群版本命令为例:

cd /data/ha/kunlun/program_binaries/kunlun-server-1.2.1/resources

vim postgresql.conf

如图:

img

编辑配置模板文件,修改对应的配置值即可。请注意!!!修改配置值之前可以与Klustron数据库团队确认是否可以更改,以免配置失败影响使用。

存储节点

环境部署前

修改步骤:

到部署工具目录下,以Klustron1.2.1集群版本命令为例:

cd setuptools-36.5.0/cloudnative/cluster/clustermgr

tar xf kunlun-storage-1.2.1.tgz

cd kunlun-storage-1.2.1/dba_tools

vim template-rbr.cnf

 

如图:

img

编辑配置模板文件,修改对应的配置值即可。请注意!!!修改配置值之前可以与Klustron数据库团队确认是否可以更改,以免配置失败影响使用。

最后打包压缩:

mv kunlun-storage-1.2.1.tgz kunlun-storage-1.2.1_bak.tgz

tar czf kunlun-storage-1.2.1.tgz kunlun-storage-1.2.1/

环境部署后

Klustron的环境已经部署完成,使再次创建集群时按照新的配置文件进行配置。

修改步骤

cd $base_dir/program_binaries/kunlun-storage-1.2.1/dba_tools

vim template-rbr.cnf

$base_dir是指安装基础目录,可以在部署时的拓扑文件.json中查看。

以Klustron1.2.1集群版本命令为例:

cd /data/ha/kunlun/program_binaries/kunlun-storage-1.2.1/dba_tools

vim template-rbr.cnf

如图:

img

编辑配置模板文件,修改对应的配置值即可。请注意!!!修改配置值之前可以与Klustron数据库团队确认是否可以更改,以免配置失败影响使用。

2.3 配置文件目录与生效

注意:众多情况下,计算节点、存储节点、元数据集群、cluster_mgr、node_mgr的配置文件一般情况下用户不需要去修改,除特殊情况外,这里只是介绍配置文件所在路径,以供特殊情况使用!!!

计算节点配置文件目录

通过如下命令查看计算节点kunlun-server日志目录:

ps -ef|grep 23001 

# 这里以23001计算节点端口号为例

如图:

img

img

在计算节点中分为多种类型的系统变量,不同的系统变量生效的方式不同,如需修改系统变量并使其生效,见如下链接中计算节点部分内容:

http://doc.klustron.com/zh/Klustron_system_variable.html

存储节点配置文件

通过如下命令查看存储节点storage-server日志目录:

ps -ef|grep 33501 

# 这里以33501存储节点端口号为例

如图:

img

存储节点中如需修改系统变量并使其生效,见如下链接中存储节点部分内容:

http://doc.klustron.com/zh/Klustron_system_variable.html

元数据节点配置文件

通过如下命令查看元数据节点日志目录:

ps -ef|grep 23301 

#这里以23301元数据节点端口号为例

如图:

img

cluster_mgr节点配置文件目录

通过如下命令查看cluster_mgr节点配置文件目录:

ps -ef|grep cluster_mgr 

如图:

img

修改配置文件后,生效方式需要重启cluster_mgr,参考1.3章节内容。

node_mgr节点配置文件目录

通过如下命令查看node_mgr节点日志目录:

ps -ef|grep node_mgr 

如图:

img

2.4 服务器角色等信息

通过登录元数据集群获取相关信息

03 负载均衡配置

Klustron不提供负载均衡组件,由用户自己按需提供使用。负载均衡配置方法如下:在集群创建完成后,用户通过将计算节点的ip和port配置到负载均衡中,即可完成并可以连接负载均衡提供的ip进行访问Klustron。

04 导入导出工具

Klustron支持copy命令进行导入导出,也支持pg_dump和pg_restore,还有myloader和mydumper工具进行数据导入导出。

COPY命令

copy命令方式

通过postgresql客户端登录后,执行命令。

Tips :导入之前需要已有表结构或者先导入表结构。

导入:忽略首行,列间隔用“,”表示的csv文件

copy t1 from '/data/ha/sbtest_sourcedata/sbtest_sourcedata/sbt1/t1.0001.csv' with delimiter ',' csv header;

如图:

img

导出:整表数据,不带表头

copy t1 to '/data/ha/sbtest_sourcedata/sbtest_sourcedata/sbt1/t1.000.csv' with delimiter ',' csv;

如图:

img

导出的CSV文件示例:

img

导出:整表数据,带表头

copy t1 to '/data/ha/sbtest_sourcedata/sbtest_sourcedata/sbt1/t1.0001.csv' with delimiter ',' csv header;

导出的CSV文件示例:

img

Copy命令常用参数说明:

csv **:**表示文件格式

header 表示文件第一行为字段名,导入数据库时忽略首行

delimiter **:**表示字段分割方式,示例是以逗号分割

encoding **:**表示文件编码方式,示例是 GBK 编码,(默认为utf-8)

quote **:**指定需要用什么符号来将指定列进行定界符,指定一个数据值被引用时使用的引用字符。默认是双引号。 这必须是一个单一的单字节字符。只有使用 CSV格式时才允许这个选项。

force quote **:*根据指定的列进行定界符,使用时force quote不需要加“_”。强制必须对每个指定列中的所有非NULL值使用引用。 NULL输出不会被引用。如果指定了, 所有列的非NULL值都将被引用。只有在 COPY TO中使用CSV格式时才允许这个选项。

quote使用示例:

copy t1 to '/data/ha/sbtest_sourcedata/sbtest_sourcedata/sbt1/t1.csv' with delimiter ',' csv force quote name;

如图:

img

导出的CSV文件示例:

img

force quote使用示例:

copy t1 to '/data/ha/sbtest_sourcedata/sbtest_sourcedata/sbt1/t_1.csv' with delimiter ',' csv quote '&' force quote name;

如图:

img

导出的CSV文件示例:

img

pg_dump和pg_restore

关于pg_dump和pg_restore命令参数的介绍见官网文档:

pg_dump:

http://www.postgres.cn/docs/11/app-pgdump.html

pg_restore:

http://www.postgres.cn/docs/11/app-pgrestore.html

如下是常用的pg_dump和pg_restore命令的介绍:

  • pg_dump导出

由于导入导出工具客户端需要与服务端版本匹配的原因,需要使用配套工具操作。

pg_dump导入和pg_restore导出工具的存放目录位于计算节点如下目录:

这里以kunlun-server的端口号23001为例:

ps -ef|grep 23001

图片示例:

img

查看pg_dump和pg_restore所在的目录:

cd /data/ha/kunlun/instance_binaries/computer/23001/kunlun-server-1.2.1/bin
ls -l

图片示例:

img

导出指定库(这里以pgdb库为例),导出的文件为sql文本:

./pg_dump -h192.168.0.150 -p23001 -Uabc -d pgdb > pgdb.sql

导出指定表(这里以n1表为例),导出的文件为sql文本:

./pg_dump -h192.168.0.150 -p23001 -Uabc -d pgdb -t n1 > n1.sql

导出指定表结构(这里以n1表为例),导出的文件为sql文本:

./pg_dump -h192.168.0.150 -p23001 -Uabc -d pgdb -t n1 -s > n1_s.sql

导出指定表数据(这里以n1表为例),导出的文件为sql文本:

./pg_dump -h192.168.0.150 -p23001 -Uabc -d pgdb -t n1 -a > n1_data.sql

导出多个表(这里以t1和t2表为例),导出的文件为sql文本:

./pg_dump -h192.168.0.150 -p23001 -Uabc -d pgdb -t t1 -t t2 > t.sql

注意:以下格式不同于文本格式的sql文件:

导出指定库(转储一个数据库到一个自定义格式归档文件,以nb库为例):

./pg_dump -h192.168.0.150 -p23001 -Uabc -d nb -Fc > nb.dump

导出指定表(转储一个数据库到一个自定义格式归档文件,以t1表为例):

./pg_dump -h192.168.0.150 -p23001 -Uabc -d postgres -t t1 -Fc > t1.dump
  • psql导入

对于sql文本文件可以使用psql进行导入:

注意:psql 导入的前置条件

前置条件:nb库下的表没有与sql文件中的表冲突。

导入库(以nb库为例):

psql -h192.168.0.150 -p23001 -Uabc nb < nb.sql

前置条件:n1表不存在。

导入表(以n1表为例):

psql -h192.168.0.150 -p23001 -Uabc nb < n1.sql

前置条件:n1表不存在

导入表结构(以n1表为例):

psql -h192.168.0.150 -p23001 -Uabc nb < n1.sql

前置条件:n2表存在,用户决定n2表是否有约束。

导入表数据(以n2表为例):

psql -h192.168.0.150 -p23001 -Uabc nb < n2.sql
  • pg_restore导入

对于自定义格式归档文件,可以使用pg_restore

前置条件:nb库已经存在

导入库(以nb库为例,-c参数会删除nb库下面的表,然后再进行导入):

./pg_restore -h192.168.0.150 -p23001 -Uabc -d nb -c -e nb.dump

前置条件:nb库不存在

导入库(以nb库为例,-C参数在导入前创建好nb库):

./pg_restore -h192.168.0.150 -p23001 -Uabc -d postgres -C nb.dump

前置条件:在nb库中n2表不存在。

导入表结构(以n2表为例):

./pg_restore -h192.168.0.150 -p23001 -Uabc -d nb -e n2.dump

前置条件:n2表存在,由用户决定n2表是否有约束。

导入表数据(以n2表为例)

./pg_restore -h192.168.0.150 -p23001 -Uabc -d nb -a -e n2.dump
  • myloader导出
  • mydumper导入

05 添加shard中备节点

通过XPanel上新增shard的备节点:

img

06 系统变量管理

如需查看Klustron特有的系统变量介绍见链接:

http://doc.klustron.com/zh/Klustron_system_variable.html

enable_global_mvcc

在修改enable_global_mvcc参数时,需要一定的时间窗口进行变更操作,在变更窗口中将所有的计算节点都修改并重启后使该参数生效,验证成功后方可恢复应用访问Klustron。

修改的步骤如下:

  • 修改enable_global_mvcc参数

使用postgresql协议登录计算节点,然后执行如下命令:

show enable_global_mvcc ;

alter system set enable_global_mvcc =on;

如图:

img

  • 重启计算节点

首先查看计算节点进程:

ps -ef|grep $port # $port是指计算节点的端口号

示例:

ps -ef|grep 47001

如图:

img

到计算节点的安装目录中与bin目录同级的scripts目录下:

cd /$install_dir/instance_binaries/computer/$port/kunlun-server-$version/scripts

# $install_dir是指计算节点安装目录
# $port是指计算节点端口号
# $version是指计算节点的版本号,例如:1.3.1

示例:

cd /disk2/klustron/instance_binaries/computer/47001/kunlun-server-1.3.1/scripts

停止:

python2 stop_pg.py --port=$port

示例:

python2 stop_pg.py --port=47001

启动:

python2 start_pg.py --port=$port

示例:

python2 start_pg.py --port=47001

如图:

img

  • 验证修改成功

使用postgresql协议登录计算节点,然后执行如下命令:

show enable_global_mvcc ;

如图:

img

注意:其余计算节点遵循如上操作步骤进行修改!!!

07 命令行保底操作

添加计算节点

添加shard

添加备机节点

手动重做备机

当出现XPanel无法使用,又急于故障恢复备机增加高可用性时,可以使用手动的方式进行重做备机。

如下为操作步骤,以重做元数据集群的一个备机为例。

将HDFS上的元数据集群的备份下载到本地,拷贝到对应需要重做的机器上。

查看:

hadoop fs -ls /kunlun/backup/xtrabackup/metacluster/metashard/

img

从HDFS上下载下来的全备文件存放到已经创建好的目录上:

示例:

mkdir -p /data/ha/backupfile/ 

# 这里以/data/ha/backupfile/为例,用户可自定义目录名。

特别注意:如下涉及的操作命令以实际的目录和端口号为准!!!变量只做介绍,以用户环境实际情况为准!!!

将全备文件下载后并解压(注意:需要将全备文件拷贝到重做备机的机器上):

hadoop fs -get /kunlun/backup/xtrabackup/metacluster/metashard/**$coldfile**.tgz /data/ha/backupfile/

# **$coldfile**为HDFS上的全备文件,**以实际的为准**。

示例:

hadoop fs -get /kunlun/backup/xtrabackup/metacluster/metashard/_xtrabackup_coldfile_I192#168#0#150_P23301_D2023#11#02_T01#01#05_.tgz /data/ha/backupfile/

tar xf $coldfile.tgz

示例:

tar xf _xtrabackup_coldfile_I192#168#0#150_P23301_D2023#11#02_T01#01#05_.tgz

如图:

img

解压后进行恢复,步骤如下:

  • apply redo日志,完成数据一致性
cd /$install_dir/kunlun-node-manager-$version/bin/

# $install_dir是指node_mgr安装目录

# $version是指部署的版本号,例如:1.2.1

示例:

cd /data/ha/kunlun/kunlun-node-manager-1.2.1/bin/

 

./util/xtrabackup --prepare --apply-log-only --target-dir=**$fullbackup_base** >> /data/ha/log/rebuild_node_tool_37.log 2>&1

# $fullbackup_base是指解压后的全备目录

# /data/ha/log/rebuild_node_tool_37.log可自定义一个日志文件

示例:

./util/xtrabackup --prepare --apply-log-only --target-dir=/data/ha/backupfile/xtrabackup_base >> ../log/rebuild_node_tool_37.log 2>&1
  • 备份配置文件,后续安装实例会用到
cp -a $install_dir/storage_datadir/$port/data/$port.cnf $install_dir/kunlun/storage_datadir/$port/

# $port是指存储节点端口号

示例,以23301端口为例:

cp -a /data/ha/kunlun/storage_datadir/23301/data/23301.cnf /data/ha/kunlun/storage_datadir/23301/
  • 停止故障mysqld进程

注意:node_mgr会拉起mysqld进程,进行删除文件的速度要快,保证先停止mysqld****进程再删除数据和日志文件。

示例:

cd /data/ha/kunlun/instance_binaries/storage/23301/kunlun-storage-1.2.1/dba_tools; ./stopmysql.sh 23301
  • 删除数据文件和日志文件

注意:以实际的安装目录和端口号为准!!!

rm -rf $install_dir/storage_datadir/$port/data/* 
rm -rf $install_dir/storage_datadir/$port/data/.* 
rm -rf $install_dir/storage_waldir/$port/redolog/*
rm -rf $install_dir/storage_logdir/$port/relay/*
rm -rf $install_dir/storage_logdir/$port/binlog/*

示例:

rm -rf /data/ha/kunlun/storage_datadir/23301/data/* 
rm -rf /data/ha/kunlun/storage_datadir/23301/data/.* 
rm -rf /data/ha/kunlun/storage_waldir/23301/redolog/*
rm -rf /data/ha/kunlun/storage_logdir/23301/relay/*
rm -rf /data/ha/kunlun/storage_logdir/23301/binlog/*
  • 把完成apply的全备拷贝到对应的数据目录
cd $install_dir/kunlun-node-manager-$version/bin/

示例:

cd /data/ha/kunlun/kunlun-node-manager-1.2.1/bin/


./util/xtrabackup --defaults-file=$install_dir/storage_datadir/$port/$port.cnf --user=agent --pagent_pwd --copy-back --target-dir=$fullbackup_base >> ../log/rebuild_node_tool_37.log 2>&1

示例:

./util/xtrabackup --defaults-file=/data/ha/kunlun/storage_datadir/23301/23301.cnf --user=agent --pagent_pwd --copy-back --target-dir=/data/ha/kunlun/storage_datadir/23301/xtrabackup_tmp >> ../log/rebuild_node_tool_37.log 2>&1
  • 删除存放全备目录下的所有文件
rm -rf $fullbackup_base/*
rm -rf $fullbackup_base/.rocksdb

示例:

rm -rf /data/ha/backupfile/xtrabackup_base/*
rm -rf /data/ha/backupfile/xtrabackup_base/.rocksdb
  • 拷贝配置文件到对应数据目录和启动实例
cp -a  $install_dir/storage_datadir/$port/$port.cnf $install_dir/storage_datadir/$port/data/

示例:

cp -a  /data/ha/kunlun/storage_datadir/23301/23301.cnf /data/ha/kunlun/storage_datadir/23301/data/

启动mysql示例:

cd $install_dir/instance_binaries/storage/$port/kunlun-storage-$version/dba_tools; ./startmysql.sh $port

示例:

cd /data/ha/kunlun/instance_binaries/storage/23301/kunlun-storage-1.2.1/dba_tools; ./startmysql.sh 23301
  • 根据全备信息xtrabackup_info文件中的gtid,重新建立主备关系

全备相关的信息和GTID可以查看xtrabackup_info文件

如图为GTID:

img

cd $fullbackup_base
cat xtrabackup_info

reset master; set global gtid_purged='$GTID'; stop slave; reset slave all; change master to  MASTER_AUTO_POSITION = 1,  MASTER_HOST='$master_host' , MASTER_PORT=$master_port, MASTER_USER='repl' , MASTER_PASSWORD='repl_pwd',MASTER_CONNECT_RETRY=1 ,MASTER_RETRY_COUNT=1000, MASTER_DELAY=0, MASTER_HEARTBEAT_PERIOD=10 for CHANNEL 'kunlun_repl'; start slave for CHANNEL 'kunlun_repl';

# $GTID 记录在全备目录xtrabackup_info文件
# $master_host 当前集群的主节点ip
# $master_port 当前集群的主节点端口号

示例:

reset master; set global gtid_purged='4dcf8e59-749a-11ee-936a-080027bce4df:1-82129'; stop slave; reset slave all; change master to MASTER_AUTO_POSITION = 1, MASTER_HOST='192.168.0.150' , MASTER_PORT=23301, MASTER_USER='repl' , MASTER_PASSWORD='repl_pwd',MASTER_CONNECT_RETRY=1 ,MASTER_RETRY_COUNT=1000, MASTER_DELAY=0, MASTER_HEARTBEAT_PERIOD=10 for CHANNEL 'kunlun_repl'; start slave for CHANNEL 'kunlun_repl';
  • 验证主备关系是否正常
ps -ef|grep $port

示例:

ps -ef|grep 23301

登录重做完成的备节点进行查看主备关系:

cd $install_dir/instance_binaries/storage/$port/kunlun-storage-$version/dba_tools/

示例:

cd /data/ha/kunlun/instance_binaries/storage/23301/kunlun-storage-1.2.1/dba_tools/

./imysql.sh $port

示例:

./imysql.sh 23301

show slave status\G

如图:

img

重做备机后,主备关系正常。

08 计算节点访问权限控制

通过修改每个计算节点的pg_hba.conf文件,进行访问权限控制。

操作步骤,每个计算节点操作:

  • 修改pg_hba.conf:

查看文件所在目录:

ps -ef|grep $port  # $port是指计算节点的端口号

示例:

ps -ef|grep 23001

如图:

img

cd /$install_dir/server_datadir/$port
# $install_dir是指计算节点安装目录
# $port是指计算节点端口号

示例:

cd /data/ha/kunlun/server_datadir/23001

如图:

img

在配置文件的第一行加入如下内容:

host  all    kunlun_test   192.168.0.139/24    reject

该内容的具体含义是拒绝所有来自192.168.0.139的kunlun_test用户的TCP/IP连接访问。**在前面第一行加入的原因为前面的配置会覆盖后面的配置,如果前面有相关比较大的允许访问权限配置,那么后面即使设置了拒绝也无法生效。**具体的pg_hba.conf文件参数配置介绍见PG官网链接:

https://www.postgresql.org/docs/current/auth-pg-hba-conf.html

如图:

img

  • 使配置生效:

查看kunlun-server进程,确认pg_ctl工具所在目录

这里以kunlun-server的端口号23001为例:

ps -ef|grep 23001

图片示例:

img

查看pg_ctl所在的目录:

cd /data/ha/kunlun/instance_binaries/computer/23001/kunlun-server-1.2.1/bin

ls -l

图片示例:

img

执行reload:

./pg_ctl -D /data/ha/kunlun/server_datadir/23001 reload

图片示例:

img

验证生效:

登录计算节点:

psql -h192.168.0.150 -p23001 -Uabc postgres

执行sql:

select * from pg_hba_file_rules ;

img

  • 登录验证

192.168.0.139机器上执行登录:

img

登录失败,报错信息描述pg_hba.conf配置文件拒绝了连接。

09 手动配置cgroup实现CPU硬隔离

cgroup实现CPU硬隔离在创建集群会自动执行,不需要手动设置,这里只是说明如需故障排查或者其他问题需要设置cgroup****时,操作使用说明。

  • 存储节点

执行命令:

到kunlun2cgroup工具目录下,该工具在node_mgr的bin/util目录下:

cd $base_dir/kunlun-node-manager-1.2.1/bin/util

# $base_dir是指安装基础目录,可以在部署时的拓扑文件.json中查看。

示例:

cd /data/ha/kunlun/kunlun-node-manager-1.2.1/bin/util

如图:

img

cgroup2kunlun工具参数解析:

Usage of ./cgroup2kunlun:
  -action string
    	'add' or 'delete' cgroup related to the port
  -control_mode string
    	resource control type, share or quota (default "quota")
  -cpu_nums int
    	cpu resources reserving account, 1 means one cpu cores (default 1)
  -pidFile string
    	instance pid file path
  -port string
    	instance port
  -resource_type string
    	resource controller type (default "cpu")

添加cgroup命令,示例:

./cgroup2kunlun -resource_type=cpu -port=33503 -cpu_nums=8 -control_mode=quota -pidFile=/data/ha/kunlun/storage_logdir/33503/mysql.pid -action=add
  • resource_type 参数为资源控制类型,默认为cpu

  • port参数为存储节点端口号

  • cpu_nums 参数为存储节点使用的vCPU核数

  • control_mode 参数为控制模式,默认为独占限制

  • pidFile 参数为存储节点mysql.pid文件的绝对路径

  • action 参数为配置cgroup的行为,分为add添加和delete删除

示例:

添加存储节点33503端口,8vCPU的限制:

./cgroup2kunlun -resource_type=cpu -port=33503 -cpu_nums=8 -control_mode=quota -pidFile=/data/ha/kunlun/storage_logdir/33503/mysql.pid -action=add

删除cgroup配置:

./cgroup2kunlun -resource_type=cpu -port=33503 -cpu_nums=8 -control_mode=quota -pidFile=/data/ha/kunlun/storage_logdir/33503/mysql.pid -action=delete
  • 计算节点

示例:

添加计算节点23001端口,8vCPU的限制:

./util/cgroup2kunlun -resource_type=cpu -port=23001 -cpu_nums=8 -control_mode=quota -pidFile=/data/ha/kunlun/server_datadir/23001/postmaster.pid -action=add

删除cgroup配置:

./util/cgroup2kunlun -resource_type=cpu -port=23001 -cpu_nums=8 -control_mode=quota -pidFile=/data/ha/kunlun/server_datadir/23001/postmaster.pid -action=delete

10 扩展管理extension

extension管理

  • 计算节点添加扩展(注意:集群只有一个计算节点时!!!

以添加uuid-ossp扩展为例

安装相关依赖

sudo yum install -y e2fsprogs-devel uuid-devel libuuid-devel zlib-devel zlib-static

下载pg11.2版本进行源码编译

wget https://ftp.postgresql.org/pub/source/v11.20/postgresql-11.20.tar.gz

Tips:如果wget命令下载速度过慢,可以尝试用电脑访问下载后传到服务器上。

解压后编译

Tar xf postgresql-11.20.tar.gz

cd postgresql-11.20

./configure --prefix=/opt/pgsql11.2 --with-uuid=ossp

执行后结果如下图,无报错:

img

sudo make

执行命令后如图:

img

sudo make install

执行命令后如图:

img

将编译好的扩展相关文件拷贝到对应的目录

cd postgresql-11.20 && sudo chown kunlun:kunlun -R *
cd postgresql-11.20/contrib/uuid-ossp/
cp -a uuid-ossp.so /data/ha/kunlun/instance_binaries/computer/23001/kunlun-server-1.2.1/lib/postgresql/

cp -a uuid-ossp--1.0--1.1.sql uuid-ossp--1.1.sql uuid-ossp--unpackaged--1.0.sql uuid-ossp.control /data/ha/kunlun/instance_binaries/computer/23001/kunlun-server-1.2.1/share/postgresql/extension/

目录介绍:

/data/ha/kunlun为**$base_dir**是指安装基础目录,可以在部署时的拓扑文件.json中查看。

23001为计算节点端口号,以实际的为准。

kunlun-server-1.2.1为计算节点安装的目录,一般以kunlun-server-版本号定义。

登录计算节点后创建uuid-ossp扩展

先查看已经存在的扩展

\dx

create extension if not exists "uuid-ossp";

\dx

select uuid_generate_v4();

如图所示:

img

  • 计算节点添加扩展(注意:集群有多个计算节点时!!!

同集群内其他计算节点添加扩展,需要yum安装所需依赖

sudo yum install -y e2fsprogs-devel uuid-devel libuuid-devel zlib-devel zlib-static

省去编译步骤,见单个计算节点的步骤进行操作。

然后在所有的计算节点上将编译好的扩展文件拷贝到对应的目录。

例如本实例中uuid-ossp扩展,只需要编译好的

uuid-ossp.so文件拷贝到**/data/ha/kunlun**/instance_binaries/computer/23001/kunlun-server-1.2.1/lib/postgresql/目录下;

uuid-ossp--1.0--1.1.sql、uuid-ossp--1.1.sql、uuid-ossp--unpackaged--1.0.sql、uuid-ossp.control这四个文件拷贝到**/data/ha/kunlun**/instance_binaries/computer/23001/kunlun-server-1.2.1/share/postgresql/extension/

最后在一个计算节点上进行操作加载extension即可,其他的计算节点就可以看到对应的extension。

登录计算节点后创建uuid-ossp扩展

先查看已经存在的扩展

\dx

create extension if not exists "uuid-ossp";

\dx

select uuid_generate_v4();

如图所示:

计算节点1:

img

计算节点2:

img

  • 将扩展文件添加到公共目录

为了往后新增计算节点或者创建新集群,不需要重复操作添加扩展,先在各个计划新增计算机器节点上安装依赖

sudo yum install -y e2fsprogs-devel uuid-devel libuuid-devel zlib-devel zlib-static

然后将扩展文件拷贝到对应的公共目录即可。

cd postgresql-11.20/contrib/uuid-ossp/
cp -a uuid-ossp.so $base_dir/program_binaries/kunlun-server-1.2.1/lib/postgresql/

cp -a uuid-ossp--1.0--1.1.sql uuid-ossp--1.1.sql uuid-ossp--unpackaged--1.0.sql uuid-ossp.control $base_dir/program_binaries/kunlun-server-1.2.1/share/postgresql/extension/

XPanel发起新增机器节点或者创建集群即可看到扩展。

Postgres_fdw扩展使用

postgres_fdw扩展为postgesql提供,无须手动下载后安装,直接加载extension即可。关于postgres_fdw介绍及操作示例可以先参考官网链接:http://postgres.cn/docs/11/postgres-fdw.html,了解后再进行操作。

环境介绍:

  • 外部server和表等相关信息:
  • host:192.168.0.150
  • post:23007
  • user:abc
  • password:省略
  • db_name:klustron,
  • schema_name:public,
  • table_name:k1。

内部映射相关信息:

  • server:foreign_server
  • 用户映射:abc
  • 映射表:foreign_table1

如下为实际的操作步骤:

  • 外部表k1信息

img

  • 内部映射等配置相关操作

1)创建extension

\dx

create extension "postgres_fdw";

\dx

如图:

img

2)create server,create mapping,create foreign table

create server foreign_server foreign data wrapper postgres_fdw options(host '192.168.0.150',port '23007',dbname 'klustron');

create user mapping for user server foreign_server options(user 'abc', password 'abc');

create foreign table foreign_table1(id int,name varchar(23)) server foreign_server options(schema_name 'public',table_name 'k1');

如图:

img

img

img

3)验证和操作外部表

select * from foreign_table1;
insert into foreign_table1 values(6,'james'),(7,'durant'),(8,'bryant');
select * from foreign_table1;
delete from foreign_table1 where id=7;
select * from foreign_table1;
update foreign_table1 set name='kobe' where id=8;
select * from foreign_table1;

如图:

img

外部表登录验证:

img

清理环境:

drop foreign table foreign_table1;
drop user mapping for user server foreign_server;
drop server foreign_server;
drop extension postgres_fdw;
select * from pg_user_mappings;
select * from pg_user_mapping;
\dx
show tables;

如图:

img

11 SSL认证

单向开启SSL

环境准备:

yum install -y openssl-devel openssl perl-ExtUtils*

未开启SSL前,登录计算节点没有SSL的信息:

img

开启后SSL后,登录计算节点有SSL信息:

img

开启步骤如下:

  • 生成证书和私钥文件
mkdir openssl
cd openssl/
openssl req -new -x509 -days 365 -nodes -text -out server.crt -keyout server.key -subj "/CN=centos7j"

# /CN=后跟主机名,可以使用hostname命令得出

修改server.key文件权限

chmod 600 server.key

拷贝到对应目录下,这里以计算节点的23007端口号为例:

cp -a server.* /data/ha/kunlun/server_datadir/23007/ #具体目录以实际为准,可执行ps -ef|grep $port $port代表计算节点端口号。

img

  • 修改配置文件
vim postgresql.conf

img

根据具体的文件绝对路径填写,ssl_cert_file和ssl_key_file,并开启ssl。

  • 重启计算节点

查看计算节点进程:

ps -ef|grep $port  # $port是指计算节点的端口号

示例:

ps -ef|grep 23007

到计算节点的安装目录中与bin目录同级的scripts目录下:

cd /$install_dir/instance_binaries/computer/$port/kunlun-server-$version/scripts

# $install_dir是指计算节点安装目录
# $port是指计算节点端口号
# $version 是指计算节点的版本号,例如:1.2.2

示例:

cd /data/ha/kunlun/instance_binaries/computer/23007/kunlun-server-1.2.2/scripts

启动:

python2 start_pg.py --port=$port

示例:

python2 start_pg.py --port=23007

停止:

python2 stop_pg.py --port=$port

示例:

python2 stop_pg.py --port=23007

登录计算节点创建sslinfo扩展和验证

psql -h192.168.0.150 -p23007 -Uabc postgres

create extension sslinfo;

\dx

select ssl_is_used();

img

12 冷热数据分离

冷热数据分离是指,将一些业务基本不读或者不常读的表,例如归档表、日志表,移动到配置较低shard中,并用rocksdb引擎来存储。这样做的好处是将腾出更多的可用数据空间给到热数据来存储,加快热数据的查询速率。

操作步骤如下:

以test1表为例,插入测试数据10000条,

先查看当前集群的shard分布情况,然后创建测试表test1并插入数据:

# select * from pg_shard;
# create table test1(id int,name varchar(52),name1 varchar(52),price int,primary key (id)) with (engine='innodb');
# show create table test1;
# insert into test1 select n,md5(n::text),md5(n+1::text),random()*300 dd  from generate_series(1,10000) n;
# select count(*) from test1;

如图:

img

设shard_6为配置较低的冷shard。

创建表test1_cool,表结构与test1一致,但指定存储引擎为rocksdb,shard=6。

# create table test1_cool(id int,name varchar(52),name1 varchar(52),price int,primary key (id)) with (engine='rocksdb',shard=6);
# show tables;
# show create table test1_cool ;
# show create table test1;
# select count(*) from test1;
# select count(*) from test1_cool;

img

通过XPanel执行表重分布功能,将test1的数据从热shard_5迁移到冷shard_6中。最后将原test1表重命名为其他表名,将迁移数据后的test1_cool表重命名为test1,业务无需在代码上做更,需要注意的是,表重分布的原理为逻辑备份,即将数据从原表导出后,再导入到目标表中,最后重命名原表和目标表,所以需要根据数据量大小,评估变更时间窗口,为变更预留充足的时间。

img

img

验证迁移是否完成:

img

确认迁移完毕。

END