安装环境:centos 7 + postgresql 14
postgresql1.local - 192.168.221.133 source
postgresql2.local - 192.168.221.137 replica
可以参考官方教程网站:https://www.postgresql.org/download/linux/redhat/
参考博客,具体安装步骤如下:
# Install the repository RPM:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# Install PostgreSQL:
sudo yum install -y postgresql14-server
# Optionally initialize the database and enable automatic start:
sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
sudo systemctl enable postgresql-14
sudo systemctl start postgresql-14
登录方式1:
#postgres权限登录
su - postgres
#输入 psql
-bash-4.2$ psql
#用户 postgres 的口令:
psql (14.2)
输入 "help" 来获取帮助信息.
postgres=#
登录方式2:
psql -U postgres -h 192.168.221.133 --port 58063
ALTER USER postgres WITH PASSWORD 'a';
1、postgresql.conf
vim /var/lib/pgsql/14/data/postgresql.conf
2、pg_hba.conf
vim /var/lib/pgsql/14/data/pg_hba.conf
末尾添加
host all all 0.0.0.0/0 scram-sha-256
sudo systemctl restart postgresql-14
4、关闭防火墙
在数据库远程连接过程中可能出现连接失败的情况,需要关闭防火墙
参考博客:
1、创建具有流复制权限的用户
CREATE ROLE replica login replication encrypted password 'replica的密码';
2、编辑postgresql.conf
# 新增或修改下列属性设置
# 监听所有IP
listen_addresses = '*'
# 开启归档
archive_mode = on
#归档命令
archive_command = 'test ! -f /var/lib/pgsql/14/data/pg_archive/%f && cp %p /var/lib/pgsql/14/data//pg_archive/%f'
# 9.6开始没有hot_standby(热备模式)
wal_level = replica
#最多有2个流复制连接
max_wal_senders = 2
wal_keep_size = 16
#流复制超时时间
wal_sender_timeout = 60s
# 最大连接数,据说从机需要大于或等于该值
max_connections = 100
3、编辑pg_hba.conf增加从机IP
末尾增加
host replication replica 192.168.221.137/32 scram-sha-256
host replication replica 192.168.221.137/32 trust
4、重启数据库
sudo systemctl restart postgresql-14
1、验证在从库是否可以访问主节点
psql -U postgres -h 192.168.221.133 --port 5432
2、停止从库postgres服务
systemctl stop postgresql-14.service
3、清空从库数据存储文件夹
rm -rf /var/lib/pgsql/14/data/*
4、从主服务器上copy数据到从服务器,这一步叫做“基础备份”
pg_basebackup -h 192.168.221.133 -U replica -D /var/lib/pgsql/14/data --write-recovery-conf --progress --verbose
//授权文件夹
chmod -R 0700 /var/lib/pgsql/14/data
注意:需要验证是否能正常启动数据库
5、此时data目录下会出现standby.signal文件,编辑此文件
## 加入
standby_mode = 'on'
6、修改postgresql.conf文件
#从机信息和连接用户
primary_conninfo = 'host=主节点IP port=5432 user=replica password=replica用户的密码'
#说明恢复到最新状态
recovery_target_timeline = latest
#大于主节点,正式环境应当重新考虑此值的大小
max_connections = 120
#说明这台机器不仅用于数据归档,还可以用于数据查询
hot_standby = on
#流备份的最大延迟时间
max_standby_streaming_delay = 30s
#向主机汇报本机状态的间隔时间
wal_receiver_status_interval = 10s
#r出现错误复制,向主机反馈
hot_standby_feedback = on
7、重启数据库
sudo systemctl restart postgresql-14
select client_addr,sync_state from pg_stat_replication;
主数据库是读写的,备数据库是只读的。当主数据库宕机了,可以通过pg_controldata命令将从库提升为主库(将只读模式变成读写),实现一些基本的HA应用。也可以通过建立触发文件提升为主库,不推荐。命令快捷不容易出错。
1、查看/var/lib/pgsql/12/data复制状态
主库
从库
su - postgres -c "pg_ctl promote"
server promoting
4、查看从库日志
cat /var/lib/pgsql/912/data/pg_log/postgresql-Mon.log