PostgreSQL 单节点部署

        Postgresql 安装其实在"Nacos + Postgresql 生产环境部署"这篇文章中有做过详解介绍,这里我把安装步骤也汇总到这篇文章中

        Postgresql 安装包下载:

postgresql 版本:15.2
postgrsql  官方下载地址:https://ftp.postgresql.org/pub/source/  

        我这边用到的是版本15.2,使用版本根据自己的需要下载对应的版本即可

         安装Postgresql 系统依赖包

yum install gcc -y readline readline-dev readline-devel zlib-devel  bzip2

        将postgresql-15.2.tar.bz2 上传至服务器/data /app/pats_opts 目录下并解压并编译安装

mkdir -p /data/app/pats_opts
cd /data/app/pats_opts 
tar xjvf postgresql-15.2.tar.bz2

cd postgresql-15.2
./configure --prefix=/data/app/pats_opts/postgres
make world
make install-world

        新增postgres 用户 ,并设置密码,此处密码也是postgres,此处密码根据实际情况而定     

adduser postgres
passed posrgres 		 #此处命令为给新增的postgres 用户配置密码

        创建postgres 数据库数据目录

cd /data/app/pats_opts/postgres
mkdir data  && chown -R postgers:postgres data

        初始化postgres 数据库 

su – postgres
/data/app/pats_opts/postgres/bin/initdb -D /data/app/pats_opts/postgres/data/

        初始化成功后,截图最下面一行是给出提示使用最下面一行命令来启动postgres。

        修改postgres 配置文件

#在postgres 用户下配置
cd /data/app/pats_opts/postgres/data
vi pg_hba.conf  
新增一条 host    all             all          0.0.0.0/0           trust

        备注:这边的0.0.0.0/0 配置后是所有的终端都可以连接数据库,如果安全有要求的话,这里可以不配置0.0.0.0/0,可以配成内部指定网段,例如:172.16.0.0/16 .

        截图中的METHOD 配置的参数很多,我这里介绍下最常用的两个参数:trust、md5

trust:无条件允许连接,只要满足ip 数据库名、用户名匹配即可登录,不需要密码校验,常用户开发、测试环境
md5:MD5哈希秘钥认证。常用于生产环境

        编辑postgreql.conf配置文件

vi postgresql.conf
listen_addresses = '0.0.0.0'
max_connections = 200     #这里配置的是最大连接数,根据实际情况配置即可

       启停postgres 

#启动psql
/data/app/pats_opts/postgres/bin/pg_ctl -D /data/app/pats_opts/postgres/data/ -l logfile start

#停止psql

/data/app/pats_opts/postgres/bin/pg_ctl -D /data/app/pats_opts/postgres/data/ -l logfile stop

        到这里Postgresql 服务就已经安装好了

PostgreSQL原生流复制(Streaming Replication)完全指南

    原生流复制原理

        WAL:

                write ahead log 即预写日志。

                WAL 核心思想:Postgresql 所有修改(insert、update、delete、DDL)都会先写WAL日志,然后才写真正的数据文件。

                WAL 核心功能:

                        数据库崩溃后如何恢复数据

                        主从复制时如何同步数据

        基础架构图:

                此图有AI提供

        流复制类型:

                同步复制:

                        当程序对主库有操作时会产生wal日志,当主库第一次将wal 同步给备库后,需要等到备库回复主库已经收到第一次的wal后,主库才会发后面的wal日志。主库需要等待备库确认已经接受wal日志后才会继续

                异步复制:

                         当程序对主库有操作时会产生wal日志,主库会不停的将wal日志发送给备库。主库无需等待备库确认接受wal日志。

    原生流详细配置

        我这边的环境是在同一台服务器上按照前面的步骤安装了两台Postgres库

                 实例1:主库        postgres1  port:5432

                 实例2:备库        postgres2  port:5433

        

        主库配置:

                修改postgreql.conf

#上面安装postgres修改的配置不变,在增加配置wal相关的配置

wal_level = replica

#开启wal归档
archive_mode = on  

#archive 文件夹需要再指定目录下新增
archive_command = 'test ! -f /data/app/pats_opts/postgres_cluster/postgres1/date/archive/%f && cp %p /data/app/pats_opts/postgres_cluster/postgres1/date/archive/%f '

max_wal_senders = 10  
                                        
wal_keep_size = 1GB  

hot_standby = on

                修改pg_hba.conf

#在此配置文件的最下面增加一行
host    replication     replica         192.168.1.170/32        md5

#replication 为虚拟的数据库名,专门用户复制连接
#replica 为复制的用户名
#192.168.1.170 填写备库的ip

                主备配置好了后,启动数据库 ,在库启动后,新增专门的复制用户

-bash-4.2$ ./psql -U postgres -p5432
psql (15.2)
Type "help" for help.

postgres=# CREATE USER replica WITH REPLICATION LOGIN ENCRYPTED PASSWORD '123456';
CREATE ROLE
postgres=# 

        备库配置:        

                先手动将备库停止掉

/data/app/pats_opts/postgres_cluster/postgres2/bin/pg_ctl -D /data/app/pats_opts/postgres_cluster/postgres2/date/ -l /data/app/pats_opts/postgres_cluster/postgres2/logfile stop

                清空备库数据目录(此步骤很关键,及时是两个新搭建的空的主备库,也需要把备库的data下的文件都删了,重新从主库备份一份过来)

​cd /data/app/pats_opts/postgres_cluster/postgres2/
rm -rf data/*

                在备库上使用pg_baseback 命令执行基础备份

./pg_basebackup -h 192.168.1.170 -p 5432 -U replica -D /data/app/pats_opts/postgres_cluster/postgres2/date -P -R

#-h 主库ip地址
#-p 端口号
#-U 用户名
#-D 备库date路径
#-P 显示进度
#-R 自动生成standby 配置,这个参数加上后,会自动把主库的配置文件同步到备库上

我这里是主备库都在同一台服务器上,所以我这边要把备库的配置文件的端口号改成跟主备不一样,不然备库启动不成功。

        到这里就全部配置好了,启动从库

        

        验证主从状态

                主库登录:     

-bash-4.2$ cd /data/app/pats_opts/postgres_cluster/postgres1/bin/

-bash-4.2$ ./psql
psql (15.2)
Type "help" for help.


postgres=# SELECT * FROM pg_stat_replication;
  pid   | usesysid | usename | application_name |  client_addr  | client_hos
tname | client_port |         backend_start         | backend_xmin |   state
   | sent_lsn  | write_lsn | flush_lsn | replay_lsn | write_lag | flush_lag 
| replay_lag | sync_priority | sync_state |          reply_time           
--------+----------+---------+------------------+---------------+-----------
------+-------------+-------------------------------+--------------+--------
---+-----------+-----------+-----------+------------+-----------+-----------
+------------+---------------+------------+-------------------------------
 129663 |    16387 | replica | walreceiver      | 192.168.1.170 |           
      |       48690 | 2026-05-12 15:55:44.640924+08 |              | streami
ng | 0/5000060 | 0/5000060 | 0/5000060 | 0/5000060  |           |           
|            |             0 | async      | 2026-05-12 15:56:44.800797+08
(1 row)

postgres=# SELECT state FROM pg_stat_replication ;
   state   
-----------
 streaming
(1 row)

                备库登录:          


-bash-4.2$ cd /data/app/pats_opts/postgres_cluster/postgres2/date/bin

-bash-4.2$ ./psql -p 5433
psql (15.2)
Type "help" for help.

postgres=# SELECT pg_is_in_recovery();
 pg_is_in_recovery 
-------------------
 t
(1 row)

          主库state = streaming &从库SELECT pg_is_in_recovery 状态是t ,表示成功

        同步测试:

                在主库创建测试表,在测试库查看,看看表是否正常生成

#主库

./psql

postgres=# CREATE TABLE test001(id int);
CREATE TABLE
postgres=# INSERT INTO test001 VALUES (1);
INSERT 0 1
postgres=# INSERT INTO test001 VALUES (2);
INSERT 0 1
postgres=# INSERT INTO test001 VALUES (3);


#备库:
select * from test001 ;

到这里psotgresql 主备模式已经搭建完成了。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐