环境说明
名称 | 说明 |
操作系统 | RockyLinux9.3 |
内存 | 4GB |
数据库管理软件 | CLup |
主机1 | PG01-10.16.18.163 |
主机2 | PG02-10.16.18.164 |
主机3 | PG03-10.16.18.165 |
1. 安装数据库软件
我们使用官方的源安装,参考PostgreSQL: Downloads,获取源
选择操作系统(数据库的版本不需要特意选择),当前测试环境是RockyLinux9
然后根据提示信息,安装PostgreSQL软件源
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
禁用掉操作系统默认的PostgreSQL版本
sudo dnf -qy module disable postgresql
安装指定版本的PostgreSQL数据库,这里我们先安装12的版本
sudo dnf install -y postgresql12-server postgresql12-contrib
RHEL9系列的当前只能支持PostgreSQL12及以上版本的了,要想安装旧版本要么自己编译,要么下载其他编译好的。
- contrib:这个是随PostgreSQL分发默认携带的插件包,例如pg_stat_statements。
安装13的版本
sudo dnf install -y postgresql13-server postgresql13-contrib
安装14的版本
sudo dnf install -y postgresql14-server postgresql14-contrib
安装15的版本
sudo dnf install -y postgresql15-server postgresql15-contrib
安装16的版本
sudo dnf install -y postgresql16-server postgresql16-contrib
查看软件目录,默认都是安装在/usr下面,以pgsql-xx命名的
.
├── bin
├── games
├── pgsql-12
├── pgsql-13
├── pgsql-14
├── pgsql-15
├── pgsql-16
...
2. 安装数据库管理软件
这里使用的是中启乘数开发的PostgreSQL数据库管理软件CLup,安装部署参考文档:
- 官方文档:CLup5.x产品手册:一键安装
- 我的文章:一款非常好用的PostgreSQL数据库管理软件
都是一键安装的命令,安装部署起来很快,这里我们使用开源版本,商业版未注册的话也能使用,但是Agent端会有20个总CPU核心数的限制,集群数量限制为3个。开源版本没有核心数和集群数量限制,但是功能没有商业版的全,比如没有监控告警、备份恢复等。
3. 创建PostgreSQL集群
单台主机上允许创建多个PostgreSQL实例,下面我们将使用三台虚拟机,快速搭建PostgreSQL12~PostgreSQL16一主两备的集群。其思路主要是为不同版本的PostgreSQL数据库分配不同的属主、目录及端口号,这样一台主机上就可以同时运行多套PostgreSQL数据库集群。
开始之前我们先在三台机器上创建好目录/data
mkdir /data
默认的权限是drwxr-xr-x就可以。
首次创建集群时,需要先创建一个VIP池,VIP(虚拟IP)是提供给集群高可用使用的,当切换主库时,VIP也会飘到新主库上去:
现在我们登录CLup,然后点击HA管理->集群定义->创建集群->创建PostgreSQL流复制集群:
填写相关信息,其中操作系统用户不存在时需要指定下UID:
继续填写集群数据库的相关信息
然后点击下一步,后面是集群探测的信息和数据库参数,我们使用默认值,直接跳到提交这一步
查看创建日志,看到Success说明创建成功了
我们查看下集群详情页(HA管理->详情)
检查流复制状态,这个实际上是在主库上查了pg_stat_replication视图
后面我们创建其他几个版本的集群
4. 登录数据库
商业版可以在CLup页面上登录,开源版本没有这个功能。这里我们使用ssh登录主机,然后再登录数据库用户,下面以PostgreSQL12的版本为例。
登录操作系统用户
su - pg12
登录数据库(CLup在创建数据库时会在.bashrc文件中添加用户的环境变量)
psql -Upostgres
查看流复制信息
postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid | 49235
usesysid | 10
usename | postgres
application_name | 10.16.18.164
client_addr | 10.16.18.164
client_hostname |
client_port | 57172
backend_start | 2024-09-03 16:46:47.787031+08
backend_xmin |
state | streaming
sent_lsn | 0/7000000
write_lsn | 0/7000000
flush_lsn | 0/7000000
replay_lsn | 0/7000000
write_lag |
flush_lag |
replay_lag |
sync_priority | 0
sync_state | async
reply_time | 2024-09-03 17:37:31.193257+08
-[ RECORD 2 ]----+------------------------------
pid | 49243
usesysid | 10
usename | postgres
application_name | 10.16.18.165
client_addr | 10.16.18.165
client_hostname |
client_port | 39854
backend_start | 2024-09-03 16:46:54.665056+08
backend_xmin |
state | streaming
sent_lsn | 0/7000000
write_lsn | 0/7000000
flush_lsn | 0/7000000
replay_lsn | 0/7000000
write_lag |
flush_lag |
replay_lag |
sync_priority | 0
sync_state | async
reply_time | 2024-09-03 17:37:31.176141+08