官网:https://www.postgresql.org/
中文社区:http://www.postgres.cn/index.php/v2/home
中文文档:https://www.yiibai.com/manual/postgresql/
源码下载地址:https://www.postgresql.org/ftp/source/
一、环境准备
准备2台主机,添加postgres用户并设置用户密码,配置postgres用户在三台物理节点之间免密。
1、服务对应关系
IP | 主机名 |
---|---|
192.168.49.131 | Master |
192.168.49.132 | Slave |
2、添加postgres用户
# groupadd postgres
# useradd -g postgres postgres
# echo '123456' | passwd --stdin postgres
3、创建数据目录
# mkdir -p /data/pgsql/data
# chown postgres.postgres /data/ -R
二、编译安装并初始化
1、源码下载并编译安装
# yum -y install readline-devel zlib-devel flex //安装依赖包
# wget https://ftp.postgresql.org/pub/source/v11.4/postgresql-11.4.tar.gz //下载源代码
# tar xf postgresql-11.4.tar.gz
# cd postgresql-11.4
# ./configure --prefix=/usr/local/postgres //编译安装
# make
# make install
2、声明环境
# cat >> /etc/profile << END
export MANPATH=/usr/local/postgres/share/man
export LD_LIBRARY_PATH=/usr/local/postgres/lib
export PATH=/usr/local/postgres/bin:\$PATH
END
# source /etc/profile
3、初始化
# su postgres -c 'pg_ctl -D /data/pgsql/data initdb'
4、配置自启动
#将源代码 contrib/start-scripts/linux 脚本文件,拷贝为 /etc/init.d/postgres
# cp contrib/start-scripts/linux /etc/init.d/postgres
# chmod 755 /etc/init.d/postgres
###修改为安装的路径
# egrep 'prefix|PGDATA|PGUSER' /etc/init.d/postgres | head -6
# Installation prefix
prefix=/usr/local/postgres
PGDATA="/data/pgsql/data"
PGUSER=postgres
PGLOG="$PGDATA/serverlog"
DAEMON="$prefix/bin/postmaster"
三、master上安装
1、启动服务并测试
# cd /data/pgsql/data
###修改主配置文件postgresql.conf监听地址为*
# cat >> postgresql.conf << END
listen_address='*'
END
###修改鉴权相关文件pg_hba.conf,添加以下一行配置
# cat >> pg_hba.conf << END
host all all 192.168.49.0/24 trust
#host all all 0.0.0.0/0 md5
END
###启动服务
# /etc/init.d/postgres start 或者 su postgres -c 'pg_ctl start -D /data/pgsql/data -l serverlog'
###连接测试
# netstat -an | grep 5432
# psql -U postgres -p 5432 ###psql –h 主机ip –p 端口号 –U 用户名
###设置密码
postgres=# alter user postgres with password 'postgres';
ALTER ROLE
postgres=# exit
###重新登陆
# psql -U postgres -p 5432 -W
2、master上新建用户用来进行主从同步
postgres# CREATE ROLE replica login replication encrypted password 'replica'
3、修改pg_hba.conf,允许用户同步
#允许192.168.49.0网段主机连接到主服务器
host all all 192.168.49.0/24 trust
#允许192.168.49.0网段主机使用replica用户来复制
host replication replica 192.168.49.0/24 md5
4、修改postgresql.conf
listen_addresses = '*' #监听所有IP
wal_level = hot_standby
max_wal_senders = 32 #这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个wal_keep_segments = 256
wal_sender_timeout = 60s #设置流复制主机发送数据的超时时间
max_connections = 100 #这个设置要注意下,从库的max_connections必须要大于主库的
5、重启服务器,并测试从备份服务器是否能够连接到主服务器
/etc/init.d/postgres restart #master服务器上执行
psql -h 192.168.49.131 -U postgres #salve服务器执行
6、将主节点备份到备份节点
# 从master[131]拷贝数据到salve[132]上(基础备份)
pg_basebackup -h 192.168.49.131 -U replica -D /data/pgsql/data -X stream -P
四、salve配置
1、配置recovery.conf
cp /usr/local/postgres/share/recovery.conf.sample /data/pgsql/data/recovery.conf
2、配置postgresql.conf
wal_level = hot_standby
max_connections = 1000 #一般查多于写的应用从库的最大连接数要比较大
hot_standby = on #说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s #数据流备份的最大延迟时间
wal_receiver_status_interval = 10s #多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on #如果有错误的数据复制,是否向主进行反馈
3、重启备份服务器
/etc/init.d/postgres restart
五、验证
1、在主节点上执行
postgres=# select client_addr,sync_state from pg_stat_replication;
client_addr | sync_state
---------------+------------
192.168.49.132 | async
(1 行记录)
2、ps aux | grep postgres查看wal进行,主服务器上描述是sender,备份服务器上描述是reciver,说明备份复制部署成功。