当前位置:网站首页>给小白的 PG 容器化部署教程(下)
给小白的 PG 容器化部署教程(下)
2022-07-30 05:08:00 【RadonDB】
作者:王志斌
编辑:钟华龙
本文来自社区小伙伴 王志斌 的投稿。从小白的角度,带你一步步实现将 RadonDB PostgreSQL 集群部署到 Kubernetes 上。文章分为上下两部分,《第一部 Kubernetes 环境准备》已经发布。第二部分将带大家部署一个 RadonDB PostgreSQL Operator 和集群。
什么是 RadonDB PostgreSQL Operator?
RadonDB PostgreSQL 是一款基于 PostgreSQL 使用 Operator 实现的数据库容器化项目。
- 被广泛应用于地理空间和移动领域
- 具备高可用、稳定性、数据完整性等性能
- 支持在线水平扩展
- 支持故障自动转移 ,提供 HA 功能
- 提供 PostgreSQL 常用参数接口,方便调整参数
- 提供 PostGIS 插件,具备存储、查询和修改空间关系的能力
- 提供实时监控、健康检查、日志自动清理等功能
RadonDB PostgreSQL Operator 可基于 KubeSphere、OpenShift、Rancher 等 Kubernetes 容器平台交付。可自动执行与运行 RadonDB PostgreSQL 集群有关的任务。
RadonDB PostgreSQL Operator基于 https://github.com/CrunchyData/postgres-operator 项目实现,进行了改进优化,后续会持续回馈给社区。
仓库地址:https://github.com/radondb/radondb-postgresql-operator
一、部署 RadonDB PostgreSQL 集群
安装 Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash准备本地存储
本次实验 RadonDB PostgreSQL 集群数据持久化采用 Local Persistent Volumes,以下的步骤为配置集群所使用的本地持久化存储卷,配置一个一主一从的高可用集群,最低需要三个持久化存储卷:
- PostgreSQL Primary 数据卷
- PostgreSQL Replica 数据卷
- PostgreSQL 备份卷
实际使用可以根据具体的情况,灵活配置存储卷。
大体步骤:
- 虚拟机添加新硬盘(每台虚拟机分别添加一块)
- 重启虚拟机
- 查看现磁盘是否正常挂载
fdisk -l可看到新加的虚拟硬盘,一般名为: Disk /dev/sdb 给新加的硬盘分区。
fdisk /dev/sdb#按照提示增加新分区 /dev/sdb1 /dev/sdb2 /dev/sdb13格式化磁盘分区。用 ext4 格式对 /dev/sdb1 进入格式化。
mkfs.ext4 /dev/sdb1mkfs.ext4 /dev/sdb2mkfs.ext4 /dev/sdb3挂载分区,创建新的挂载点。
mkdir -p /data/pgdata/pv{1..3}将新磁盘分区挂载到 /work 目录下。
mount -t ext4 /dev/sdb1 /data/pgdata/pv1mount -t ext4 /dev/sdb3 /data/pgdata/pv2mount -t ext4 /dev/sdb4 /data/pgdata/pv3查看挂载
df -h可以看到新加的硬盘: /dev/sdb1 /dev/sdb2 /dev/sdb3 实现开机自动挂载。
vim /etc/fstab在最后一行加入:
/dev/sdb1 /data/pgdata/pv1 ext4 defaults 0 2/dev/sdb2 /data/pgdata/pv2 ext4 defaults 0 2/dev/sdb3 /data/pgdata/pv3 ext4 defaults 0 2创建命名空间
kubectl create namespace pgo部署 PostgreSQL Operator
kubectl apply -f https://github.com/radondb/radondb-postgresql-operator/blob/main/installers/kubectl/postgres-operator.yml -n pgo# 查看状态kubectl get all -n pgo --selector=name=postgres-operator
安装静态本地盘控制器
Kubernetes 当前支持静态分配的本地存储。可使用 local-static-provisioner[1] 项目中的 local-volume-provisioner 程序创建本地存储对象。
git clone https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner.git cd sig-storage-local-static-provisioner # 主要修改行号vi helm/provisioner/values.yaml 66 classes: 67 - name: fast-disks 70 hostDir: /data/pgdata 76 volumeMode: Filesystem 81 fsType: ext4116 image: quay.io/external_storage/local-volume-provisioner:v2.4.0 # helm install localprovi . -n kube-system # podpv kubectl get po -n kube-system -l app.kubernetes.io/name=provisioner
部署数据库集群
启用 PGO 客户端,创建数据库集群。
kubectl exec -it -n pgo $(kubectl get po -n pgo -l name=pgo-client -o jsonpath='{range .items[*]}{.metadata.name}{end}') -- bashpgo create cluster radondb --storage-config=fast-disks部分参数可参见下表,并可执行 pgo 命令行帮助 pgo --help 获取更详细的部署参数帮助。
| 命令行 | 命令说明 |
|---|---|
| --pgbackrest-storage-type="s3" | 备份存储的类型。支持 posix 、s3、gcs、posix,s3 和 posix,gcs五种类型。 |
| --replica-count=3 | PostgeSQL副本数量。 |
| --ccp-image=radondb-postgres-ha | 使用的镜像名称。 带 gis 插件的镜像,例如 radondb-postgres-gis-ha。 不带 gis 插件的镜像,例如 radondb-postgres-ha。 |
| --ccp-image-prefix=docker.io/radondb | 镜像仓库。 |
| --ccp-image-tag=debian-14.2-2.1.1 | dockerhub 上镜像的标签。 |
| --pgbackrest-s3-endpoint=s3.pek3b.qingstor.com \ --pgbackrest-s3-key=xxxxx \ --pgbackrest-s3-key-secret=xxxx \ --pgbackrest-s3-bucket=xxxx \ --pgbackrest-s3-region=xxx \ --pgbackrest-s3-verify-tls=false | 支持 s3 协议的对象存储设置,主要用于备份。若备份存储选择了 s3 则需要设置这部分参数。 |
| --metrics | 启用适用于 Prometheus 的指标收集器。 |
| --pgbadger | 启用 pgbadger。 |
| --debug | 调试模式。 |
执行以下命令观察集群创建过程。待所有 Pod 状态切换为 Running,则集群创建完成。
kubectl get po -n pgo --watch检查 local pv 是否正常绑定
kubectl get pv -n pgo |grep ^local
二、连接 RadonDB PostgreSQL 集群
通过执行 pgo 命令连接,获取集群中用户账号信息。
pgo show user -n pgo radondb以下以 RadonDB PostgreSQL 集群为示例,获取数据库账号并连接数据库。
pgo show user -n pgo radondb --show-system-accounts CLUSTER USERNAME PASSWORD EXPIRES STATUS ERROR --------- -------------- ------------------------ ------- ------ -----radondb ccp_monitoring Dwpa|MCg,b4M+rY.>ZC0ONz4 never ok radondb postgres 1a4R-d7Po=,[email protected]:-=?[gP(9 never ok radondb primaryuser =B8x*Haf*dCq+V4hkGSfh/.} never ok radondb testuser yTFeeH1|^DX<Bx4[?:B_/Q;M never ok 此外,还可以通过 psql 工具连接。
查看服务:
kubectl -n pgo get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEpostgres-operator ClusterIP 10.96.64.37 <none> 8443/TCP,4171/TCP,4150/TCP 58mradondb ClusterIP 10.96.171.227 <none> 10000/TCP,9187/TCP,2022/TCP,5432/TCP 5m42sradondb-backrest-shared-repo ClusterIP 10.96.235.247 <none> 2022/TCP 5m42sradondb-pgbouncer ClusterIP 10.96.234.49 <none> 5432/TCP 4m16sradondb-replica ClusterIP 10.96.67.45 <none> 10000/TCP,9187/TCP,2022/TCP,5432/TCP 3m50s以 testuser 账号为示例,连接到数据库。
kubectl -n pgo port-forward svc/radondb 5432:5432 PGPASSWORD='xxxxxxxxxxxxxxxxxxxxxxxx' psql -h localhost -p 5432 -U testuser radondb查看集群
kubectl exec -it rp1-65798ccf5c-ftbp9 -n pgo -c database bash
可以看到图中为 3 节点集群。至此,RadonDB PostgreSQL 容器化数据库搭建完成。
引用链接
1.local-static-provisioner:https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner
致谢
RadonDB 开源社区向本文的投稿作者表示感谢!也期待更多的社区小伙伴的投稿~
边栏推荐
- LeetCode Algorithm 328. Parity linked list
- Detailed explanation of REUSE_ALV_GRID_DISPLAY
- Discourse 自定义头部链接(Custom Header Links)
- WPF study notes "WPF Layout Basics"
- 2.6 Radix sort (bucket sort)
- gnss rtcm rtklib Ntrip...
- Record of problems encountered by the pyinstaller packager
- Golang eight-legged text finishing (continuous handling)
- Acwing完全数
- Hexagon_V65_Programmers_Reference_Manual(12)
猜你喜欢

GO语言学习笔记一

2.6 Radix sort (bucket sort)

Hexagon_V65_Programmers_Reference_Manual(11)

Code readability, pre-checks, comments and summaries

Golang eight-legged text finishing (continuous handling)

Some understanding of YOLOv7

The Complete Go Books - Beginner to Advanced and Web Development

Compound Types--references, pointers

Alibaba Cloud's EasyNLP Chinese text image generation model takes you to become an artist in seconds

std::vector中保存指针时用法
随机推荐
A must see for software testers!Database knowledge MySQL query statement Daquan
Using the GPU parallel computing 】 【 OpenCL&OpenCLUtilty GPU parallel computing
[Verilog] HDLBits Problem Solution - Circuits/Combinational Logic
Hexagon_V65_Programmers_Reference_Manual(14)
go language study notes 4
如何与墨西哥大众VW Mexico建立EDI连接
go语言学习笔记二
Detailed explanation of REUSE_ALV_GRID_DISPLAY
Simulation problem (middle)
聊一聊什么是SaaS,以及遇到的问题......
Summary of skills in using ms project2010 project management software
斐波那契数列的递归优化《备忘录递归》
美国再次加息75个基点 陷入“技术性衰退”?加密市场却呈现复苏力量
5. View parsing and template engine
三、依赖配置管理
Alibaba Cloud's EasyNLP Chinese text image generation model takes you to become an artist in seconds
Hexagon_V65_Programmers_Reference_Manual (12)
Usage of EFR32 as sniffer for Zigbee/Thread
[High Performance Computing] openMP
Perspective transformation matrix of image perspective correction should be matrix (single)/findHomography with getPerspectiveTransformd difference