Postgresql主从配置
Posted 等待与憧憬
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Postgresql主从配置相关的知识,希望对你有一定的参考价值。
一、 简介
PostgreSql在9.0之后引入了主从的流复制机制,所谓流复制,就是从服务器通过tcp流从主服务器中同步相应的数据。这样当主服务器数据丢失时从服务器中仍有备份。
与基于文件日志传送相比,流复制允许保持从服务器更新。 从服务器连接主服务器,其产生的流WAL记录到从服务器, 而不需要等待主服务器写完WAL文件(关于Wal可以看看官方的说法https://www.postgresql.org/docs/10/static/different-replication-solutions.html)。
PostgreSQL流复制默认是异步的。在主服务器上提交事务和从服务器上变化可见之间有一个小的延迟,这个延迟远小于基于文件日志传送,通常1秒能完成。如果主服务器突然崩溃,可能会有少量数据丢失。
同步复制必须等主服务器和从服务器都写完WAL后才能提交事务。这样在一定程度上会增加事务的响应时间。
配置同步复制仅需要一个额外的配置步骤: synchronous_standby_names必须设置为一个非空值。synchronous_commit也必须设置为on。
注: 主从服务器所在节点的系统、环境等最好一致。PostgreSQL版本也最好一致,否则可能会有问题。
二、 安装部署(使用Ubuntu的普通用户安装部署)
角色 |
IP地址 |
系统版本 |
数据库版本 |
主服务器 |
192.168.100.71 |
Ubuntu18.04 amd64 |
PostgreSQL10 |
从服务器 |
192.168.100.70 |
Ubuntu18.04 amd64 |
PostgreSQL10 |
注:18.04版本默认的PostgreSQL版本是10,要安装其他版本可以采用编译的方式或者apt-get 指定版本号安装
1、两台服务器都要安装PostgreSQL
sudo apt-get updatel
sudo apt-get install postgresql
sudo vi /etc/postgresql/10/main/postgresql.conf
在文件末尾添加或者找到该行,将peer改为trust
local all all trust
重启PostgreSQL服务
sudo service postgresql restartt
这样PostgreSQL就安装完毕
2、配置主服务器
切换成postgres用户
sudo su – postgres
进入数据库,创建一个普通的数据库用户用户进行主从同步(只需赋予登录和复制的权限即可)
postgres=# create role guoxm login replication encrypted password \'guoxm\'
然后退出
postgres=# \\q
在exit退出到原用户
然后,修改postgresql的pg_hba.conf,配置运行刚刚创建的guoxm用户可以进行连接
sudo vi /etc/postgresql/10/main/pg_hba.conf
在文件尾添加如下两行
host all all 192.168.100.70/32 trust #运行70服务器连接到本机 host replication guoxm 192.168.100.70/32 md5 #运行guoxm用户在70上复制本机数据
注:第二个的角色必须是replication
最后,再次配置postgresql.conf
sudo vi /etc/postgresql/10/main/ postgresql.conf
这次需要配置的是主机的角色
listen_addresses = ‘*’ #监听所有ip archive_mode = on #开启归档模式 archive_command = ‘cp %p /var/lib/postgresql/10/main/%f’ #归档命令 wal_level = hot_standby #热备模式 max_wal_senders = 1 #最多有1个流复制连接 wal_sender_timeout = 60s #流复制超时时间 max_connections = 100 #最大连接时间,必须要小于从库的配置
保存退出后,重启数据库服务
sudo service postgresql restartt
3、配置从服务器
首先,先测试一下是否能连接主服务器
psql -h 192.168.100.70 -U postgres
如果可以,说明主机配置正常,否则检查一下主机的pg_hba.conf配置
进入到postgres用户
sudo su - postgres
先清空main目录下的数据(main文件夹就是PostgreSQL数据的存储文件夹)
rm -rf 10/main/*
或者
rm -rf /var/lib/postgresql/10/main/*
因为PostgreSQL的home目录就在/var/lib/postgresql中
所以上面两条命令到达的效果是一样的
然后,开始从主服务器上copy数据到本机上,这一步叫做“基础备份”
pg_basebackup -h 192.168.100.71 -U guoxm –D 10/main/ -X stream –P
或者
pg_basebackup -F p --progress -D 10/main/ -h 192.168.100.71 -p 5432 -U guoxm --password
pg_basebackup是PostgreSQL自带的基础备份工具
这样,基础备份就完成了
然后,创建recovery.conf用于从库恢复从主库获取的数据
vi recovery.conf
然后编辑如下配置
standby_mode = on #表示该节点是从库 primary_conninfo = ‘host=192.168.100.71 post=5432 user=guoxm password=guoxm’#从机信息和连接用户 recovery_target_timelint = ‘latest’ #说明恢复到最新状态
保持并退出后,
复制或在移动到main文件夹中
cp recovery.conf 10/main/
或者
mv recovery.conf 10/main/
然后,exit退出到原用户
最后,配置从机的postgresql.conf文件
sudo vi /etc/postgresql/10/main/postgresql.conf
在文件末尾添加如下配置
wal_level = hot_standby #热备模式 max_connections = 300 #最大连接时间,必须要小于从库的配置 hot_standby = on #说明这台机器不仅用于数据归档,还可以用于数据查询 max_standby_streaming_delay = 30s #流备份的最大延迟时间 wal_receiver_status_interval = 10s #向主机汇报本机状态的间隔时间 hot_standby_feedback = on #r出现错误复制,向主机反馈
保存并退出
到这里,从机配置完成
重启数据库服务
sudo service postgresql restart
4、验证主从配置是否成功
在主机上,切换到postgres用户
sudo su – postgres
进入数据库
执行如下查询
select client_addr,sync_state from pg_stat_replication;
如果看到如下查询结果
说明192.168.100.70是从服务器,在接收流,而且是异步流复制。说明主从配置成功
注:必须切换到postgres用户下进行查询
此外,还可以查看相关进程来验证是否配置成功
在主机、从机上分别执行
ps aux | grep postgres
主机上可以看到正在向从机发送数据流
从机上可以看到正在接收数据流
到此,主从配置完成;
参考链接:
以上是关于Postgresql主从配置的主要内容,如果未能解决你的问题,请参考以下文章