设为首页 收藏本站
查看: 3036|回复: 0

[经验分享] postgres配置主从流复制

[复制链接]

尚未签到

发表于 2016-11-22 09:47:54 | 显示全部楼层 |阅读模式
postgres主从流复制
  postgres在9.0之后引入了主从的流复制机制,所谓流复制,就是从库通过tcp流从主库中同步相应的数据。postgres的主从看过一个视频,大概效率为3w多事务qps。
  postgres的主从主称之为primary,从称为stand_by。主从配置需要注意的一个是主从的postgres的版本,环境,等最好都需要一致,否则可能产生奇奇怪怪的问题。

postgres的主配置
  主是10.12.12.10这台机器
  首先需要配置一个账号进行主从同步。
  修改pg_hba.conf,增加replica用户,进行同步。
  

host    replication     replica     10.12.12.12/32                 md5  

  这样,就设置了replica这个用户可以从10.12.12.12 对应的网段进行流复制请求。
  给postgres设置密码,登录和备份权限。
  

postgres# CREATE ROLE replica login replication encrypted password 'replica'  

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

wal_level = hot_standby  # 这个是设置主为wal的主机  

  
max_wal_senders = 32 # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
  
wal_keep_segments = 256 # 设置流复制保留的最多的xlog数目
  
wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间
  

  
max_connections = 100 # 这个设置要注意下,从库的max_connections必须要大于主库的
  

  重启主
  pg_ctl restart

postgres的从配置
  从是10.12.12.12这台机器
  创建的目录为 /data/pgsql/data2
  

pg_basebackup -F p --progress -D /data/pgsql/data2 -h 10.12.12.10 -p 5432 -U replica --password  

  这里使用了pg_basebackup这个命令,/data/pgsql/data2这个目录是空的
  成功之后,就可以看到这个目录中现有的文件都是一样的了。
  进入到/data/pgsql/data2目录,复制recovery.conf,这个文件可以从pg的安装目录的share文件夹中获取,比如
  

cp /usr/local/postgres94/share/recovery.conf.sample /data/pgsql/data2/recovery.conf  

  修改recovery.conf,只要修改几个地方就行了
  

standby_mode = on  # 这个说明这台机器为从库  
primary_conninfo = 'host=10.12.12.10 port=5432 user=replica password=replica'  # 这个说明这台机器对应主库的信息
  

  
recovery_target_timeline = 'latest' # 这个说明这个流复制同步到最新的数据
  

  postgresql.conf中也有几个地方要进行修改
  

max_connections = 1000 # 一般查多于写的应用从库的最大连接数要比较大  

  
hot_standby = on  # 说明这台机器不仅仅是用于数据归档,也用于数据查询
  
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
  
wal_receiver_status_interval = 1s  # 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
  
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈
  

  好了,现在启动从库

确认主库和从库都配置好了
  查看进程,主库所在的机器中会看到sender进程
  

8467 postgres  20   0  255m 2396 1492 S  0.0  0.1   0:00.66 postgres: wal sender process replica   

  从库所在的机器中会看到receiver进程
  

8466 postgres  20   0  298m 1968 1096 S  0.0  0.1   0:06.88 postgres: wal receiver process   streaming 3/CF118C18  

查看复制状态
  主库中执行:
  

postgres=# select * from pg_stat_replication;  
-[ RECORD 1 ]----+------------------------------
  
pid              | 8467       # sender的进程
  
usesysid         | 44673      # 复制的用户id
  
usename          | replica    # 复制的用户用户名
  
application_name | walreceiver  
  
client_addr      | 10.12.12.12 # 复制的客户端地址
  
client_hostname  |
  
client_port      | 55804  # 复制的客户端端口
  
backend_start    | 2015-05-12 07:31:16.972157+08  # 这个主从搭建的时间
  
backend_xmin     |
  
state            | streaming  # 同步状态 startup: 连接中、catchup: 同步中、streaming: 同步
  
sent_location    | 3/CF123560 # Master传送WAL的位置
  
write_location   | 3/CF123560 # Slave接收WAL的位置
  
flush_location   | 3/CF123560 # Slave同步到磁盘的WAL位置
  
replay_location  | 3/CF123560 # Slave同步到数据库的WAL位置
  
sync_priority    | 0  #同步Replication的优先度
  0: 异步、1~?: 同步(数字越小优先度越高)
  
sync_state       | async  # 有三个值,async: 异步、sync: 同步、potential: 虽然现在是异步模式,但是有可能升级到同步模式
  

同步复制
  看到上面的sync_state的状态有同步和异步的区别。
  我们之前的概念都是异步备份,就是一个事务完成了之后,直接返回程序,然后纪录日志,由复制进程重放日志进行数据复制。同步备份的概念,就是一个事务只有当完成了数据复制之后,才返回到程序中。当然同步的性能一定会比异步的性能差一个量级。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-303856-1-1.html 上篇帖子: MySQL 5.7原生JSON格式支持 下篇帖子: centos7 离线安装Ambari
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表