logo头像

老陕小张学技术接地气

PostgreSql14主从负载均衡部署

# PostgreSQL 主从负载均衡部署记录

## 前言
前些天给个环境部署 PostgreSQL 主从负载均衡,这里仅仅简单记录一下命令以备后续使用,至于数据库的更多配置请自行根据需求配置。
![PostgreSQL](https://img.ksvips.cn/blogimg/pg1420240517111217.png)
## 版本环境
- 服务器系统: CentOS 7.9
- PostgreSQL 版本: 14
- 主数据库内网 IP : 10.0.0.2
- 从数据库内网 IP : 10.0.0.3

## 主数据库 10.0.0.2

### 安装
```javascript
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install -y postgresql14-server

主库初始化数据库

/usr/pgsql-14/bin/postgresql-14-setup initdb

启动

sudo systemctl enable postgresql-14
sudo systemctl start postgresql-14

初始化

su - postgres
psql

创建 postgres 密码

ALTER USER postgres WITH PASSWORD '123456';

创建从库 replica 用户密码

CREATE ROLE replica login replication encrypted password 'replica';

检查账号

SELECT usename from pg_user;

结果如下:

 usename
----------
 postgres
 replica
(2 rows)

查看权限

SELECT rolname from pg_roles;

结果如下:

 rolname
----------
 postgres
 replica
(2 rows)

退出

\q
exit

配置

修改 pg_hba.conf

vi /var/lib/pgsql/14/data/pg_hba.conf

添加从库网段:

host    all             all             0.0.0.0/0               trust
local   replication     all                                     peer
host    replication     replica            10.0.0.3/24        md5

注意此处 10.0.0.3/24 需修改为从库的 IP 段。

修改 postgresql.conf

vi /var/lib/pgsql/14/data/postgresql.conf

配置如下:

listen_addresses = '*'
wal_level = hot_standby
synchronous_commit = remote_write
max_wal_senders = 32
wal_sender_timeout = 60s
max_connections = 100

从数据库 10.0.0.3

安装

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

从主库同步数据

pg_basebackup -D /var/lib/pgsql/14/data -h 10.0.0.2 -p 5432 -U replica -X stream -P

注意从库无需上文主库安装流程中的初始化步骤,修改上述 10.0.0.2 为主库 IP 地址来同步数据库。

配置

修改 postgresql.conf

从 PostgreSQL 12 开始已经移除了 recovery.conf 文件,相关配置合并到了 postgresql.conf 中。由于从主库同步数据库,其中配置也需要移除和修改。

vi /var/lib/pgsql/14/data/postgresql.conf

移除或注释 wal_level

# wal_level = xxx

修改或添加以下配置:

primary_conninfo = 'host=10.0.0.2 port=5432 user=replica password=replica'
recovery_target_timeline = 'latest'

创建 standby.signal

创建 standby.signal 文件,声明从库。

vi /var/lib/pgsql/14/data/standby.signal

内容如下:

standby_mode = on

权限

此处是踩坑过几次。

chown -R postgres.postgres /var/lib/pgsql/14/data

启动

sudo systemctl enable postgresql-14
sudo systemctl start postgresql-14

测试同步

主数据库 10.0.0.2

ps aux | grep sender

返回:

postgres: walsender replica 10.0.0.2(56192) streaming 0/7000148
su - postgres
psql
select application_name, state, sync_priority, sync_state from pg_stat_replication;

返回 async 状态:

select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;

返回 async 状态。

从数据库 10.0.0.3

ps aux | grep receiver

返回:

postgres: walreceiver streaming 0/7000148
支付宝打赏 微信打赏

赞赏是不耍流氓的鼓励

评论系统未开启,无法评论!

-->