安装
1.1.下载PostgreSQL 12安装包
下载地址:https://ftp.postgresql.org/pub/source/
1.2. 安装依赖包
yum install wget gcc gcc-c++ epel-release llvm5.0 llvm5.0-devel clang libicu-devel perl-ExtUtils-Embed readline readline-devel zlib zlib-devel openssl openssl-devel pam-devel libxml2-devel libxslt-devel openldap-devel systemd-devel tcl-devel python-devel -y
1.3.解压安装包
# tar -zxvf postgresql-12.0.tar.gz
1.4. 编译安装
到解压出来的目录下
# postgresql-12.0]$#./configure --prefix=/usr/local/pgsql/12 --enable-nls --with-python --with-tcl --with-openssl --with-pam --with-ldap --with-systemd --with-libxml --with-libxslt
# make && make install
# chown -R postgres:postgres /usr/local/pgsql -R
1.5.修改文件
# vi /etc/profile.d/pgsql.sh
添加
export PATH=/usr/local/pgsql/12/bin:$PATH
# source /etc/profile.d/pgsql.sh
1.6.初始化
切换到postgres用户,创建data目录
# su - postgrespgsql_data]$ mkdir data
初始化
$ initdb -D /pgsql_data/data/ -U postgres —locale=en_US.UTF8 -E UTF8
1.7. 启动数据库
pg_ctl -D /pgsql_data/data -l /pgsql_data/data/serverlog start
至此单节点PG配置完成。
2 PG主备配置
主端:172.20.5.163 :5432 备端:172.20.5.225 :5432
2.1主库端操作
修改配置文件:
cd /pgsql_data/data
$ cp pg_hba.conf pg_hba.conf.bak
# 允许repl用户进行流复制
cat <<-eof >>/pgsql_data/data/pg_hba.conf
host all all 0.0.0.0/0 md5
host replication repl 172.20.0.0/22 trust
eof
配置postgresql.conf
cat <<-eof >/pgsql_data/data/postgresql.conf
listen_addresses = '*'
port = 5432
max_connections = 1000
superuser_reserved_connections = 100
full_page_writes = on
wal_log_hints = off
max_wal_senders = 500
hot_standby = on
log_destination = 'csvlog'
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S'
log_rotation_age = 1d
log_rotation_size = 10MB
log_statement = 'mod'
log_timezone = 'PRC'
timezone = 'PRC'
unix_socket_directories = '/tmp'
shared_buffers = 512MB
temp_buffers = 16MB
work_mem = 32MB
effective_cache_size = 2GB
maintenance_work_mem = 128MB
#max_stack_depth = 2MB
dynamic_shared_memory_type = posix
## PITR
full_page_writes = on
wal_buffers = 16MB
wal_writer_delay = 200ms
commit_delay = 0
commit_siblings = 5
wal_level = replica
archive_mode = on
archive_command = 'test ! -f /data/pgdata/archivedir/%f && cp %p /data/pgdata/archivedir/%f'
archive_timeout = 60s
Eof
重启数据库。
2.2创建主备流复制用户:
psql -U postgres -c "ALTER USER postgres WITH PASSWORD 'postgres';"
psql -U postgres -c "CREATE USER repl WITH PASSWORD 'postgres' REPLICATION;"
修改文件:pg_hba.conf 添加:
host replication repl 172.20.5.225/24 trust
2.3 备库端操作
2.3.1 备库端安装PG同主库端,备库安装到初始化步骤。
2.3.2 清空data 目录,重建DATA目录:
2.3.3 执行命令,流复制建库:
pg_basebackup -h 172.20.5.163 -p 5432 -U repl -w -Fp -Xs -Pv -R -D /pgsql_data/data/
-h 连接的是主库端的IP,-p 主库port。
注意报错:
此错误出现在配置流复制备节点执行pg_basebackup的时候 解决方法:重启下主端节点,由于主节点有新的配置,因此需要重启使其生效。
2.3.4 修改从库端配置文件postgresql.conf
max_connections = 150
wal_level = hot_standby
archive_mode = on
hot_standby = on
archive_timeout = 60s
max_standby_streaming_delay = 30s
wal_receiver_status_interval = 10s
hot_standby_feedback = on
2.3.5 修改文件:postgresql.auto.conf
添加:
primary_conninfo = 'user=repl passfile=''/home/postgres/.pgpass'' host=172.20.5.163 port=5432 sslmode=prefer sslcompression=0 gssencmode=disable target_session_attrs=any'
2.3.6 修改data目录权限,启动备库
]$ chmod -R 0750 /pgsql_data/data
]$ pg_ctl -D /pgsql_data/data -l /pgsql_data/data/serverlog start
2.4 主备状态检查
主库端:
select * from pg_stat_replication;
postgres=# select pg_is_in_recovery(); 主机结果为:f,备机结果为t
备库端:
至此,PG主备配置完成。
发表评论