7天突破PolarDB for Postgre 2022版
第一讲 单机本地存储部署实例
分享人:棠羽,阿里云智能数据库产品事业部PolarDB产品部内核工程师
视频地址:https://developer.aliyun.com/learning/course/992/detail/14958
目录
一、PolarDB架构解读
二、快速上手:PolarDB基于单机本地存储部署
三、Q&A
正文:
一、PolarDB架构解读
PolarDB PostgreSQL(以下简称 PolarDB)是阿里云自主研发的云原生数据库产品,兼容Postgre,采用基于共享存储的存算分离架构。
- 计算-存储分离:是指PolarDB的计算节点和存储节点是分离的,可以分别独立的横向扩展;
- 共享存储:是指所有计算节点有着各自独立的Cpu和内存资源,但共享使用底层磁盘存储节点,PolarDB存储接口支持多种磁盘存储,包括本地文件系统、跨机房跨区域的分布式文件系统。
PolarDB基于共享存储的存算分离架构
本篇从最简单的本地磁盘存储讲解部署PolarDB的实例。
文档参考:https://github.com/ApsaraDB/PolarDB-for-PostgreSQL
二、快速上手:PolarDB基于单机本地存储部署
以下是基于单机本地存储编译PolarDB源码并启动一写多读实例的步骤,推荐使用Docker容器方式部署PolarDB,可以减少手动环境配置,简化部署流程。
安装Docker
1、Docker环境安装要求及官方文档:
• CPU架构为AMD64/ARM64
• 可用内存4GB以上
• 已安装Docker
- Ubuntu:在 Ubuntu 上安装 Docker Engine
(文档:https://docs.docker.com/engine/install/ubuntu/)
- Debian:在 Debian 上安装 Docker Engine
(文档:https://docs.docker.com/engine/install/debian/)
- CentOS:在 CentOS 上安装 Docker Engine
(文档:https://docs.docker.com/engine/install/centos/)
- RHEL:在 RHEL 上安装 Docker Engine
(文档:https://docs.docker.com/engine/install/rhel/)
- Fedora:在 Fedora 上安装 Docker Engine
(文档:https://docs.docker.com/engine/install/fedora/)
- macOS(支持 M1 芯片):在 Mac 上安装 Docker Desktop,并建议将内存调整为 4GB 以上
(文档:https://docs.docker.com/desktop/mac/install/)
2、CentOS安装Docker步骤:
a.移除已有的docker版本;
sudo yum remove docker \
docker-client\
docker-client-latest\
docker-common\
docker-latest \
docker-latest-logrotate \
docker-engine
b.将官方Docker仓库添加到配置中;
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
c.通过yum安装Docker环境;
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
d.启动Docker守护进程。
sudo systemctl start docker
3、Ubuntu下安装Docker步骤:
a.移除已有的docker版本;
sudo apt-get remove docker docker-engine docker.io containerd runc
b.通过apt安装必要的工具;
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
c.通过curl添加GPG公钥;
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg|sudo gpg --dearmor -o/etc/apt/keyrings/docker.gpg
d.将docker的软件源仓库添加到apt软件源中;
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
e.最后通过apt命令安装docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
4、macOS和Windows用户安装Docker:
对于macOS和Windows用户,需要安装Docker Desktop,并开启虚拟化功能。以macOS为例,根据芯片是intel或者苹果进行下载安装;
如果已完成安装Docker Desktop,需要将docker的内存调整到4GB及以上。
然后登录环境检查docker版本号
docker -v
编译环境准备
以下两种方式任选一种即可:
- 基于PolarDB Docker开发镜像:无需手动配置环境,较为简单,该方式可以在 Docker 容器中编译并部署实例;
- 基于CentOS 7系统或容器:适合对开发环境做更多定制。
1、基于 PolarDB Docker开发镜像
a.PolarDB Docker镜像准备
DockerHub上提供了构建完毕的镜像,polardb/polardb_pg_devel:centos7,可供直接使用(支持x86_64 和ARM 架构)。
镜像地址:https://hub.docker.com/r/polardb/polardb_pg_devel/tags
b.编写Dockerfile
阿里云提供了构建上述开发镜像的 Dockerfile,从CentOS7官方镜像开始构建出一个安装完所有开发和运行时依赖的镜像,手动构建镜像Dockerfile文件。
Dockerfile地址: https://apsaradb.github.io/PolarDB-for-PostgreSQL/zh/guide/customize-dev-env.html#自行构建开发镜像
将Dockerfile内容复制到一个文件内(假设文件名为 Dockerfile-PolarDB)后,使用如下命令构建镜像:
docker build --network=host \
-t <image_name> \
-f Dockerfile-PolarDB .
注:请按需替换 <image_name> 内的 Docker 镜像名称。
c.搭建开发环境
从Github上拉取PolarDB源代码,PolarDB for PostgreSQL 的代码托管于GitHub上,稳定分支为POLARDB_11_STABLE。如果因网络原因不能稳定访问GitHub,则可以使用代理或访问Gitee国内镜像。
sudo yum install -y git
git clone -b POLARDB_11_STABLE https://github.com/ApsaraDB/PolarDB-for-PostgreSQL.git
d.启动Docker容器
docker run -it --v <src_to_polardb>:/home/postgres/PolarDB-for-PostgreSC
--cap-add=SYS_PTRACE--privileged=true --name <container_name> <image_name> bash
注:
请按需替换<>内的部分:
1.PolarDB for PostgreSQL的源码路径
2.将要启动的Docker容器名称
3.自行构建或DockerHub上的PolarDB开发镜像名称
通过bash进入容器后,进入源码目录,为用户postgres获取源代码目录权限,然后编译实例:
cd /home/postgres/PolarDB-for-PostgreSQL
sudo chown -R postgres:postgres3 ./
./polardb_build.sh
部署完成后,进行简单的实例检查,确保部署正确:
$HOME/tmp_basedir_polardb_pg_1100_bld/bin/ -P 5432 -h 127.0.0.1 -c 'select version();'
结果显示PostgreSQL 11.9(POLARDB 11.9),说明成功编辑部署PolarBD。
PolarDB 各集群形态编译部署
如上是基于本地单节点实例,也可以编译如下实例类型:
- 本地单节点实例
1个主节点(运行于5432端口)
./polardb_build.sh
- 本地多节点实例
1个主节点(运行于5432端口)
1个只读节点(运行于5433端口)
./polardb_build.sh --withrep --repnum=1
- 本地多节点带备库实例
1个主节点(运行于5432端口)
1个只读节点(运行于5433端口)
1个备库节点(运行于5434端口)
./polardb_build.sh --withrep --repnum=1 --withstandby
- 本地多节点 HTAP实例
1个主节点(运行于5432端口)
2个只读节点(运行于543315434端口)
./polardb_build.sh --initpx
实例回归测试
- 普通实例回归测试:
./polardb_build.sh -r -e -r-external -r-contrib -r-pl --withrep --with-tde
- HTAP实例回归测试:
./polardb_build.sh -r-px -e -r-external -r-contrib -r-pl --with-tde
- DMA实例回归测试:
./polardb_build.sh -r -e -r-external -r-contrib -r-pl --with-tde --with-dma
2、基于CentOS 7系统或容器
该方式具有root权限的干净的CentOS7操作系统上从零开始,可以是安装 CentOS7的物理机/虚拟机,或者从CentOS7官方Docker镜像上启动的Docker容器。
a.建立非 root 用户。
PolarDB for PostgreSQL需要以非root用户运行。以下步骤能够帮助您创建一个名为postgres的用户组和一个名为postgres的用户。
注:
如果您已经有了一个非 root 用户,但名称不是 postgres:postgres,可以忽略该步骤;但请注意在后续示例步骤中将命令中用户相关的信息替换为您自己的用户组名与用户名。
b.创建用户组postgres和用户postgres ,并为该用户赋予sudo 和工作目录的权限。需要以root用户执行这些命令。
# install sudo
yum install -y sudo
# create user and group
groupadd -r postgres
useradd -m -g postgres postgres -p ''
usermod -aG wheel postgres
# make postgres as sudoer
chmod u+w /etc/sudoers
echo 'postgres ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
chmod u-w /etc/sudoers
# grant access to home directory
chown -R postgres:postgres /home/postgres/
echo 'source /etc/bashrc' >> /home/postgres/.bashrc
# for su postgres
sed -i 's/4096/unlimited/g' /etc/security/limits.d/20-nproc.conf
c.切换到postgres用户,进行后续的步骤。
su postgres
source /etc/bashrc
cd ~
d.下载PolarDB源代码。
PolarDB for PostgreSQL的代码托管于 GitHub上,稳定分支POLARDB_11_STABLE。
sudo yum install -y git
git clone -b POLARDB_11_STABLE https://github.com/ApsaraDB/PolarDB-for-PostgreSQL.git
e.依赖安装
源码下载完毕后,使用sudo执行源代码根目录下的依赖安装脚本install_dependencies.sh,自动完成所有的依赖安装。如果有定制的开发需求,请自行修改install_dependencies.sh。
cd PolarDB-for-PostgreSQL
sudo ./install_dependencies.sh
f.编译部署
依赖安装完毕后,刷新用户配置,开始编译部署:
source /etc/bashrc
./polardb_build.sh
部署完成后,进行简单的实例检查:
$HOME/tmp_basedir_polardb_pg_1100_bld/bin/ -P 5432 -h 127.0.0.1 -c 'select version();'
三、Q&A
- Q:为什么要卸载原来的DOCKER?
A:重新构建DOCKER,才能修改内存 这个是 Docker 官方文档的步骤,目的应该是确保已经安装过 Docker 的机器安装最新的 Docker。
- Q:怎么调docker的内存?
A:Linux 下的 docker 默认不限制内存。
- Q:clone失败怎么办?
A:https://gitee.com/mirrors/PolarDB-for-PostgreSQL,可以试试这个镜像网站。
- Q:说明网站URL是什么?
A:https://apsaradb.github.io/PolarDB-for-PostgreSQL/zh
- Q:HTAP是什么?
A:1、Hybrid Transaction and Analytical Process;2、OLTP OLAP HTAP就是 OTLP的单一数据系统的OLAP的业务操作。
- Q:机器的配置有要求吗?
A:个人电脑应该基本都可以满足要求。
- Q:没有ubuntu的吗?
A:Ubuntu 上直接使用这个镜像即可。这个镜像只是基于 centos7 镜像,但是可以在其它 Linux 发行版上运行的。
- Q:sudo是指Super User do吗?
A:1、这是个常见的误解,sudo 是 substitute user do 而非 super user,各个厂家的文档,包括红帽,都是sudo (super user do) 。
- Q:这个把pg改成polardb-for-postgres主要是改哪部分的内容?索引或者说并发这块有没有动?
A:可以看一下 PolarDB 的功能特性总览,地址:https://apsaradb.github.io/PolarDB-for-PostgreSQL/zh/architecture/#%E7%89%B9%E6%80%A7%E6%80%BB%E8%A7%88
- Q:Polardb 在云下用的多吗?
A:云下有不少国企事业单位在使用的。
- Q:PolarDB 是完全开源吗?
A:阿里云在2021年5月29日正式开放关系型数据库 PolarDB for PostgreSQL的源代码,目前内核代码已完全开源。
- Q:不用装postgrel这个自动就集成进去了吧?
A:PostgreSQL 11 是 PolarDB for PostgreSQL 的子集。
- Q:有人没有卸载自己的docker直接跑的吗?
A:卸载旧的docker是因为系统源里面的docker是四五年前的版本,不稳定,而且有些功能和现在的版本不兼容。
- Q:polardb for pg 采用基于 Shared-Storage,多计算,单存储,这样的架构还需要WAL 在rw和ro的传输么?
A:由于 rw 和 ro 共享存储了,那么 rw 和 ro 从共享存储上读取到的 WAL 是一致的了。ro 通过回放从共享存储上读到的 WAL 就可以保持内存状态同步了。
- Q:PolarDB 底层就是PG吧?
A:1、底层就是pg ;2、基于 PG 11 开发。社区版 PG 基于 shared-nothing 架构,PolarDB 把它搬上了云,底层换成了 shared-storage 架构,方便存储和计算在云上弹性伸缩,这里面需要解决很多问题。可以看一下官方文档中的架构解读了解了解:https://apsaradb.github.io/PolarDB-for-PostgreSQL/zh/architecture/#%E7%89%B9%E6%80%A7%E6%80%BB%E8%A7%88
- Q:阿里官方文档说100%兼容mysql、Postgre SQL。这两个是两种数据库吧?
A:是的。本次训练营针对的是PolarDB for PostgreSQL,100%兼容PostgreSQL。除PolarDB for PostgreSQL之外,阿里云还开源了PolarDB-X云原生分布式数据库,这款产品是高度兼容MySQL的。
- Q:镜像名字可以随便取吗,后面是否有对应名字的地方?
A:后面运行容器的时候需要指定这个image。
- Q:进到容器里没有pgsql的服务?
A:需要下载和编译安装的,应该是想让大家下载最新的polardb版本。