给小白的 PG 容器化部署教程(下)

作者:王志斌
编辑:钟华龙

本文来自社区小伙伴 王志斌 的投稿。从小白的角度,带你一步步实现将 RadonDB PostgreSQL 集群部署到 Kubernetes 上。文章分为上下两部分,《第一部 Kubernetes 环境准备》已经发布。第二部分将带大家部署一个 RadonDB PostgreSQL Operator 和集群。

什么是 RadonDB PostgreSQL Operator?

RadonDB PostgreSQL 是一款基于 PostgreSQL 使用 Operator 实现的数据库容器化项目。

  • 广泛应用于地理空间和移动领域
    [En]

    widely used in geospatial and mobile fields*

  • 高可用性、稳定性、数据完整性等
    [En]

    High availability, stability, data integrity, etc.*

  • 支持在线水平扩展
  • 支持故障自动转移 ,提供 HA 功能
  • 提供 PostgreSQL 常用参数接口,方便调整参数
  • 提供 PostGIS 插件,具备存储、查询和修改空间关系的能力
  • 提供实时监控、健康检查、日志自动清理等功能
    [En]

    provide real-time monitoring, health check, automatic log cleaning and other functions*

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,以下的步骤为配置集群所使用的本地持久化存储卷,配置一个一主一从的高可用集群,最低需要三个持久化存储卷:

  1. PostgreSQL Primary 数据卷
  2. PostgreSQL Replica 数据卷
  3. PostgreSQL 备份卷

实际使用可根据具体情况灵活配置存储卷。

[En]

The actual use can flexibly configure the storage volume according to the specific situation.

大体步骤:

  1. 虚拟机添加新硬盘(每台虚拟机分别添加一块)
  2. 重启虚拟机
  3. 查看现磁盘是否正常挂载
fdisk -l

可看到新加的虚拟硬盘,一般名为: Disk /dev/sdb
给新加的硬盘分区。

fdisk /dev/sdb

#按照提示增加新分区
/dev/sdb1 /dev/sdb2 /dev/sdb13

格式化磁盘分区。用 ext4 格式对 /dev/sdb1 进入格式化。

mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2
mkfs.ext4 /dev/sdb3

挂载分区并创建新的挂载点。

[En]

Mount the partition and create a new mount point.

mkdir -p /data/pgdata/pv{1..3}

将新磁盘分区挂载到 /work 目录下。

mount -t ext4 /dev/sdb1 /data/pgdata/pv1
mount -t ext4 /dev/sdb3 /data/pgdata/pv2
mount -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

给小白的 PG 容器化部署教程(下)

安装静态本地盘控制器

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: ext4
116 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

给小白的 PG 容器化部署教程(下)

部署数据库集群

启用 PGO 客户端,创建数据库集群。

kubectl exec -it -n pgo  $(kubectl get po -n pgo -l name=pgo-client  -o jsonpath='{range .items[*]}{.metadata.name}{end}')  -- bash
pgo 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

给小白的 PG 容器化部署教程(下)

二、连接 RadonDB PostgreSQL 集群

通过执行 pgo 命令连接,获取集群中用户账号信息。

pgo show user -n pgo radondb

以下以 RadonDB PostgreSQL 集群为示例,获取数据库账号并连接数据库。

`plain
pgo show user -n pgo radondb –show-system-accounts
CLUSTER USERNAME PASSWORD EXPIRES STATUS ERROR

Original: https://www.cnblogs.com/radondb/p/16337460.html
Author: RadonDB
Title: 给小白的 PG 容器化部署教程(下)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505322/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • python: can’t open file ‘upload.py’: [Errno 2] No such file or directory

    为了发博客方便,参考别人的文章(见参考文章:[1][2]),使用 Metaweblog 和 pycnblog([3])插件实现相关功能,将本地markdown文件同步至博客园。使用…

    数据库 2023年6月14日
    077
  • mysql权限问题

    注意问题 grant all privileges on shop.* to ‘hosp’@’%’ flush privileges; 查询账号权限类型%和localhost是不同…

    数据库 2023年6月9日
    0136
  • mysql数据库创建数据库创建用户授权

    Liunx下登录数据库 mysql -u 用户名 -p 创建myblog用户,本地登录,口令是myblog create user ‘myblog’@&#8…

    数据库 2023年6月11日
    081
  • mysql约束

    一、表约束 PK主键约束(索引)唯一约束 非空 默认值 在关系数据库,一个表中,只能有一个主键(Primary Key),有些数据库没有pk,系统报出错误。 在myql数据库,建立…

    数据库 2023年6月9日
    073
  • 使用JMeter进行MySQL的压力测试

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。 前言 1. JMeter安装 2…

    数据库 2023年5月24日
    089
  • 使用MySQL Shell创建MGR

    本篇知识点: 配置MGR所需的参数 使用MySQL Shell配置MGR shell.connect() var 设定临时变量 dba.createCluster() dba.ge…

    数据库 2023年6月16日
    0100
  • JUC学习笔记(三)

    线程间通信的模型有两种:共享内存和消息传递,以下方式都是基本这两种模型来实现的。我们来基本一道面试常见的题目来分析 JUC学习笔记(一)https://www.cnblogs.co…

    数据库 2023年6月6日
    078
  • Linux–>组管理和权限管理

    在Linux中的每一个用户必须属于一个组,不能独立于组外。 在Linux中每个文件有, 所有者, 所在组, 其他组的概念 查看文件的所有者 ls -ahl 举例: 改变文件所有者 …

    数据库 2023年6月14日
    0128
  • MySQL的Explain总结

    Explain简介 MySQL优化器在基于成本的计算和基于规则的SQL优化会生成一个所谓的 执行计划,我们就可以使用执行计划查看MySQL对该语句具体的执行方式。 介绍这个好啰嗦就…

    数据库 2023年5月24日
    068
  • Java 可重入锁的那些事(一)

    本文主要包含的内容:可重入锁(ReedtrantLock)、公平锁、非公平锁、可重入性、同步队列、CAS等概念的理解 显式锁🔒 上一篇文章提到的synchronized关键字为隐式…

    数据库 2023年6月6日
    0104
  • FastDFS安装和简介详细总结

    1、fastDFS简介 1 FastDFS是用c语言编写的一款开源的分布式文件系统。 2 FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用…

    数据库 2023年6月14日
    0105
  • Spring5完整版详解

    1、Spring 1.1简介 2002,首次退出来Spring框架的雏形:interface21框架 Spring框架即以interface21框架为基础,经过重新设计,并不断丰富…

    数据库 2023年6月16日
    074
  • 分布式任务调度平台XXL-JOB安装

    安装xxl-job-admin 1.拉取镜像 #拉取镜像 docker pull xuxueli/xxl-job-admin:2.3.0 #新建挂载目录 mkdir /usr/lo…

    数据库 2023年6月11日
    068
  • [LeetCode]35. 搜索插入位置

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1: 输入: [1,3…

    数据库 2023年6月9日
    077
  • springboot~手动加载thymeleaf模版

    thymeleaf在spring-mvc时代很是盛行,与freemaker组成了两大模版引擎,而进行springboot之后,很多项目都采用前后分离的模式,这使得模板引擎关注度少了…

    数据库 2023年6月6日
    0105
  • Docker下部署Spring Boot项目

    1.编写Docker File FROM openjdk:8-jdk-slim LABEL maintainer=ddzhan COPY target/*.jar /app.jar…

    数据库 2023年6月6日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球