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

主机上可以看到正在向从机发送数据流

 

 

从机上可以看到正在接收数据流

 

 

到此,主从配置完成;

 

参考链接:

https://www.jianshu.com/p/2d07339774c0

https://www.cnblogs.com/yjf512/p/4499547.html

posted @ 2018-08-06 10:44  等待与憧憬  阅读(18383)  评论(5编辑  收藏  举报