You are on page 1of 6

 

CentOS7 PostgreSQL 12 流复制(主从切换)



CentOS7 PostgreSQL 12 流复制(主从切换)
一、安装PostgreSQL
1.1 基础环境配置(所有主机操作)
1.1.1 配置HOSTS
1.1.2 创建postgres用户
1.1.3 安装Postgresql数据库(PG12)
1.1.4 创建统一的目录结构
1.1.5 修改系统变量
二、PostgreSQL流复制结构(master和slave主机操作)
master主机操作
2.1 初始化系统
2.2 修改postgresql-12.service
2.3 重启PG服务
2.4 修改系统配置(以下用postgres用户操作)
2.5 在主库中创建流复制用户(stream_replication)
slave主机操作
2.6 初始化系统
2.7 修改postgresql-12.service
2.8 重启PG服务
2.9 基础备份复制到备库服务器
2.10 编辑standby.signal
2.11 修改postgress.conf文件
2.12 7、重启从库
三、验证主从搭建是否成功
1、连接主库执行
2、进一步测试

一、安装PostgreSQL
操作系统 主机名 主机 角色 端口
CentOS 7 master 10.0.0.11 PG-Master 5432
CentOS 7 slave 10.0.0.12 PG-Slave 5432

1.1 基础环境配置(所有主机操作)
1.1.1 配置HOSTS
echo -e "10.0.0.11 master\n10.0.0.12 slave\n10.0.0.13 pool" >> /etc/hosts
# 执行一次即可

1.1.2 创建postgres用户
useradd postgres && echo "anxin@2022" | passwd --stdin postgres

1.1.3 安装Postgresql数据库(PG12)
上传postgress12的安装包到服务器上

yum localinstall *.rpm

1.1.4 创建统一的目录结构
mkdir /data1/pg_{data,bin,logs} -p
chown -R postgres.postgres /data1/

1.1.5 修改系统变量
vi /etc/profile #增加以下内容
export PGHOME=/usr/pgsql-12/
export PGDATA=/data1/pg_data
export PGPORT=5432
export PATH=$PATH:$PGHOME/bin
# 生效
source /etc/profile

二、PostgreSQL流复制结构(master和slave主
机操作)
master主机操作

2.1 初始化系统
/usr/pgsql-12/bin/postgresql-12-setup
vi /usr/lib/systemd/system/postgresql-12.service
2.2 修改postgresql-12.service
内容如下:

# Include the default config:


.include /usr/lib/systemd/system/postgresql-12.service

[Service]
Environment=PGDATA=/data1/pg_data

2.3 重启PG服务
systemctl daemon-reload
systemctl restart postgresql-12
systemctl enable postgresql-12.service

2.4 修改系统配置(以下用postgres用户操作)
切换到postgres用户

su - postgres

cp /data1/pg_data/pg_hba.conf{,.bak}
cat >/data1/pg_data/pg_hba.conf<<EOF
local   all             all                                              
trust
host   all             all                       10.0.0.11/32          
trust
host   all             all                       10.0.0.12/32          
trust
host   all             all                       0.0.0.0/0              
md5
host   all             all                       ::1/128                
trust
host   replication     stream_replication        0.0.0.0/0              
md5
EOF
#host   replication     stream_replication       0.0.0.0/0              
md5 为流复制用户

cp /data1/pg_data/postgresql.conf{,.bak}
cat >/data1/pg_data/postgresql.conf<<EOF
listen_addresses = '*'
port = 5432
max_connections = 256
shared_buffers = 1GB #建议设置shared_buffers 大小为服务器内
存的25%~40%,
effective_cache_size = 2GB #是postgresql能够使用的最大缓存
work_mem = 64MB
maintenance_work_mem = 1GB #垃圾回收参数
min_wal_size = 1GB #只要WAL磁盘使用率低于这个设置,旧的WAL
文件总数被回收
max_wal_size = 1GB #自动WAL检查点使得WAL增长到最大尺寸
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
wal_level = hot_standby
wal_log_hints = on
max_wal_senders = 3
hot_standby = on
wal_sender_timeout = 60s
max_connections = 100
logging_collector = on
log_directory = 'pg_log'
EOF
#操作完记得重启 pg_ctl restart

2.5 在主库中创建流复制用户(stream_replication)
CREATE USER stream_replication replication LOGIN CONNECTION LIMIT 5
ENCRYPTED PASSWORD 'anxin@2021';

slave主机操作

2.6 初始化系统
/usr/pgsql-12/bin/postgresql-12-setup
vi /usr/lib/systemd/system/postgresql-12.service

2.7 修改postgresql-12.service
内容如下:

# Include the default config:


.include /usr/lib/systemd/system/postgresql-12.service

[Service]
Environment=PGDATA=/data1/pg_data

2.8 重启PG服务
systemctl daemon-reload
systemctl restart postgress-12.service
2.9 基础备份复制到备库服务器
rm -rf /data1/pg_data # 如果没有重要数据可操作,主要为同步主库路径
su - postgres -c 'pg_basebackup -D $PGDATA --format=p -h master -p 5432 -U
stream_replication -W -R'

2.10 编辑standby.signal
cd /data1/pg_data/
vim standby.signal
## 加入
standby_mode = 'on'

2.11 修改postgress.conf文件
加入如下配置:

vim /data1/pg_data/postgress.conf

# 配置连接时的用户名及密码
primary_conninfo = 'host=master port=5432 user=stream_replication
password=123456'
#说明恢复到最新状态
recovery_target_timeline = latest
#流备份的最大延迟时间
max_standby_streaming_delay = 30s
#向主机汇报本机状态的间隔时间
wal_receiver_status_interval = 10s
#出现错误复制,向主机反馈
hot_standby_feedback = on

2.12 7、重启从库
systemctl restart postgresql-12.service

三、验证主从搭建是否成功
1、连接主库执行
su - postgres
psql
select client_addr,sync_state from pg_stat_replication;
client_addr | sync_state
-------------+------------
10.0.0.12   | async         ----------->从库的基本信息,有几个从库就显示几条
(1 row)

出现上述证明你的主从已经配置好了。
2、进一步测试
master:
su - postgres
psql
select pg_is_in_recovery();
pg_is_in_recovery
-------------------
f               ------------->主库这个地方显示的是f
(1 row)

slave:
su - postgres
psql
select pg_is_in_recovery();
pg_is_in_recovery
-------------------
t               ------------->从库这个地方显示的是t
(1 row)

You might also like