PolarDB for PostgreSQL文档翻译之部署和集群管理

本篇共翻译了PolarDB for PostgreSQL V1.0(开源第一阶段)的2个功能特性的说明:

  1. 编译部署 - deployment.md
  2. 集群管理 - 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_ctlpgxc提供的工具,主要用于管理pgxc集群,支持集群部署、集群配置、集群初始、集群启动、集群停止、集群清理等。我们扩展了这个工具以实现对Paxos 3节点、基于逻辑复制的Active-Active、独立版本、pgxc集群管理器的支持,pgxl的客户将很容易使用PolarDB集群和独立版本。

pg_cronCitus提供支持的基于时间的作业调度器,在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_1polardb_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 © 阿里巴巴集团有限公司版权所有

你可能感兴趣的:(PolarDB for PostgreSQL文档翻译之部署和集群管理)