本工具是面向 Apache ShardingSphere 和 OpenGauss 构建的分布式数据库集群提供的按时间点恢复(PITR,Point-in-time Recovery)功能的命令行工具。
在开始之前,你需要准备如下三台服务器,并设置相关运行环境和安装所需依赖软件。这三台服务器的拓扑结构示意如下:
+------------------------------+ +------------------+ | | | OpenGauss Server | | Apache ShardingSphere Proxy | | Pitr Agent | | Apache Zookeeper | ----------> +------------------+ | Pitr Cli (aka `gs_pitr`) | | OpenGauss Server | | | | Pitr Agent | +------------------------------+ +------------------+
你需要至少准备三台服务器,其中一台作为 Pitr 命令行工具的执行环境,它上面还会部署 Apache ShardingSphere,另外两台则用来部署 OpenGauss 和 Pitr agent。
Role | Components | |
---|---|---|
1 | Pitr cli operation server | Pitr Cli + ShardingSphere Proxy + Zookeeper + GLT |
2 | OpenGauss Server 1 | OpenGauss Server + Pitr Agent |
3 | OpenGauss Server 2 | OpenGauss Server + Pitr Agent |
在服务器都准备就绪后,你需要检查和确认如下内容:
omm
并且可以访问数据库 omm
cbm tracking
一般来说,Pitr 命令行工具,包括 cli 二进制和 agent 二进制都可以在 Apache ShardingSphere-on-Cloud 的发布页 进行下载。
如果希望自行编译二进制程序,你可以使用 Golang 1.20(推荐)以及 Linux 3.10.0-957.el7.x86_64(至少)作为编译环境,并按照如下步骤编译得到 Pitr 命令行工具 cli 和 agent。
第一步:克隆项目
git clone git@github.com:apache/shardingsphere-on-cloud.git
第二步:编译 Pitr Agent
cd shardingsphere-on-cloud/pitr/agent make build
第三步:编译 Pitr Cli
cd shardingsphere-on-cloud/pitr/cli make build
Pitr 命令行工具 cli 和 agent 的通信由一对 SSL 密钥对进行加密,你可以选择使用任何可用的密钥对或者生成一对新的密钥对,例如:
密钥对需要部署在 Pitr agent 所在的服务器上。
如果你想要生成一对密钥对,请确保你拥有一个可用的 OpenSSL 环境。可以通过检查环境变量 OPENSSL_CONF 来查找 OpenSSL 使用的配置文件,默认的地址是 /etc/pki/tls/openssl.cnf
。
然后使用如下 pitr/agent
目录下的脚本并执行如下命令进行生成:
cd shardingsphere-on-cloud/pitr/agent make openssl-local
现在,正常情况下可以在 ./certs
目录下得到一对新的密钥对。
Pitr cli (即 gs_pitr
)和 Pitr agent (即 pitr-agent
)二进制都可以在 Apache ShardingSphere on Cloud 的发布页下载,或者在你的环境中按前述步骤手动编译得到。
整个部署过程由如下两个步骤构成:
You can download pre-compiled Pitr tools binary release or compile them yourself from source code.
二进制包以 .tar.gz 的文件存放在发布页,你可以下载期望版本并解压得到二进制文件 gs_pitr
和 pitr-agent
。
根据前置条件
章节的编译说明
小节获取具体的操作说明。
在成功获取二进制文件后,你需要将 gs_pitr
放在和 Apache ShardingSphere Proxy 相同的服务器上,并将 pitr-agent
放在 OpenGauss 所在的所有服务器上。
使用 OpenGauss 主机并替换如下配置中的 ${OPENGAUSS_SERVER_1} 和 ${OPENGAUSS_SERVER_2}:
server.yaml
mode: type: Cluster repository: type: ZooKeeper props: namespace: governance server-lists: localhost:2181 retryIntervalMilliseconds: 500 timeToLiveSeconds: 60 maxRetries: 3 operationTimeoutMilliseconds: 500 authority: users: - user: root@% password: root - user: sharding password: sharding privilege: type: ALL_PERMITTED transaction: defaultType: XA providerType: Atomikos props: proxy-frontend-database-protocol-type: openGauss # 以下配置为 GLT 相关配置 globalClock: enabled: true type: TSO provider: redis props: host: 127.0.0.1 port: 6379
config-sharding.yaml
databaseName: sharding_db dataSources: ds_0: url: jdbc:opengauss://${OPENGAUSS_SERVER_1}:13100/tpccdb?useSSL=false username: root password: root connectionTimeoutMilliseconds: 30000 idleTimeoutMilliseconds: 60000 maxLifetimeMilliseconds: 1800000 maxPoolSize: 50 minPoolSize: 1 ds_1: url: jdbc:opengauss://${OPENGAUSS_SERVER_2}:13100/tpccdb?useSSL=false username: root password: root connectionTimeoutMilliseconds: 30000 idleTimeoutMilliseconds: 60000 maxLifetimeMilliseconds: 1800000 maxPoolSize: 50 minPoolSize: 1
然后使用脚本 bin/start.sh
来启动 ShardingSphere Proxy。脚本包含在 apache-shardingsphere-{version}-shardingsphere-proxy-bin.tar.gz 中。
在 postgres.conf 中开启 cbm tracking
enable_cbm_tracking = on
然后可以启动所有的 OpenGauss 服务。
在你启动 Pitr agent 之前,需要先为 Pitr agent 部署证书:
如果 SSL 密钥对是按前述步骤自行编译的,证书文件所在的目录为 shardingsphere-on-cloud/pitr/agent/certs
。你可以切换目录到证书目录,并执行如下命令:
scp tls.crt tls.key root@${OPENGAUSS_SERVER_1}:/home/omm/ scp tls.crt tls.key root@${OPENGAUSS_SERVER_2}:/home/omm/
或者使用现有可用的密钥对同样需要将其部署到 OpenGauss 服务器上相同的路径下。
cd shardingsphere-on-cloud/pitr/agent scp pitr-agent root@${OPENGAUSS_SERVER_1}:/home/omm/ scp pitr-agent root@${OPENGAUSS_SERVER_2}:/home/omm/
/home/omm
这里是 /home/omm
目录下面的文件:
$ ll total 13M drwx------ 4 omm omm 32 Mar 2 14:22 data drwx------ 29 omm omm 4.0K May 23 11:37 pgdata -rwxr-xr-x 1 root root 13M May 16 18:25 pitr-agent -rwxr-xr-x 1 root root 1.1K May 16 18:26 tls.crt -rwxr-xr-x 1 root root 1.7K May 16 18:26 tls.key
./pitr-agent -pgdata /data/data-glt/d1 -port 18080 -tls-crt tls.crt -tls-key tls.key -log-level debug
参数说明:
PGDATA
和--env-source-file
进行指定。优先级如下:PGDATA
env-source-file
你可以使用 gspl
连接到 ShardingSphere Proxy 并为测试生成数据:
gsql -h127.0.0.1 -p3307 -Usharding -Wsharding -d sharding_db
SHOW STORAGE UNITS
t_user
CREATE SHARDING TABLE RULE t_user( STORAGE_UNITS(ds_0,ds_1), SHARDING_COLUMN=user_id, TYPE(NAME="hash_mod",PROPERTIES("sharding-count"="4")) );
SHOW SHARDING TABLE RULE t_user;
t_user
CREATE TABLE t_user ( user_id INT NOT NULL, order_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (user_id) );
SHOW SHARDING TABLE NODES;
insert into t_user( user_id, order_id, status) values(1,1,1); insert into t_user( user_id, order_id, status) values(2,2,2); insert into t_user( user_id, order_id, status) values(3,3,3); insert into t_user( user_id, order_id, status) values(4,4,4); select * from t_user;
执行备份:
./gs_pitr backup --host ${OPENGAUSS_SERVER_1} --password sharding --port 3307 --username sharding --agent-port 18080 --dn-threads-num 10 --dn-backup-path "/home/omm/data" -b FULL
参数说明:
查看备份:
./gs_pitr show
参数说明:
你需要先删除部分 t_user
表中的记录:
delete from t_user where user_id=1; delete from t_user where user_id=2;
执行恢复:
./gs_pitr restore --host ${OPENGAUSS_SERVER_1} --password sharding --port 3307 --username sharding --agent-port 18080 --dn-threads-num 10 --dn-backup-path "/home/omm/data" --id ${BACKUP_ID}
参数说明:
验证数据:
select * from t_user;
删除备份:
./gs_pitr delete --host ${OPENGAUSS_SERVER_1} --password sharding --port 3307 --username sharding --agent-port 18080 --dn-backup-path "/home/omm/data" --id ${BACKUP_ID}
参数说明:
$HOME
下创建 .gs_pitr/backup
目录,并在该目录下存放备份元数据文件$HOME/.gs_pitr/backup
下的备份数据到对应设备的相同路径$HOME/.gs_pitr/backup
下的备份文件将被删除Ctrl-C
取消或者 kill
中止进程,不会同时停止服务端正在执行的任务