V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
clino
V2EX  ›  问与答

postgresql replication 数据库异地镜像有什么比较好的做法?

  •  
  •   clino · 2015-11-04 14:07:45 +08:00 · 2643 次点击
    这是一个创建于 3089 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我的需求是最近因为网络不稳定,连接异地的 postgresql 老是出问题,现在感觉不得不做一下相关的数据库镜像,这样本地读至少不会被网络问题困扰,我只需要一个只读的 slave 就行了,对两边同步的一致性要求也没那么高

    我之前大致看了一下 https://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling ,感觉有好多选择,然后里面提到的 http://momjian.us/main/writings/pgsql/replication.pdf 这里也有很多比较,有点看晕了

    还看了一篇: https://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-on-postgresql-on-an-ubuntu-12-04-vps 感觉我的场合用这个是不是就可以了? 有经验的达人给些评论哈,谢谢!
    5 条回复    2015-11-05 14:54:01 +08:00
    wd
        1
    wd  
       2015-11-04 14:42:28 +08:00   ❤️ 1
    pg 的 slave 是只读的,这个没问题么?
    那你可选的方案两种。
    1 主从 db 不直接连接,主库把 xlog 归档到从库所在机器。这个归档不成功一般不会影响主库。主要是配置 archive_command.
    2 主从 db 通过 streaming 连接,这个需要 9.x 以上版本。

    当然如果为了保险期间,可以两种配置。
    clino
        2
    clino  
    OP
       2015-11-04 14:55:58 +08:00
    @wd 我现在用的是 9.1 所以可以用这个 streaming 的方式哈? 就是我贴的最后这个连接说的这个方式,应该是靠谱的哈
    wd
        3
    wd  
       2015-11-05 13:54:33 +08:00
    @clino streaming 方式可能会有问题的时候是,主从如果差异非常大的时候,可能会断开主从,这个时候是没有办法通过他们之间的这种连接继续同步数据的,需要通过 xlog 方式让主从差异缩小,然后才能继续 streaming 。
    clino
        4
    clino  
    OP
       2015-11-05 13:58:37 +08:00
    @wd 那断开以后的处理需要手动去做吗? 感觉如果有这种断开的异常岂不是很麻烦...
    如果是这样的话,感觉 streaming 这个做得不够好啊
    wd
        5
    wd  
       2015-11-05 14:54:01 +08:00   ❤️ 2
    @clino
    你可以看看 omnipitr ,然后 streaming + xlog 同时做,有 streaming 走 streaming ,失败了走 xlog 。
    另外,刚看到 pg 的文档说有个 replication slot 你可以看看。 http://www.postgresql.org/docs/9.4/static/warm-standby.html#STREAMING-REPLICATION-SLOTS
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2779 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:20 · PVG 21:20 · LAX 06:20 · JFK 09:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.