本篇共翻译了PolarDB for PostgreSQL V1.0(开源第一阶段)的2个功能特性的说明:
- 编译部署 - deployment.md
- 集群管理 - cluster_manager.md
编译部署 - deployment.md
github原文地址: https://github.com/alibaba/PolarDB-for-PostgreSQL/blob/master/doc/polardb/deployment.md
gitee原文地址: https://gitee.com/mirrors_alibaba/PolarDB-for-PostgreSQL/blob/master/doc/polardb/deployment.md
中文翻译地址: https://www.jianshu.com/p/c44adaff78b3
部署概述
我们支持两种部署方式:
- [一键部署](Fast Deployment) 是只用一个命令就可以创建新的默认环境的脚本。
- [源代码编译部署](Deployment from Source Code) 介绍了更多关于部署命令和脚本的详细用法。
这两种部署方式都需要先安装依赖 - 详见"准备工作"章节。
并确保你的系统环境符合要求 - 详见"操作系统和其他依赖性"章节。
译者注: 由于不支持页内跳转链接, 故下面的目录的链接已去除。
- 操作系统和其他依赖
- 前置准备
- 一键部署
- 源代码编译部署
操作系统和其他依赖
-
操作系统
- Alibaba Group Enterprise Linux Server, VERSION="7.2 (Paladin)", 3.10.0-327.ali2017.alios7.x86_64
- Centos 7
-
GCC 版本
- gcc 10.2.1
- gcc 9.2.1
- gcc 7.2.1
- gcc 4.8.5
准备工作
从 https://github.com/alibaba/PolarDB-for-PostgreSQL 下载源码
安装依赖包 (以 CentOS 为例)
sudo yum install bison flex libzstd-devel libzstd zstd cmake openssl-devel protobuf-devel readline-devel libxml2-devel libxslt-devel zlib-devel bzip2-devel lz4-devel snappy-devel python-devel
- 为了可以便捷访问, 设置SSH免密登录
使用ssh-copy-id
命令配置SSH免密访问, 这样在使用pgxc_ctl的时候就不用每次输入密码了。
ssh-copy-id username@IP
- 设置环境变量
# vi ~/.bashrc
export PATH="$HOME/polardb/polardbhome/bin:$PATH"
export LD_LIBRARY_PATH="$HOME/polardb/polardbhome/lib:$LD_LIBRARY_PATH"
快速部署(一键部署)
本脚本使用默认配置编译PolarDB,部署二进制可执行程序,并启动一个由三个节点组成的集群,包括一个领导者(leader)和两个跟随者(follower)。
在调用本脚本之前,请先检查 "前置准备 "中的 "环境变量、依赖包安装、免密登录设置"。
- 运行
onekey.sh
脚本
./onekey.sh all
-
onekey.sh
脚本简介
sh onekey.sh [all|build|configure|deploy|setup|dependencies|cm|clean]
* all: uses default configuration to compile PolarDB, to deploy binary, and to start a cluster of three nodes, including a leader and two followers.
* build: invoke *build.sh* script to compile and create a release version.
* configure:generate default cluster configuration; the default configuration includes a leader and two followers.
* deploy: deploy binary to all related machine.
* setup: initialize and start database based on default configuration.
* dependencies: install dependent packages (use Centos as an example).
* cm: setup cluster manager component.
* clean: clean environment.
- 检查进程情况 (1 leader, 2 follower), 以及它们的复制角色和状态:
ps -ef | grep polardb
psql -p 10001 -d postgres -c "select * from pg_stat_replication;"
psql -p 10001 -d postgres -c "select * from polar_dma_cluster_status;"
源代码编译部署
我们扩展了PG-XC/PG-XL
开源项目中一个名为pgxc_ctl
的工具,以支持集群管理,如配置生成、配置修改、集群初始化、启动/停止节点和切换。它的详细用法可以在部署中找到。
使用 build.sh 脚本编译代码
我们可以使用PolarDB原生提供的一个shell脚本 build.sh 来编译代码以及在本地安装部署。
sh build.sh [deploy|verify|debug|repeat]
- deploy:构建发布版本,这个是默认参数
- verify:构建发布版本,启用断言
- debug :构建调试版本
- repeat:在不调用
configure
的情况下编译源代码(即使用最后一次configure
的配置)
例如:
$ sh build.sh # 构建, 编译一个发布版本
如果你得到关于对protobuf
符号的未定义引用的链接器错误,
那么它可能是表示系统安装的protobuf
是用老版本的GCC或老版本的AI编译的,请在build.sh
的以下部分将-c
选项设置为ON
。
# build polardb consensus dynamic library
cd $CODEHOME/src/backend/polar_dma/libconsensus/polar_wrapper
if [[ "$BLD_OPT" == "debug" ]]; then
sh ./build.sh -r -t debug -c ON
else
sh ./build.sh -r -t release -c ON
fi
cd $CODEHOME
集群安装
创建集群配置文件
我们使用 pgxc_ctl prepare 来生成一个默认的集群配置文件。
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf prepare standalone
集群配置文件格式说明
这个配置文件其实是一个shell脚本, 由OVERALL
,Datanodes
等几个部分组成。
#!/usr/bin/env bash
#
# polardb Configuration file for pgxc_ctl utility.
pgxcInstallDir=$HOME/pghome
#---- OVERALL -----------------------------------------------------------------------------
#
pgxcOwner=$USER # owner of the Postgres-XC database cluster.
# Here, we use this both as linus user and database user.
# This must be the super user of each coordinator and datanode.
pgxcUser=$pgxcOwner # OS user of Postgres-XC owner
tmpDir=/tmp # temporary dir used in XC servers
localTmpDir=$tmpDir # temporary dir used here locally
standAlone=y # cluster version still not open source for now
dataDirRoot=$HOME/DATA/polardb/nodes
#---- Datanodes ---------------------------------------------------------------------------
#---- Shortcuts --------------
datanodeMasterDir=$dataDirRoot/dn_master
datanodeSlaveDir=$dataDirRoot/dn_slave
datanodeLearnerDir=$dataDirRoot/dn_learner
datanodeArchLogDir=$dataDirRoot/datanode_archlog
#---- Overall ---------------
primaryDatanode=datanode_1 # Primary Node.
datanodeNames=(datanode_1) #
datanodePorts=(10001) # Master and slave use the same port!
datanodePoolerPorts=(10011) # Master and slave use the same port!
datanodePgHbaEntries=(::1/128) # Assumes that all the coordinator (master/slave) accepts
#datanodePgHbaEntries=(127.0.0.1/32) # Same as above but for IPv4 connections
#---- Master ----------------
datanodeMasterServers=(localhost) # none means this master is not available.
datanodeMasterDirs=($datanodeMasterDir) #
datanodeMaxWalSender=5 # max_wal_senders: needed to configure slave.
datanodeMaxWALSenders=($datanodeMaxWalSender) # If zero value is max_wal_senders configuration for each datanode
#---- Slave -----------------
datanodeSlave=y # Specify y if you configure at least one coordiantor slave.
datanodeSlaveServers=(localhost) # Otherwise, the following value none means this slave is not available
datanodeSlavePorts=(10101) # Master and slave use the same port!
datanodeSlavePoolerPorts=(10111) # Master and slave use the same port!
datanodeSlaveSync=y # If datanode slave is connected in synchronized mode
datanodeSlaveDirs=($datanodeSlaveDir)
datanodeArchLogDirs=( $datanodeArchLogDir)
datanodeRepNum=2 # no HA setting 0, streaming HA and active-active logcial replication setting 1 replication, paxos HA setting 2 replication.
datanodeSlaveType=(3) # 1 is streaming HA, 2 is active-active logcial replication, 3 paxos HA.
#---- Learner -----------------
datanodeLearnerServers=(localhost) # value none means this learner is not available
datanodeLearnerPorts=(11001) # learner port!
#datanodeSlavePoolerPorts=(11011) # learner pooler port!
datanodeLearnerSync=y # If datanode learner is connected in synchronized mode
datanodeLearnerDirs=($datanodeLearnerDir)
# ---- Configuration files ---
# You may supply your bash script to setup extra config lines and extra pg_hba.conf entries here.
datanodeExtraConfig=datanodeExtraConfig
cat > $datanodeExtraConfig <
通过 pgxc_ctl 部署可执行文件到所有节点
We use pgxc_ctl deploy command to deploy PolarDB binary in a cluster,option -c for configuration file.
PolarDB binary is installed in pgxcInstallDir of all nodes specified in the configuration file.
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf deploy all
初始化数据库
- Initialize database nodes and start them based on the configuration file.
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf clean all
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf init all
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf monitor all
检查和测试
ps -ef | grep postgres
psql -p 10001 -d postgres -c "create table t1(a int primary key, b int);"
createdb test -p 10001
psql -p 10001 -d test -c "select version();"
其他集群管理命令例子
- 安装集群管理依赖包
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf deploy cm
- 启动集群
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf start all
- 停止集群
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf stop all
- 故障节点切换
datanode_1 是在 polardb_paxos.conf 配置文件中设置的节点名称。
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf failover datanode datanode_1
- 集群健康检查
检查集群状态和启动不在线的节点
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf healthcheck all
- 其他命令例子
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf kill all
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf log var datanodeNames
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf show configuration all
Copyright © 阿里巴巴集团有限公司版权所有
集群管理 - cluster_manager.md
github原文地址: https://github.com/alibaba/PolarDB-for-PostgreSQL/blob/master/doc/polardb/cluster_manager.md
gitee原文地址: https://gitee.com/mirrors_alibaba/PolarDB-for-PostgreSQL/blob/master/doc/polardb/cluster_manager.md
中文翻译地址: https://www.jianshu.com/p/c44adaff78b3
基于 pgxc_ctl 和 pg_cron 的集群管理
PolarDB for PostgreSQL支持3种高可用模式, 分别是Paxos 3节点,Steaming HA 和 基于逻辑复制的Active-Acitve HA模型。集群版和独立版将基于以上的 HA 模式来保持系统的高可用性。
pgxc_ctl
是pgxc
提供的工具,主要用于管理pgxc
集群,支持集群部署、集群配置、集群初始、集群启动、集群停止、集群清理等。我们扩展了这个工具以实现对Paxos 3节点、基于逻辑复制的Active-Active、独立版本、pgxc集群管理器的支持,pgxl的客户将很容易使用PolarDB集群和独立版本。
pg_cron
是Citus
提供支持的基于时间的作业调度器,在PolarDB中主要用于集群的心跳。它将自动调用healthcheck
命令来检查集群的健康状况,并在必要时自动进行主备切换。
如何使用
基于源码发布
我们扩展了一个来自PG-XC/PG-XL
开源项目中的名为pgxc_ctl
的工具,以支持集群管理,如配置生成、配置修改、集群初始化、启动/停止节点和切换等。它的详细用法可以在deployment中找到。
下载源代码
-
安装依赖包(以Centos为例)
sudo yum install libzstd-devel libzstd zstd cmake openssl-devel protobuf-devel readline-devel libxml2-devel libxslt-devel zlib-devel bzip2-devel lz4-devel snappy-devel
-
设置免密登录
使用ssh-copy-id
命令配置ssh免密登录, 使得使用pgxc_ctl
部署和管理集群是无需输入密码。ssh-copy-id username@IP
-
构建和安装二进制可执行程序
./configure --prefix=$HOME/polardb/polardbhome make make install cd contrib make
或者直接执行
build.sh
脚本。./build.sh
-
设置环境变量
vi ~/.bashrc export PATH="$HOME/polardb/polardbhome/bin:$PATH" export LD_LIBRARY_PATH="$HOME/polardb/polardbhome/lib:$LD_LIBRARY_PATH"ß
-
生成默认配置文件
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf prepare standalone
-
部署二进制文件
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf deploy all
-
清理数据和初始化集群以及监控服务
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf clean all pgxc_ctl -c $HOME/polardb/polardb_paxos.conf init all pgxc_ctl -c $HOME/polardb/polardb_paxos.conf monitor all
-
安装集群管理依赖包
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf deploy cm
-
启动集群的所有节点
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf start all
-
停止集群的所有节点
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf stop all
-
数据库节点自动切换
datanode_1
是polardb_paxos.conf
配置文件中配置的节点名称.pgxc_ctl -c $HOME/polardb/polardb_paxos.conf failover datanode datanode_1
-
集群监控检查
检查集群状态和重新启动down掉的节点。
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf healthcheck all
-
其他命令例子
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf kill all pgxc_ctl -c $HOME/polardb/polardb_paxos.conf log var datanodeNames pgxc_ctl -c $HOME/polardb/polardb_paxos.conf show configuration all
-
检查和测试
ps -ef | grep postgres psql -p 10001 -d postgres -c "create table t1(a int primary key, b int);" createdb test -p 10001 psql -p 10001 -d test -c "select version();"
Copyright © 阿里巴巴集团有限公司版权所有