PolarDB for PostgreSQL文档翻译

github原文地址: https://github.com/alibaba/PolarDB-for-PostgreSQL/blob/master/README.md
gitee原文地址: https://gitee.com/mirrors_alibaba/PolarDB-for-PostgreSQL/blob/master/README.md
中文翻译地址: https://www.jianshu.com/p/b107fd5f2e28

注意注意: PolarDB for PostgreSQL做了重大调整, 本文的内容已经不适用了, github仓库上的这些文档都已经被删除。调整后的PolarDB for PostgreSQL是类似Oracle RAC的架构。

PolarDB for PostgreSQL是什么?

PolarDB for PostgreSQL(简称PolarDB)是一个基于PostgreSQL的开源数据库系统。它扩展了PostgreSQL成为一个无共享(share-nothing)的分布式数据库,它支持全局数据一致性跨数据库节点的ACID分布式SQL处理,以及通过基于Paxos的复制实现数据冗余高可用性。PolarDB旨在为PostgreSQL在高性能、可扩展性、高可用性和弹性等方面增加价值和新功能。同时,PolarDB尽最大的努力保持对PostgreSQL的SQL兼容性。

PolarDB将以PostgreSQL的扩展(extension)和补丁(patch)的形式开发和演进, 逐渐实现其功能和特性。其中, 扩展部分包括在PostgreSQL内核之外实现的组件,如分布式事务管理、全局或分布式时间服务、分布式SQL处理、额外的元数据、内部功能、以及管理数据库集群和进行容错或恢复的工具。PolarDB的大部分功能都在PostgreSQL的扩展中,它的目标是轻松升级轻松迁移,以及快速适配。补丁部分包括对内核的必要修改,例如针对不同隔离级别的分布式MVCC。我们希望补丁部分的功能和代码是有限的, 从而使得PolarDB可以很容易地升级到较新的PostgreSQL版本,并保持与PostgreSQL的完全兼容。

译者注: 简书不支持页内跳转, 所以下面的目录的链接已去除.

  • PolarDB快速开始
  • 架构和路线图
  • 文档
  • 参与开发
  • 许可说明
  • 鸣谢
  • 交流

PolarDB快速开始

有三种方法可以快速试用PolarDB:阿里巴巴云服务、使用Docker镜像部署和源代码编译部署。

阿里巴巴云服务

TBD

使用Docker镜像部署

本节描述了如何创建PolarDB-for-Postgresql镜像,以及如何使用该镜像进行快速使用。

  • 构建一个PolarDB-for-Postgresql的Docker镜像

    docker build -t polardb-for-postgresql -f ./docker/Dockerfile .
    
  • 启动一个PolarDB-for-Postgresql镜像的容器, 访问端口为10001

    docker run --name polardb -p 10001:10001 -d polardb-for-postgresql:latest
    
  • 用psql连接PolarDB-for-Postgresql容器内的数据库服务

    psql -d postgres -U postgres -h localhost -p 10001
    
  • 如果宿主机没有安装psql, 可以先进入到容器内部, 再用容器内部的psql连接数据库服务

    docker exec -it polardb /bin/bash
    

源代码编译部署

从源代码部署也有两种方法:使用一键部署脚本和分步部署。

准备工作

译者注: 为了减少后续操作失败的可能性, 尽可能创建和使用postgres用户来编译和部署PolarDB。

  • https://github.com/alibaba/PolarDB-for-PostgreSQL 下载源代码

    译者注: 可以 git clone 或者 直接 下载master分支的代码

  • 安装依赖包 (以 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
    

    译者注: 也可以使用./onekey.sh dependencies一键部署脚本来完成这个步骤。

  • 设置授权密钥以实现快速访问

    调用ssh-copy-id来安装一个授权的密钥。它的目的是为pgxc_ctl提供访问权限,避免每次登录都要输入密码。

    ssh-copy-id username@IP
    

    译者注:
    如果使用ssh username@IP命令连接仍然需要输入密码, 请自行查阅相关资料或者在文章评论区留言。
    设置本机localhost免密登录步骤参考:

    1. ssh-keygen -t rsa
    2. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    3. ssh postgres@localhost # 应该不需要输入密码就能连接成功
  • 设置环境变量

    使用命令 vi ~/.bashrc 编辑~/.bashrc文件, 更新以下两个环境变量:

    export PATH="$HOME/polardb/polardbhome/bin:$PATH"
    export LD_LIBRARY_PATH="$HOME/polardb/polardbhome/lib:$LD_LIBRARY_PATH"
    

    然后使用 source ~/.bashrc 命令使得环境变量生效。

一键部署

本脚本使用默认配置编译PolarDB,部署二进制文件,并启动一个由三个节点组成的集群,包括一个领导者(leader)和两个跟随者(follower)。
在调用本脚本之前,请先检查 "准备工作" 中的 "环境变量、依赖包、授权密钥"操作是否已成功完成。

  • 运行 onekey.sh 脚本

    ./onekey.sh all
    
  • 检查运行进程 (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
    
  • 生成默认配置文件 (standalone配置: 1 leader, 2 follower)

    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
    
  • 集群健康检查

    检查集群状态, 如果有节点不在线会尝试重新启动该节点。

    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();"
    

    参考部署以获得详细说明。

    回归和其他测试的细节可以在这里找到。一些基准测试的例子是这里

架构和路线图

PolarDB使用一个无共享的架构。每个节点存储数据并执行查询,它们通过消息传递相互协调。该架构允许通过在集群中添加更多的节点来扩展数据库的规模。

PolarDB通过主键哈希将表切成分片。分片的数量是可以配置的。分片存储在PolarDB节点中。当查询访问许多节点上的分片时,会使用分布式事务和事务协调器来维持跨节点的ACID。

每个分片被复制到三个节点上,每个副本存储在不同的节点上。为了节约成本,我们可以部署其中两个副本来存储完整的数据。第三个副本只存储预写式日志(WAL),它参与了选举,但不能被选为领导者。

更多信息见架构设计

文档

贡献

PolarDB是建立在开源项目上的,并扩展了开源的PostgreSQL。我们欢迎并感谢你的贡献。请参考 贡献 了解如何开始编码和提交 PR 。

许可证制度

PolarDB代码以 Apache 2.0版 许可和 PostgreSQL 代码的许可发布。

相关的许可证可以在每个文件顶部的注释中找到。

参考LicenseNOTICE了解详情。

鸣谢

一些代码和设计思想来自其他开源项目,如PG-XC/XL(pgxc_ctl)、TBase(基于时间戳的vacuum和MVCC的一部分)和Citus(pg_cron)。感谢他们的贡献。

交流


Copyright © 阿里巴巴集团有限公司版权所有

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容