程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

Centos7+PostgreSQL 15主从简单搭建

balukai 2025-02-06 13:59:18 文章精选 6 ℃

Centos7+PostgreSQL 15主从简单搭建

一.环境准备

1. 服务器分配


角色

IP

主节点

192.168.246.130

从节点

192.168.246.131


2. 关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

二.主节点配置

1. 修改配置文件postgresql.conf

执行如下命令:vi /var/lib/pgsql/15/data/postgresql.conf

修改以下参数值为如下所示:

listen_addresses = '*' #监听的IP地址

wal_level = replica #控制wal存储的级别。wal_level决定有多少信息被写入到WAL中。默认值是最小的(minimal),其中只写入从崩溃或立即关机中恢复的所需信息。replica 增加 wal 归档信息同时包括只读服务器需要的信息。(9.6 中新增,将之前版本的 archive 和 hot_standby合并。9.6之前版本设置hot_standby)


2. 修改配置文件pg_hba.conf

执行如下命令:vi /var/lib/pgsql/15/data/pg_hba.conf

增加以下所示内容:

host all all 192.168.246.131/32 trust

host replication replica 192.168.246.131/32 md5

host all all 192.168.246.130/32 md5


3. 创建数据库账号replica

CREATE ROLE replica login replication encrypted password 'replica';

4. 重启数据库服务

systemctl restart postgresql-15.service

三.从节点配置

1. 关闭数据库服务

systemctl stop postgresql-15.service


2. 删除数据库主目录 data

执行如下命令进行删除:rm -rf /var/lib/pgsql/15/data

注意:为了避免误操作,最好先进行备份此目录,然后再进行删除。


3. 使用pg_basebackup命令同步数据库

执行如下命令

pg_basebackup -D /var/lib/pgsql/15/data -h 192.168.246.130 -p 5432 -U replica -R -F p -P


参数说明:

选项

说明

-p

主库数据库端口

-U

流复制用户

-W

使用密码验证

-D

指定备库的数据库路径

-h

主机地址

-R

为备库创建recovery.conf。注:10版本后已不需要此文件

-F p

将输出写作普通的文件,该文件与当前数据目录和表空间相同

-P

输出复制过程的详细信息


4. 修改配置文件postgresql.conf


执行如下命令:vi /var/lib/pgsql/15/data/postgresql.conf


修改以下参数值为如下所示:


primary_conninfo = 'host=192.168.246.130 port=5432 user=replica password=replica' #对应主库的连接信息

max_connections = 101 #需要大于主库的值

hot_standby = on # 开启热备

hot_standby_feedback = on # 如果有错误的数据复制向主进行反馈


5. 修改数据目录的所有者,用户组为postgres


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


6. 启动数据库服务

systemctl start postgresql-15.service


四.主从验证

按照以上配置步骤,简单的主从流复制就配置完成了,下面进行简单的验证。


1. 进程验证

1.1 主节点,查看sender进程

ps aux |grep sender

输出信息如下:

postgres 1165 0.0 0.3 400884 3832 ? Ss 11:36 0:01 postgres: walsender replica 192.168.246.131(42458) streaming 0/F0005D8


1.2 从节点,查看receiver进程

ps aux |grep receiver

输出信息如下:

postgres 1493 0.1 0.4 406220 4724 ? Ss 11:36 0:48 postgres: walreceiver streaming 0/F0006C0


2. 主节点,查看主从状态

在主节点中进入PostgreSQL交互终端,输入以下SQL语句,在主库中查看从库状态。

select * from pg_stat_replication;

输出如下:


pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | backend_xmin | sta

te | sent_lsn | write_lsn | flush_lsn | replay_lsn | write_lag | flush_lag | replay_lag | sync_priority | sync_state | reply_time


------+----------+---------+------------------+-----------------+-----------------+-------------+------------------------------+--------------+------

-----+-----------+-----------+-----------+------------+-----------+-----------+------------+---------------+------------+----------------------------

---

1165 | 16384 | replica | walreceiver | 192.168.246.131 | | 42458 | 2023-02-23 11:36:39.59571+08 | 735 | strea

ming | 0/F0006C0 | 0/F0006C0 | 0/F0006C0 | 0/F0006C0 | | | | 0 | async | 2023-02-23 19:05:36.060092+

08

(1 row)


3. 数据验证

3.1 主节点,主库数据查询

postgres=# \c db_test;

You are now connected to database "db_test" as user "postgres".

db_test=# select * from t_id;

id

----

1

2

3

11

(4 rows)


3.2 从节点,从库数据查询

postgres=# \c db_test;

You are now connected to database "db_test" as user "postgres".

db_test=# select * from t_id;

id

----

1

2

3

11

(4 rows)


3.3 主节点,主库数据插入

db_test=# insert into t_id values(12);

INSERT 0 1


3.4 从节点,从库数据查询

db_test=# select * from t_id;

id

----

1

2

3

11

12

(5 rows)


3.5 从节点,从库数据插入

db_test=# insert into t_id values(15);

ERROR: cannot execute INSERT in a read-only transaction

注:从库只读


4. 从节点,查看备库状态

在主节点中进入PostgreSQL交互终端,输入以下SQL语句,在主库中查看从库状态。

select * from pg_stat_wal_receiver;

输出如下:


pid | status | receive_start_lsn | receive_start_tli | written_lsn | flushed_lsn | received_tli | last_msg_send_time | last_msg_r

eceipt_time | latest_end_lsn | latest_end_time | slot_name | sender_host | sender_port |

conninfo


------+-----------+-------------------+-------------------+-------------+-------------+--------------+-------------------------------+---------------

----------------+----------------+-------------------------------+-----------+-----------------+-------------+---------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------

2792 | streaming | 0/F000000 | 1 | 0/F0006C0 | 0/F0006C0 | 1 | 2023-02-23 23:12:45.923454+08 | 2023-02-23 23:

12:45.934249+08 | 0/F0006C0 | 2023-02-23 21:16:35.948703+08 | | 192.168.246.130 | 5432 | user=replica password=******** channel

_binding=prefer dbname=replication host=192.168.246.130 port=5432 fallback_application_name=walreceiver sslmode=prefer sslcompression=0 sslsni=1 ssl_

min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any

(1 row)

最近发表
标签列表