基于Operator方式部署 PostgreSQL Operator 集群

目录

1.PostgreSQL集群化部署方案

2.部署方案选择-Crunchy

3.部署 Postgres Operator

3.1 启动pgo-deployer容器

 3.2 安装 PGO Client

4.部署验证

5.创建PostgreSQL单点集群

5.1 创建PostgreSQL集群

5.2 查看该集群的状态

​5.3 创建一个带有监控的PostgreSQL集群

6.连接集群

6.1连接到PostgreSQL集群---通过 pgsql client 连接

6.2 连接到PostgreSQL集群---通过pgAdmin 4连接

​7.搭建高可用 PostgreSQL 集群

7.1 搭建 PostgreSQL 集群

7.2 故障转移策略

8.故障恢复

8.1 创建备份

8.2 故障恢复

9.删除集群

10.同步复制


将 PostgreSQL 和 Kubernetes 结合使用的第一步是安装一个 Operator

1.PostgreSQL集群化部署方案

  • 裸机部署

  • 容器部署

  • Kubernetes集群部署(自动伸缩集群)目前在Kubernetes上部署PostgreSQL集群的方案有StolonCrunchyPatroni

2.部署方案选择-Crunchy

功能相当完备并且集成了PostgreSQL周边生态相关的应用。该Operator实现了在Kubernetes上自动化部署PostgreSQL集群,简化了PostgreSQL服务的部署,并通过Kubernetes平台保持PostgreSQL集群的运行状态,轻松创建、扩展和删除PostgreSQL集群,同时完全自定义Pod和PostgreSQL配置。支持高可用,灾难恢复,TLS,监控,用户管理,克隆集群,可定制等。

PostgreSQL Operator在指定的namespace中以Deployment对象运行,并且最多由四个容器的Pod组成。

3.部署 Postgres Operator

3.1 启动pgo-deployer容器

下载配置文件,更新镜像地址为当前的harbor地址。

下载路径:https://raw.githubusercontent.com/CrunchyData/postgres-operator/v4.7.0/installers/kubectl/postgres-operator.yml

[root@k8s-dev-m1 postgreSQL]# kubectl create namespace pgo
[root@k8s-dev-m1 postgreSQL]# kubectl apply -f postgres-operator.yml

 3.2 安装 PGO Client

下载PGO Client 设置脚本: https://raw.githubusercontent.com/CrunchyData/postgres-operator/v4.7.0/installers/kubectl/client-setup.sh

修改脚本内容,因为是离线下载,将配置文件的二进制包下载到本地,https://github.com/CrunchyData/postgres-operator/releases/download/v4.7.0/pgo

修改sh文件:

PGO_OPERATOR_NAMESPACE="${PGO_OPERATOR_NAMESPACE:-pgo}"
PGO_USER_ADMIN="${PGO_USER_ADMIN:-pgouser-admin}"
PGO_CLIENT_VERSION="${PGO_CLIENT_VERSION:-v4.7.0}"
#将二进制包放到本地路径
PGO_CLIENT_URL="~/postgreSQL"

PGO_CMD="${PGO_CMD-kubectl}"
......

echo "Operating System found is ${UNAME_RESULT}..."
echo "Downloading ${BIN_NAME} version: ${PGO_CLIENT_VERSION}..."
#将下载路径改为本地路径
#curl -Lo "${OUTPUT_DIR}/pgo" "${PGO_CLIENT_URL}/${BIN_NAME}"
mv "${PGO_CLIENT_URL}/${BIN_NAME}" "${OUTPUT_DIR}/pgo"  

chmod +x "${OUTPUT_DIR}/pgo"
[root@k8s-dev-m1 postgreSQL]# chmod +x client-setup.sh

Postgres Operator 安装完成后,运行客户端安装脚本:

修改环境变量:

[root@k8s-dev-m1 postgreSQL]#  cat <<EOF >> ~/.bashrc
export PGOUSER=/root/.pgo/pgo/pgouser
export PGO_CA_CERT=/root/.pgo/pgo/client.crt
export PGO_CLIENT_CERT=/root/.pgo/pgo/client.crt
export PGO_CLIENT_KEY=/root/.pgo/pgo/client.key
export PGO_APISERVER_URL='https://127.0.0.1:8082'
export PGO_NAMESPACE=pgo
EOF
[root@k8s-dev-m1 postgreSQL]#  source ~/.bashrc

4.部署验证

默认情况下,PGO安装到名为PGO的namespace中。查看PGO的Kubernetes部署是否存在并且运行正常

[root@k8s-dev-m1 postgreSQL]#  kubectl -n pgo get deployments

[root@k8s-dev-m1 postgreSQL]#  kubectl -n pgo get pods

设置端口转发,使用kubectl端口转发方式访问集群中的应用:

[root@k8s-dev-m1 postgreSQL]#  kubectl -n pgo port-forward svc/postgres-operator 8082:8443

5.创建PostgreSQL单点集群

5.1 创建PostgreSQL集群

创建一个名名为mycluster的PostgreSQL集群:

[root@k8s-dev-m1 postgreSQL]# pgo create cluster -n pgo mycluster --password=password123

5.2 查看该集群的状态

使用pgo test命令查看该集群的状态,使用pgo show cluster -n pgo mycluster 查看详细信息。

[root@k8s-dev-m1 postgreSQL]# pgo test -n pgo mycluster

5.3 创建一个带有监控的PostgreSQL集群

[root@k8s-dev-m1 postgreSQL]#  pgo create cluster hippo --metrics

6.连接集群

一旦创建了PostgreSQL集群,可以使用pgo show user命令获取集群用户的凭据。

[root@k8s-dev-m1 postgreSQL]# pgo show user mycluster

获取一个系统或特定帐户信息:

[root@k8s-dev-m1 postgreSQL]# pgo show user mycluster --show-system-accounts

6.1连接到PostgreSQL集群---通过 pgsql client 连接

需要安装psql client。

[root@k8s-dev-m1 postgreSQL]# kubectl -n pgo port-forward svc/mycluster 5432:5432
[root@k8s-dev-m1 postgreSQL]# PGPASSWORD=datalake psql -h localhost -p 5432 -U testuser mycluster

6.2 连接到PostgreSQL集群---通过pgAdmin 4连接

pgAdmin 4是一个图形化工具,可以从web浏览器中管理和查询PostgreSQL数据库。PostgreSQL Operator 与pgAdmin 4提供了一个方便的集成,用于管理用户如何登录数据库。

[root@k8s-dev-m1 postgreSQL]# pgo create pgadmin -n pgo mycluster 

查看svc列表:

 使用以下命令连接到数据库,用datalake替换您的实际密码:

[root@k8s-dev-m1 postgreSQL]# kubectl -n pgo port-forward --adress 0.0.0.0 svc/mycluster-pgadmin 5050:5050

浏览器打开http://localhost:5050,并使用数据库用户名(testuser)和密码登录。如果登录有问题,请尝试运行命令pgo update user -n pgo mycluster——username=testuser——password=密码

7.搭建高可用 PostgreSQL 集群

高可用性在PostgreSQL操作符中默认是启用的,要创建一个具有3个副本的高可用性PostgreSQL集群,可以运行以下命令。也可以使用pgo scale和pgo scaledown命令放大或缩小PostgreSQL集群。

7.1 搭建 PostgreSQL 集群

[root@k8s-dev-m1 postgreSQL]#  pgo create cluster mycluster --replica-count=3

 查看集群实例:

[root@k8s-dev-m1 postgreSQL]#  pgo scaledown mycluster --query

 

扩展PostgreSQL集群 :

[root@k8s-dev-m1 postgreSQL]#  pgo scale mycluster

缩小PostgreSQL集群 :

[root@k8s-dev-m1 postgreSQL]#  pgo scaledown hippo --target=mycluster-zwjr

7.2 故障转移策略

每个PostgreSQL集群将管理自己的可用性。如果需要手动进行故障转移,则需要使用pgo故障转移命令。

  • PostgreSQL Operator为故障转移选择最佳副本候选

[root@k8s-dev-m1 postgreSQL]#  pgo failover mycluster
  • 自定义副本候选进行故障转移。

[root@k8s-dev-m1 postgreSQL]#  pgo failover mycluster --target==mycluster-zwjr

8.故障恢复

PostgreSQL Operator使用开源的pgBackRest备份和恢复工具来管理备份和PostgreSQL。当创建一个新的PostgreSQL集群时,会同时创建一个pgBackRest存储库。

  • Full:备份整个数据库。

  • Differential:创建自上次执行完整备份以来的所有数据的备份。

  • Incremental:备份自上次执行完整备份以来的所有数据,无论是完全备份、差异备份还是增量备份。

8.1 创建备份

#默认创建一个增量式pgBackRest备份,当集群初始配置时,PostgreSQL操作符首先创建一个pgBackRest完全备份,而pgBackRest将对后续的每个备份进行增量备份,直到指定了不同的备份类型。
[root@k8s-dev-m1 postgreSQL]#  pgo backup mycluster

#创建全备份
[root@k8s-dev-m1 postgreSQL]#  pgo backup mycluster --backup-opts="--type=full"

#创建差异备份
[root@k8s-dev-m1 postgreSQL]#  pgo backup mycluster --backup-opts="--type=diff"

#创建增量备份
[root@k8s-dev-m1 postgreSQL]#  pgo backup mycluster --backup-opts="--type=incr"

#查看PGBackRest存储库中的所有可用备份
[root@k8s-dev-m1 postgreSQL]# pgo show backup mycluster

8.2 故障恢复

PostgreSQL操作符支持在PostgreSQL集群上执行完整恢复(即克隆或复制)以及时间点恢复的能力。有两种恢复集群的方法。

  • pgo create cluster命令中的 --Restore -from标志恢复到新集群。实际是一个克隆或复制。

  • 使用pgo直接还原。

只要有一个可用的pgBackRest存储库,就可以恢复到一个新的集群技术:pgBackRest存储库不需要附加到一个活动集群。

# 删除名为 mycluster 的集群
[root@k8s-dev-m1 postgreSQL]#  pgo delete cluster mycluster --keep-backupss 

# 从备份中创建一个新的集群
[root@k8s-dev-m1 postgreSQL]#  pgo create cluster datalake --restore-from=mycluster

现有数据目录上执行恢复。 这是使用pgo restore命令完成的。 最常见的方案是将数据库恢复到特定时间点。

#将集群恢复到2021年7月21日晚上11:59
[root@k8s-dev-m1 postgreSQL]# pgo restore hippo --pitr-target="2021-07-21 11:59:59.999999+00" --backup-opts="--type=time"

9.删除集群

删除指定集群:

[root@k8s-dev-m1 postgreSQL]#  pgo delete cluster hippo 

10.同步复制

进入 PostgreSQL 主实例创建一个表,并插入数据。

[root@k8s-dev-m1 postgreSQL]# kubectl get po  -n pgo -lcrunchy-pgha-scope=mycluster

[root@k8s-dev-m1 postgreSQL]#  kubectl -n pgo exec -it hippo-749d494c4c-52cf6 -- psql
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值