参考资料:https://www.cnblogs.com/songyuejie/p/4561089.html
方案简介
使用主备流复制模式,加上pgpool中间件做读写分离和负载均衡。
环境配置
主备服务器都要设置
统一系统时间
每5分钟同步时钟1
2yum install -y ntpdate && ntpdate ntp1.aliyun.com
echo -e "# sync time from ntp1.aliyun.com\n5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com > /dev/null 2>&1" >> /var/spool/cron/root
创建系统用户
1 | useradd -U postgres |
配置数据库目录
1 | cat >> /etc/profile << EOF |
网络IP设置
服务器间使用机器名访问
1 | echo db1 > /etc/hostname |
vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=”static”
IPADDR=”10.19.251.20”
NETMASK=”255.255.255.0”
GATEWAY=”10.19.251.1”
reboot
#ssh免登录配置
su postgres
cd ~
ssh-keygen
[enter]
[enter]
[enter]
ssh-copy-id postgres@db1
yes
password
ssh-copy-id postgres@db2
yes
password
安装
安装PostgresSQL
安装包官方下载地址:https://www.postgresql.org/download/
在页面上选择适合的版本,按照说明下载安装即可。
我的环境是 CentOS7 Postgresql10
1 | yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm |
安装pgpool-II
1 | yum install -y pgpool-II-10 pgpool-II-10-extensions |
配置主库
创建数据库实例根目录,并修改权限1
2
3mkdir -p /data/pgsql
chown postgres:postgres /data/pgsql
chmod 700 /data/pgsql
切换到postgres用户1
su postgres
初始化数据库1
/usr/pgsql-10/bin/initdb -D /data/pgsql
配置访问权限文件,在文件最后追加1
2host all all 192.168.0.0/24 md5
host replication replica 192.168.0.0/24 md5
配置数据库参数文件,在文件最后追加1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16listen_addresses = '*'
max_connections = 1000
wal_level = replica
wal_log_hints = on
hot_standby = on
logging_collector = on
shared_preload_libraries = 'pg_stat_statements,auto_explain'
pg_stat_statements.max = 1000
pg_stat_statements.track = all
pg_stat_statements.track_utility = off
track_io_timing = off
auto_explain.log_min_duration = 10ms
auto_explain.log_analyze = false
auto_explain.log_verbose = false
auto_explain.log_nested_statements = false
配置完成后,启动数据库1
2mkdir -p /data/pgsql/log
/usr/pgsql-10/bin/pg_ctl -D /data/pgsql -l /data/pgsql/log/postgresql.log start
使用客户端登录数据库psql
创建一个复制角色1
CREATE ROLE replica login replication encrypted password 'replica';
安装扩展函数1
2
3create extension pg_stat_statements;
create extension pgpool_regclass;
create extension pgpool_recovery;
配置备库
第一步同样创建数据库实例根目录,并修改权限1
2
3mkdir -p /data/pgsql
chown postgres:postgres /data/pgsql
chmod 700 /data/pgsql
切换到postgres用户1
su postgres
从主库拷贝数据,初始化实例1
/usr/pgsql-10/bin/pg_basebackup -D /data/pgsql -R -P -d "hostaddr=172.17.0.2 port=5432 user=replica password=replica"
配置自动恢复文件,在文件中添加1
2recovery_target_timeline = 'latest'
trigger_file = '/data/pgsql/trigger_file'
最后启动备库即可1
/usr/pgsql-10/bin/pg_ctl -D /data/pgsql -l /data/pgsql/log/postgresql.log start
创建触发文件,备库将升级为主库1
touch /data/pgsql/trigger_file