postgresql实验环境搭建

背景

pg 是一个非常通用的关系型数据库,在后端开发过程中经常被用到。为了能够更好地掌握 pg,我们需要一套快速可使用的环境,用于开发、测试等。

基本形态

  • docker
  • k8s

调研

通过在 dockerhub 上搜索 postgresql,发现有大量的镜像提供者。看到 postgres 官方的镜像 和 bitnami 提供的镜像 使用量最大,考虑到 bitnami 生态更加完善,因此选择 bitnami/postgresql 作为镜像。

搭建过程

docker

拉镜像

1
docker pull bitnami/postgresql:12.12.0

直接通过 docker 运行

1
2
# 创建网桥
docker network create pgnet --driver bridge
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
docker run -d \
-e ALLOW_EMPTY_PASSWORD=yes \
-e POSTGRESQL_REPLICATION_MODE=master \
-e POSTGRESQL_USERNAME=dbadmin \
-e POSTGRESQL_PASSWORD=password123 \
-e POSTGRESQL_DATABASE=testpg \
-e POSTGRESQL_REPLICATION_USER=repl_user \
-e POSTGRESQL_REPLICATION_PASSWORD=repl_password123 \
-e POSTGRESQL_TIMEZONE=Asia/Shanghai \
-v /data/pgtest:/bitnami/postgresql \
-v /data/pgtest/init:/docker-entrypoint-initdb.d \
--name pgmaster \
--network pgnet \
-p 5432:5432 \
bitnami/postgresql:12.12.0

配置 docker-compose.yaml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
version: '3.3'

networks:
pgnet:
driver: bridge

services:
postgresql:
image: docker.io/bitnami/postgresql:12.12.0
ports:
- '5432:5432'
volumes:
- '/data/pgtest:/bitnami/postgresql'
- '/data/pgtest/init:/docker-entrypoint-initdb.d'
environment:
- 'ALLOW_EMPTY_PASSWORD=yes'
- 'POSTGRESQL_REPLICATION_MODE=master'
- 'POSTGRESQL_USERNAME=dbadmin'
- 'POSTGRESQL_PASSWORD=password123'
- 'POSTGRESQL_DATABASE=testpg'
- 'POSTGRESQL_REPLICATION_USER=repl_user'
- 'POSTGRESQL_REPLICATION_PASSWORD=repl_password123'
- 'POSTGRESQL_TIMEZONE=Asia/Shanghai'
networks:
- pgnet

[notice: 这里可以添加 docker-compose 教程] 可以参考 菜鸟教程docker-compose

  • 做从库搭建的实验
  • 做索引错误恢复的实验
  • 考虑混沌测试的内容 (用于做恢复)

尝试添加基础 sql

手动执行

1
psql -Uxxxx -d postgres -f xxx.sql

k8s

charts 同样选择 bitnami 的库。

下载 helm

1
2
3
4
wget https://get.helm.sh/helm-v3.10.1-linux-amd64.tar.gz && \
tar -zxf helm-v3.10.1-linux-amd64.tar.gz && \
mv linux-amd64/heml /usr/local/bin/ && \
rm -rf linux-amd64

添加 bitnami 的库

1
helm repo add bitnami https://charts.bitnami.com/bitnami

查看 charts

1
2
helm fetch bitnami/postgresql --untar
# 看情况修改需要的参数

修改pg密码等基本信息

1
2
3
4
5
6
7
# vim values.yaml
global:
postgresql:
auth:
username: "dbadmin"
password: "123456"
database: "testpg"

部署

1
helm install --namespace pgtest --create-namespace pg ./postgresql

修改 service

1
2
3
kubectl edit svc xxxx -n pgtest

# 修改 Cluster 为 LoadBalancer/NodePort

测试

1
psql -h localhost -p 5432 -d testpg -Udbadmin -W

二进制

二进制也可以安装,可以在网上查下资料,姑且不做操作了。下面安装 pg 是为了使用 client。

1
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
1
yum install -y postgresql14

后续

  • 增加 pg 的维护教程
  • 增加 pg 的原理教程
  • 增加 数据库 的相关教程
  • 增加 pg 监控的添加

In wisdom gathered over time I have found that every experience is a form of exploration.
Ansel Adams