开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

PostgresSQL 主从搭建

简介:
+关注继续查看

由于工作需要,最近开始接触各种数据库,并尝试各种数据库产品的高可用方案。

今天分享的是postgresSQL的主从配置,其实还是蛮简单的,跟随本文的步骤,保证能实现PG主从的搭建。


1. 安装环境

1
2
3
4
192.168.0.136 主库
192.168.0.160 从库
PORT: 5432
USR: postgres

2. 主库已经运行一段时间,检查主库的version,保证主从数据库的version相同。

1
2
3
4
5
6
7
# psql --version
psql (PostgreSQL) 9.4.11
 
# rpm -qa|grep postgres
postgresql94-libs-9.4.11-1PGDG.rhel6.x86_64
postgresql94-server-9.4.11-1PGDG.rhel6.x86_64
postgresql94-9.4.11-1PGDG.rhel6.x86_64

3. 在从库上安装相同版本的软件

检查安装情况,已经安装和primary相同的软件版本

1
2
3
4
# rpm -qa|grep postgres
postgresql94-libs-9.4.11-1PGDG.rhel6.x86_64
postgresql94-server-9.4.11-1PGDG.rhel6.x86_64
postgresql94-9.4.11-1PGDG.rhel6.x86_64

4. 查询主库的数据库位置

1
2
3
4
5
6
7
8
9
10
# su - postgres
$  echo $PGDATA
/var/lib/pgsql/9.4/data
$ cd /var/lib/pgsql/9.4/data
$ ls
base    pg_clog      pg_hba.conf    pg_log      pg_multixact 
pg_replslot  pg_snapshots  pg_stat_tmp  pg_tblspc    PG_VERSION  
postgresql.auto.conf  postmaster.opts global  pg_dynshmem  pg_ident.conf  
 pg_logical  pg_notify     pg_serial    pg_stat       pg_subtrans  
 pg_twophase  pg_xlog     postgresql.conf       postmaster.pid

确认配置文件位置

1
2
3
4
postgres=# show config_file;
  config_file               
-----------------------------------------
 /var/lib/pgsql/9.4/data/postgresql.conf

查看数据文件目录

1
2
3
4
postgres=# show data_directory;
     data_directory      
-------------------------
 /var/lib/pgsql/9.4/data

5. 准备修改主库的参数文件,先查询一下pg_hba.conf已有的参数内容

1
2
3
4
$ cat pg_hba.conf|grep -v '^#'
local   all             all                                     peer
host    all             all             0.0.0.0/0            trust
host    all             all             ::1/128             ident

6. 在主库的pg_hba.conf中添加

1
2
$ more pg_hba.conf
host    replication     replica     192.168.0.160                 md5

这样,就设置了replica这个用户可以从192.168.0.160 对应的网段进行流复制请求。


7. 在主库给postgres设置密码,登录和备份权限。

1
2
$psql
postgres# CREATE ROLE replica login replication encrypted password 'replica123'

8. 修改postgresql.conf,注意设置下下面几个地方:

1
2
3
4
5
6
7
wal_level = hot_standby       # 这个是设置主为wal的主机
max_wal_senders = 10           # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_keep_segments = 256        # 设置流复制保留的最多的xlog数目
wal_sender_timeout = 60s       # 设置流复制主机发送数据的超时时间
max_connections = 100           # 这个设置要注意下,从库的max_connections必须要大于主库的
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/9.4/archive/%f'

9. 创建对应archive log存放路径

1
mkdir -p /var/lib/pgsql/9.4/archive/

10. 重启主库,让配置生效

1
2
# service postgresql-9.4 start
Starting postgresql-9.6 service:                           [  OK  ]

11. 在从库远程连接主数据库,验证replica用户是否可以正常访问

1
2
 psql -h IP-address -p 5432 dbname usename  
 psql -h 192.168.0.136 -p 5432 postgres replica

12. 然后在主库做一次基础备份(后面的Hot-standby主要使用data目录下文件):

1
2
3
postgres=# SELECT pg_start_backup('bak20170905');
$tar czvf /var/lib/pgsql/9.4/backups/backup_data.tar.gz.20170905 /var/lib/pgsql/9.4/data
postgres=# SELECT pg_stop_backup();

13. 将备份文件sftp到从库,并解压,替换原有的data目录

1
2
3
4
cd  /var/lib/pgsql/9.4/
mv data data_bk
mv backup_data.tar.gz.20170905 backup_data.tar.gz
tar -xzvf backup_data.tar.gz

14. 删除一些就的身份信息,归档日志文件等

1
2
3
rm -rf data/pg_xlog/
mkdir -p data/pg_xlog/archive_status
rm data/postmaster.pid

15. 查找并拷贝recovery.conf.sample文件到data目录下

1
2
3
4
5
find / -name recovery.conf.sample
/root/postgresql/postgresql-9.2.20/src/backend/access/transam/recovery.conf.sample 
/usr/pgsql-9.4/share/recovery.conf.sample
复制
cp /usr/pgsql-9.4/share/recovery.conf.sample /var/lib/pgsql/9.4/data/recovery.conf

16. 然后编辑recovery.conf:

1
2
3
4
standby_mode = on
restore_command = 'cp /var/lib/pgsql/9.4/archive/%f %p'   #这个参数,我还需要确认具体含义
primary_conninfo = 'host=192.168.0.136 port=5432 user=replica password=replica123'                      # 主服务器的信息以及连接的用户,这条信息最重要
recovery_target_timeline = 'latest'

17. 拷贝下面配置文件

1
2
cp  /var/lib/pgsql/9.4/data.bk/postgresql.conf  /var/lib/pgsql/9.4/data/postgresql.conf
cp  /var/lib/pgsql/9.4/data.bk/pg_hba.conf  /var/lib/pgsql/9.4/data/pg_hba.conf

18. 然后编辑pstgresql.conf:

1
hot_standby = on

19. 启动Hot-Standby:

1
/usr/pgsql-9.4/bin/postmaster -D /var/lib/pgsql/9.4/data --port=5432

20. 验证是否部署成功

在主节点上执行,验证已经成功搭建,说明5.160是从服务器,在接收流,而且是异步流复制。

1
2
3
4
postgres=# select client_addr,sync_state from pg_stat_replication;
 client_addr | sync_state 
-------------+------------
 192.168.0.160 | async

21. 查询更多数据同步信息:

1
2
3
4
postgres=# select usename,application_name,client_addr,client_port,backend_start,backend_xmin,state,sent_location,write_location,flush_location,replay_location,sync_priority,sync_state  from pg_stat_replication;
 usename | application_name | client_addr | client_port |         backend_start         | backend_xmin |   state   | sent_location | write_location | flush_location | replay_location | sync_priority | sync_state 
---------+------------------+-------------+-------------+-------------------------------+--------------+-----------+---------------+----------------+----------------+-----------------+---------------+------------
 replica | walreceiver      | 192.168.0.160 |       39375 | 2017-09-05 17:49:22.512393+08 |              | streaming |         5/1049488     | 5/1049488        | 5/1049488      |   5/1049488       |             0 |          async

22. 此外,还可以分别在主、从节点上运行 ps aux | grep postgres 来查看进程:

主服务器上,可以看到有一个 wal sender 进程,还有archiver进程等

1
2
3
4
5
# ps aux | grep postgres
postgres  1104  0.0  0.1 324652 15120 ?        S    14:26   0:00 /usr/pgsql-9.4/bin/postmaster -D /var/lib/pgsql/9.4/data                      
postgres  1111  0.0  0.0 324652  5844 ?        Ss   14:26   0:00 postgres: wal writer process                              
postgres  1113  0.0  0.0 179796  1544 ?        Ss   14:26   0:00 postgres: archiver process   last was 000000010000000500000000.00000060.backup
postgres  8515  0.0  0.0 325448  3108 ?        Ss   17:49   0:00 postgres: wal sender process replica 192.168.0.160(39375) streaming 5/103A1D0

从服务器上,可以看到 wal receiver 进程,和recovering进程正在恢复archive log

1
2
3
4
$ ps aux | grep postgres
postgres 11508  0.0  0.1 324684 15128 ?        S    17:49   0:00 /usr/pgsql-9.4/bin/postmaster -D /var/lib/pgsql/9.4/data
postgres 11510  0.0  0.0 324796  4336 ?        Ss   17:49   0:00 postgres: startup process   recovering 000000010000000500000001
postgres 11513  0.0  0.0 331892  3700 ?        Ss   17:49   0:00 postgres: wal receiver process   streaming 5/103A1D0

23. 可以在下面路径中,看到从库接收的archive log文件

1
2
3
4
# pwd
/var/lib/pgsql/9.4/data/pg_xlog
# ls
000000010000000500000001  000000010000000500000002  archive_status

至此,PostgreSQL主从流复制安装部署完成。

在主服务器上插入数据或删除数据,在从服务器上能看到相应的变化。从服务器上只能查询,不能插入或删除数据


24. 第12、13、14步骤,可以通过另一种拷贝主库到从库的方法,pg_basebackup命令拷贝文件

1
pg_basebackup -F p --progress -D /var/lib/pgsql/9.4/data2 -h 192.168.0.136 -p 5432 -U replica --password

进入到/var/lib/pgsql/9.4/data2目录,修改recovery.conf,这个文件可以从pg的安装目录的share文件夹中获取,比如

1
cp /usr/pgsql-9.6/share/recovery.conf.sample /var/lib/pgsql/9.6/data2/recovery.conf

确保文件夹权限是700,这个很关键,其他权限,不能正常启动

1
$ chmod 0700 /var/lib/pgsql/9.6/data2

使用下面命令启动standby

1
$ /usr/pgsql-9.6/bin/postmaster -D /var/lib/pgsql/9.6/data2










本文转自 hsbxxl 51CTO博客,原文链接:http://blog.51cto.com/hsbxxl/1963039,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MYSQL主从复制
​ MySQL主从复制是一个异步的过程,其底层是基于MYSQL数据库自带的二进制日志功能。就是一台或者多台MYSQL数据库(Slave,从库),从另一台MYSQL数据库(Master,主库)进行日志的复制,然后再解析日志到本身并应用,最终实现主库和从库数据库状态保持一致。​ 二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复起着极其重要的作用,MySQL的主从复制, 就是通过该binlog实现的。
0 0
MYSQL实现主从复制
MySQL实现主从复制 1.主服务器配置 设置复制主配置 vi /etc/my.cnf [mysqld] log-bin=mysql-bin server-id=1 创建用于复制的用户 mysql> CREATE USER 'repl'@'%.
894 0
PostgreSQL 最佳实践 - 逻辑增量复制(MySQL <-> PgSQL <-> PgSQL)
alidecode是RDS PG提供的一个逻辑复制插件,使用它,可以将RDS PG通过逻辑复制的方式,把数据同步到线下的PostgreSQL。同时还支持将MySQL的数据同步到PostgreSQL。目前alidecode还没有对外开放下载,敬请期待。下面是使用方法。 准备工作,提交工单,开放用户的
7852 0
MySQL到MsSQL的迁移工具——SSMA
SQL Server迁移助手(SSMA)团队开发了针对MySQL的迁移助手Microsoft SQL Server Migration Assistant 2008 for MySQL。微软同时发布了其他三个迁移助手: SSMA for Access, SSMA for Oracle, and SSMA for Sybase (all v4.2) 。
937 0
MYSQL主从复制的搭建
前言:MYSQL的主从复制的原理跟MYSQL的主主复制的原理其实是一样的,但是从数据库不能用于写操作,所以在配置的过程中会存在部分参数配置的一些不一样的地方; 主主和主从复制的架构图 主从复制的具体配置步骤如下: ...
744 0
MYSQL主从同步测试
参考: http://www.cnblogs.com/zgx/archive/2011/09/13/2174823.html   注意选建同步用户,其它的都按步就搬。 还有,不要让IPTABLES坏事,开好规则。
665 0
【Mysql 学习】SQL服务器模式
MySQL服务器可以以不同的SQL模式来操作,并且可以为不同客户端应用不同模式。这样每个应用程序可以根据自己的需求来定制服务器的操作模式。 模式定义MySQL应支持哪些SQL语法,以及应执行哪种数据验证检查。
645 0
POSTGRESQL slonyI 1.1.5 数据同步最新的使用
postgresql 数据同步1. 总体需求1.1. 当前情况随着软件系统复杂度的提高,分布式部署成为软件部署流行的方式。对于系统的结构,程序和数据是支撑系统的两大要素。程序的分布式部署已经有很多很好的方案,在这里我说一下数据的分布式部署。
442 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
SQL Sever迁移PG经验
立即下载
PostgresChina2018_董红禹_SQL_Server迁移PG经验分享
立即下载
PostgresChina2018_张启程_为什么我们抛弃MongoDB和MySQL,选择PgSQL
立即下载