给小白的 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)

大家都在看

  • 二分查找及其应用

    概述 二分查找算法是一种效率极高的算法,也是为数不多时间复杂度在 O(logn)量级的算法。算法思想并不难理解,但是某些细节却十分复杂,…

    数据库 2023年6月11日
    070
  • Redis 哈希Hash底层数据结构

    Redis 底层数据结构 Redis数据库就像是一个哈希表,首先对key进行哈希运算得到哈希值再取模得到一个下标,每个元素是一个节点,节点之间形成链表。这感觉有点像Java中的Ha…

    数据库 2023年6月14日
    0103
  • JavaWeb 07_创建web项目连接MySQL实现注册登录功能

    一、创建一个web项目,参照JW/01_创建web项目及部署 二、在NAVICat 里建数据库 db_01,建表tb_user ,字段UName 、Pwd 三、在web下创建一个D…

    数据库 2023年5月24日
    083
  • 设计模式之(10)——桥接模式

    Hello,大家好,我们的设计模式系列中断了几天,今天我们继续,那么我们下面继续来说一种结构型设计模式,那就是大名鼎鼎的”桥接模式”。 定义:桥接模式的官方…

    数据库 2023年6月14日
    0107
  • DRF补充数据库异常和Redis异常

    DRF补充数据库异常和Redis异常 (1)在项目适当位置新建exceptions.py,内容如下: from rest_framework.views import except…

    数据库 2023年6月14日
    066
  • 达梦数据库_DM8配置实时主备

    1、环境说明 准备三台机器DM_HD1、DM_HD11、DM_SH,DM_HD1和DM_HD11用来部署主备库,DM_SH用来部署确认监视器。其中DM_HD1和DM_HD11配置两…

    数据库 2023年6月11日
    0133
  • Golang并发编程——goroutine、channel、sync

    并发与并行 并发和并行是有区别的,并发不等于并行。 两个或多个事件在同一时间不同时间间隔发生。对应在Go中,就是指多个 goroutine 在单个CPU上的交替运行。 两个或者多个…

    数据库 2023年6月16日
    060
  • 06-MyBatis中ResultType和ResultMap的区别

    MyBatis中ResultType和ResultMap的区别 如果数据库结果集中的列名和要封装的属性名完全一致的话用 resultType属性 如果数据库结果集中的列名和要封装实…

    数据库 2023年6月16日
    0103
  • 第15章 存储过程与函数

    MySQL从5.0版本开始支持存储过程和函数。存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数即…

    数据库 2023年6月6日
    094
  • 力扣数据库题目182查找重复的电子邮箱

    力扣数据库题目182查找重复的电子邮箱 题目 编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。 示例: +—-+——&#82…

    数据库 2023年6月9日
    087
  • 如何基于LSM-tree架构实现一写多读

    PolarDB是阿里巴巴自研的新一代云原生关系型数据库,在存储计算分离架构下,利用了软硬件结合的优势,为用户提供具备极致弹性、海量存储、高性能、低成本的数据库服务。X-Engine…

    数据库 2023年5月24日
    082
  • 详解Mysql事务隔离级别与锁机制

    一.概述 我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能 就会导致我们说的脏写、 胀读和不可重复读、幻读这些问题。 这些问题的本质…

    数据库 2023年5月24日
    0154
  • Linux_连接工具_SecureCRT的使用教程

    什么是SecureCRT? SecureCRT是一款支持 SSH2、SSH1、Telnet、Telnet/SSH、Relogin、Serial、TAPI、RAW 等协议的终端仿真程…

    数据库 2023年6月11日
    0123
  • Redis概述及基本数据结构

    Redis 是一个基于内存的键值型 NoSQL 数据库 特征: 键值型:value 支持多种不同数据类型,功能丰富 单线程:每个命令具备原子性 延迟低、速度快: 基于内存、IO多路…

    数据库 2023年6月16日
    077
  • 计算机组成原理——计算篇

    计算机组成原理 —— 计算篇 进制运算的基础 定义: 常用的进制 为什么计算机经常使用 8 进制 &16 进制 1024 不同进制表达方式 二进制运算的基础 正整数N,基数…

    数据库 2023年6月16日
    079
  • 数据库操作语句大全(sql)

    数据库操作语句大全(sql) 一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbna…

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