postgresql-14.1搭建主从
一、环境准备1. 服务器规划表格角色IP主机名说明主库192.168.0.7pg-master可读写从库192.168.0.46pg-slave只读2. 基础依赖两台都执行yum install -y gcc gcc-c make readline-devel zlib-devel openssl-devel libxml2-devel libxslt-devel pam-devel libtool bison flex wget3. 创建 postgres 用户两台都执行useradd postgresecho postgres | passwd --stdin postgres二、编译安装 PostgreSQL 14.1两台都执行# 下载源码wget https://ftp.postgresql.org/pub/source/v14.1/postgresql-14.1.tar.gz# 解压tar -zxvf postgresql-14.1.tar.gzcd postgresql-14.1# 编译安装./configure --prefix/usr/local/pgsqlmake -j4 make install# 配置环境变量echo export PATH/usr/local/pgsql/bin:$PATH /etc/profilesource /etc/profile# 创建数据目录mkdir -p /data/pgsqlchown -R postgres:postgres /data/pgsqlchmod 700 /data/pgsql三、主库配置192.168.0.71. 初始化主库su - postgres initdb -D /data/pgsql2. 修改主库配置postgresql.confvim /data/pgsql/postgresql.conflisten_addresses *wal_level replica # 流复制必须开启max_wal_senders 10 # 最大从库连接数wal_keep_size 1024 # 保留WAL日志大小synchronous_commit on # 同步提交可选保证数据零丢失hot_standby on # 从库允许只读3. 配置访问权限pg_hba.confvim /data/pgsql/pg_hba.conf# 允许从库复制host replication replica 192.168.0.46/32 trusthost replication replica 192.168.0.7/32 trust# 允许本地/远程访问host all all 0.0.0.0/0 md54. 创建复制专用用户pg_ctl -D /data/pgsql startpsql -U postgresCREATE ROLE replica login replication encrypted password replica123;四、从库配置192.168.0.461. 清空从库数据目录su - postgresrm -rf /data/pgsql/*2. 基于主库基础备份物理流复制pg_basebackup -h 192.168.0.7 -U replica -D /data/pgsql -X stream -P -R-R自动生成 standby 配置无需手动写 recovery.conf3. 验证从库状态pg_ctl -D /data/pgsql start[postgreslocalhost ~]$ psql -U postgres -c select pg_is_in_recovery();pg_is_in_recovery-------------------t(1 row)返回t表示从库正常运行。五、主从状态验证主库执行postgres# select usename,client_addr,state,sync_priority from pg_stat_replication;usename | client_addr | state | sync_priority------------------------------------------------replica | 192.168.0.46 | streaming | 0(1 row)看到state streaming表示主从同步正常。六、主库挂了从库提升主库1、从库变主库在从库执行pg_ctl -D /data/pgsql promote验证新主库可写入新主库可读写[rootlocalhost ~]# psql -U postgres -c create table test(id int); insert into test values(1); select * from test;id----1(1 row)2、修复旧主库让它重新变成【新主的从库】在原来的主库需要删除之前的数据 执行su - postgrespg_ctl -D /data/pgsql stoprm -rf /data/pgsql/*# 重新从新主库同步数据变成从库pg_basebackup -h 192.168.0.46 -U replica -D /data/pgsql -X stream -P -R# 启动pg_ctl -D /data/pgsql start3. 验证主从同步恢复在 新主库 执行postgres# select usename,client_addr,state,sync_priority from pg_stat_replication;usename | client_addr | state | sync_priority------------------------------------------------replica | 192.168.0.7 | streaming | 0(1 row)看到streaming 主从恢复正常