Professional Documents
Culture Documents
一、安装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的安装包到服务器上
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
内容如下:
[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
内容如下:
[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)