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免密登录步骤参考:- ssh-keygen -t rsa
- cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- 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_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
-
检查和测试
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 代码的许可发布。
相关的许可证可以在每个文件顶部的注释中找到。
鸣谢
一些代码和设计思想来自其他开源项目,如PG-XC/XL(pgxc_ctl)、TBase(基于时间戳的vacuum和MVCC的一部分)和Citus(pg_cron)。感谢他们的贡献。
交流
-
在Slack上的PolarDB for PostgreSQL
-
PolarDB技术推广小组在钉钉上举办的活动
由于有二维码会被简书锁定, 所以这里只贴出二维码链接, 需要的同学请自行打开链接再扫码。
Copyright © 阿里巴巴集团有限公司版权所有