文档章节

PostgreSQL数据库单机扩展为流复制

小豆豆123
 小豆豆123
发布于 2017/07/25 22:34
字数 767
阅读 7
收藏 0

 

 

1. 在standby服务器安装postgres数据库,不需要初始化.

安装过程详见:http://www.cnblogs.com/ilifeilong/p/6979288.html

2. 在primary服务器创建具有REPLICATION权限的复制用户

 
  1. postgres=# CREATE ROLE repl WITH REPLICATION PASSWORD ‘repl‘ LOGIN; 

3. 允许复制用户远程连接到primary服务器

 
  1. $ grep "^host" pg_hba.conf 
  2. host    all             all             127.0.0.1/32            trust 
  3. host    replication             repl             0.0.0.0/0               md5  
  4. host    all             all             ::1/128                 trust 

4. 在primary服务器设置流复制相关的参数

 
  1. $ mkdir /usr/local/pgsql/arch  
  2. $ egrep "archive_mode|max_wal_senders|wal_keep_segments|archive_command|wal_level|hot_standby" postgresql.conf 
  3. al_level = hot_standby            # minimal, archive, hot_standby, or logical 
  4. archive_mode = on        # enables archiving; off, on, or always 
  5. archive_command = ‘test ! -f /usr/local/pgsql/arch/%f && cp %p /usr/local/pgsql/arch/%f‘         
  6. max_wal_senders = 5        # max number of walsender processes 
  7. wal_keep_segments = 30        # in logfile segments, 16MB each; 0 disables 
  8. hot_standby = on            # "on" allows queries during recovery 
  9. #hot_standby_feedback = off        # send info from standby to prevent 

5. 重新启动primary服务器进程

 
  1. $ pg_ctl stop -m fast 
  2. $ pg_ctl start 

6. 对primary服务器做一个全备并传输到standby服务器

  • 在primary服务器通过pg_(start|stop)_backup函数进行备份
 
  1. postgres=# SELECT pg_start_backup(‘label‘, true); 
  2.  pg_start_backup  
  3. ----------------- 
  4.  7/E6000060 
  5. (1 row) 
  6. $ rsync -az --progress ${PGDATA} postgres@10.189.100.195:/usr/local/pgsql/ --exclude postmaster.pid 
  7. postgres=# SELECT pg_stop_backup(); 
  8. NOTICE:  pg_stop_backup complete, all required WAL segments have been archived 
  9.  pg_stop_backup  
  10. ---------------- 
  11.  7/E60005C8 
  12. (1 row) 

在standby服务器通过pg_basebackup命令进行备份,要求standby的PGDATA目录为空

 
  1. $ pg_basebackup --host=10.189.102.118 --username=repl --port=5432 --label=backup --verbose --progress --pgdata=/usr/local/pgsql/data --checkpoint=fast --format=p --xlog-method=stream 
  2. Password:  
  3. transaction log start point: 7/EA000028 on timeline 1 
  4. pg_basebackup: starting background WAL receiver 
  5. 65933562/65933562 kB (100%), 1/1 tablespace                                          
  6. transaction log end point: 7/EA000830 
  7. pg_basebackup: waiting for background process to finish streaming ... 
  8. pg_basebackup: base backup completed 

7. 设置standby数据库复制相关参数,使得standby失效转移后可以作为主库工作

 
  1. $ mkdir /usr/local/pgsql/arch 
  2. $ egrep "archive_mode|max_wal_senders|wal_keep_segments|archive_command|wal_level|hot_standby" postgresql.conf 
  3. wal_level = hot_standby                 # minimal, archive, hot_standby, or logical 
  4. archive_mode = on               # enables archiving; off, on, or always 
  5. archive_command = ‘test ! -f /usr/local/pgsql/arch/%f && cp %p /usr/local/pgsql/arch/%f‘ 
  6. max_wal_senders = 5             # max number of walsender processes 
  7. wal_keep_segments = 30          # in logfile segments, 16MB each; 0 disables 
  8. hot_standby = on                        # "on" allows queries during recovery 
  9. #hot_standby_feedback = off             # send info from standby to prevent 

8. 在standby文件创建恢复文件

 
  1. $ cat recovery.conf  
  2. restore_command = ‘cp /usr/local/pgsql/arch/%f "%p"‘ 
  3. standby_mode = ‘on‘ 
  4. primary_conninfo = ‘user=repl password=repl host=10.189.102.118 port=5432 sslmode=disable sslcompression=1‘ 
  5. archive_cleanup_command = ‘pg_archivecleanup -d /usr/local/pgsql/arch %r >> /usr/local/pgsql/arch/archive_cleanup.log‘ 
  6. trigger_file = ‘/usr/local/pgsql/data/trigger_active_standby‘ 

9. 启动standby数据库进程,自动启动流复制

 
  1. $ pg_ctl start -w 
  2. waiting for server to start....LOG:  could not create IPv6 socket: Address family not supported by protocol 
  3. LOG:  redirecting log output to logging collector process 
  4. HINT:  Future log output will appear in directory "pg_log". 
  5.  done 
  6. server started 

10. 检查primary和standby数据库的延迟

  • 通过函数和系统表查看
 
  1. edbstore=# select * from pg_stat_replication;           #在primary主库查看 
  2. -[ RECORD 1 ]----+------------------------------ 
  3. pid              | 15013 
  4. usesysid         | 19206 
  5. usename          | repl 
  6. application_name | walreceiver 
  7. client_addr      | 10.189.100.195 
  8. client_hostname  |  
  9. client_port      | 56072 
  10. backend_start    | 2017-06-13 08:10:35.400508-07 
  11. backend_xmin     |  
  12. state            | streaming 
  13. sent_location    | 7/EC01A588 
  14. write_location   | 7/EC01A588 
  15. flush_location   | 7/EC01A588 
  16. replay_location  | 7/EC01A588 
  17. sync_priority    | 0 
  18. sync_state       | async 
  19.  
  20. edbstore=# SELECT pg_current_xlog_location();                      #在primary主库查看 
  21.  pg_current_xlog_location  
  22. -------------------------- 
  23.  7/EC01A588 
  24. (1 row) 
  25.  
  26. postgres=# select pg_last_xlog_receive_location(),pg_last_xlog_replay_location(),pg_last_xact_replay_timestamp();     #在standby备库查看 
  27.  pg_last_xlog_receive_location | pg_last_xlog_replay_location | pg_last_xact_replay_timestamp  
  28. -------------------------------+------------------------------+------------------------------- 
  29.  7/EC01A588                    | 7/EC01A588                   | 2017-06-13 08:25:20.281568-07 
  30. (1 row) 
  • 通过进程查看
 
  1. $ ps -ef | grep sender | grep -v grep #在primary库查看  
  2. postgres 15013 24883 0 08:10 ? 00:00:00 postgres: wal sender process repl 10.189.100.195(56072) streaming 7/EC01A668  
  3. $ ps -ef | grep receiver | grep -v grep #在standby库查看  
  4. postgres 12857 12843 0 08:10 ? 00:00:00 postgres: wal receiver process streaming 7/EC01A668 

本文转载自:http://database.51cto.com/art/201706/543388.htm

共有 人打赏支持
小豆豆123

小豆豆123

粉丝 15
博文 3
码字总数 0
作品 0
济南
后端工程师
新书推荐 |《PostgreSQL实战》出版

很高兴《PostgreSQL实战》一书终于出版,本书大体上系统总结了笔者 PostgreSQL DBA 职业生涯的经验总结,本书的另一位作者张文升拥有丰富的PostgreSQL运维经验,目前就职于探探科技任首席Pos...

francs.tan
08/12
0
0
PostgreSQL如何删除pg_xlog数据

之前讨论过如果归档或者流复制出现问题的时候,pgxlog下面会不断地产生WAL日志,严重会塞满磁盘空间。但是pgxlog下面的日志又不能随意删除,否则有可能导致数据库起不来。PostgreSQL自带了清...

kenyon_君羊
2013/01/10
0
3
PostgreSQL和MySQL

翻译来源:https://www.2ndquadrant.com/en/postgresql/postgresql-vs-mysql/ PostgreSQL和MySQL 之间有着根本的区别。在评估两个系统之间的差异和折衷之后,必须做出明智的决定。 我们已经提...

悟道之客
05/04
0
0
PostgreSQL DBA快速入门(二) - 高可用流复制配置

PostgreSQL DBA快速入门(二) - 高可用流复制配置 之前的文章中我们谈论了单机PostgreSQL实例的部署,有人可能会说这不是生产级别的配置,因为没有任何高可用机制呀。那么本篇文章,我们来谈谈...

闻术苑
07/31
0
0
给PostgreSQL爱好者的参考资料

出处 http://blog.163.com/digoal@126/blog/static/163877040201172183022203/ 给PostgreSQL爱好者的参考资料 2011-08-21 08:32:39| 分类: PostgreSQL|举报|字号 订阅 推荐书籍: 概念书籍:......

3444542
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

70.shell的函数 数组 告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析 20.16/20.17 shell中的函数: ~1. 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段...

王鑫linux
今天
3
0
分布式框架spring-session实现session一致性使用问题

前言:项目中使用到spring-session来缓存用户信息,保证服务之间session一致性,但是获取session信息为什么不能再服务层获取? 一、spring-session实现session一致性方式 用户每一次请求都会...

WALK_MAN
今天
6
0
C++ yield()与sleep_for()

C++11 标准库提供了yield()和sleep_for()两个方法。 (1)std::this_thread::yield(): 线程调用该方法时,主动让出CPU,并且不参与CPU的本次调度,从而让其他线程有机会运行。在后续的调度周...

yepanl
今天
4
0
Java并发编程实战(chapter_3)(线程池ThreadPoolExecutor源码分析)

这个系列一直没再写,很多原因,中间经历了换工作,熟悉项目,熟悉新团队等等一系列的事情。并发课题对于Java来说是一个又重要又难的一大块,除非气定神闲、精力满满,否则我本身是不敢随便写...

心中的理想乡
今天
47
0
shell学习之获取用户的输入命令read

在运行脚本的时候,命令行参数是可以传入参数,还有就是在脚本运行过程中需要用户输入参数,比如你想要在脚本运行时问个问题,并等待运行脚本的人来回答。bash shell为此提 供了read命令。 ...

woshixin
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部