0

PostgreSQL集群组件:vip-manager

摘要:作者简介Hans-JürgenSchönig从90年代开始从事PostgreSQL相关工作。他是CYBERT

作者简介

Hans-JürgenSchönig从90年代开始从事PostgreSQL相关工作。他是CYBERTEC的首席执行官兼技术主管,CYBERTEC是该领域的市场领导者之一,自2000年以来已为全球无数客户提供服务。

译者简介    

孟令彬&崔鹏&海能达DBA团队,任职于海能达通信股份有限公司哈尔滨平台中心,数据库开发工程师,致力于postgresql数据库在专网通信领域、公共安全领域的应用与推广,个人兴趣主要集中在:数据库优化、高性能/高可用数据库架构设计与开源数据库的源码研究。

校对者简介

朱君鹏,博士研究生。主要研究方向为数据库管理系统,尤其是内存数据库、事务处理系统、软硬件协同设计、日志系统。

前言

Patroni极大地简化了PostgreSQL高可用性集群的设置。我个人认为Patroni是迄今为止对PostgreSQL集群管理最可靠并且最直接的HA工具。
许多人提出的主要问题是:如何使PostgreSQL集群透明?应用程序如何确定主数据库在哪里?这个问题的解决方案是我们之前实现的一个工具:让我向您介绍vip-manager(虚拟IP管理器),这是一种易于使用的工具,用于处理PostgreSQL Patroni集群中的服务IP。 

vip-manager:自动IP故障转移

在更深入地了解vip-manager之前,我想简要地解释Patroni本身的基本体系结构。您可能知道,Patroni是Zalando最初开发的工具,这是PostgreSQL高可用性开发中的里程碑。多年来,我们(CYBERTEC)为Patroni贡献了无数补丁。我们希望我们在与许多依赖PostgreSQL HA的人相关的关键领域有所作为。
Patroni使用键值存储(通常是etcd,zookeeper或consul)来处理共识。想法是将领导者密钥保留在键值存储中,该值知道当前主服务器在哪里。换句话说:集群知道谁是主要的,谁是次要的。为什么不使用此信息在群集内部移动服务IP并将其分配给活动的主服务器?这正是vip-manager所做的。它在每个数据库节点上运行,并检查其上运行的节点是否恰好是“被选中的”节点。如果vip-manager看到它在当前主数据库上运行,它将获取IP并创建IP别名。如果vip-manager看到其运行的节点不是主节点,它将确保IP被删除。
因此,在由3个数据库服务器组成的群集中,您将需要4个IP。每个服务器1个IP是静态的-一个IP将移动并跟随主服务器。当然,浮动IP是您应在应用程序中使用的IP。
Patroni集群中的典型节点必须运行两项服务:Patroni和vip-manager。Patroni控制PostgreSQL(停止,启动,同步等)。vip-manager是一个简单的Go应用程序,除了控制指向主服务器的浮动IP外,什么也不做。
配置VIP管理器

配置vip-manager很简单。这是一个例子

    # config for vip-manager by Cybertec PostgreSQL International GmbH
     
    # time (in milliseconds) after which vip-manager wakes up and checks
    # if it needs to register or release ip addresses.
    interval: 1000
     
    # the etcd or consul key which vip-manager will regularly poll.
    key: "/service/pgcluster/leader"
    # if the value of the above key matches the NodeName (often the hostname of this host),
    # vip-manager will try to add the virtual ip address to the interface specified in Iface
    nodename: "pgcluster_member1"
     
    ip: 192.168.0.123 # the virtual ip address to manage
    mask: 24 # netmask for the virtual ip
    iface: enp0s3 #interface to which the virtual ip will be added
     
    # how the virtual ip should be managed. we currently support "ip addr add/remove"
    # through shell commands or the Hetzner api
    hosting_type: basic # possible values: basic, or hetzner.
     
    endpoint_type: etcd # etcd or consul
    # a list that contains all endpoints to which etcd could talk.
    endpoints:
      - http://127.0.0.1:2379
      - http://192.168.0.42:2379
      # A single list-item is also fine.
      # consul will always only use the first entry from this list.
      # For consul, you'll obviously need to change the port to 8500. Unless you're
      # using a different one. Maybe you're a rebel and are running consul on port 2379?
      # Just to confuse people? Why would you do that? Oh, I get it.
     
    etcd_user: "patroni"
    etcd_password: "Julian's secret password"
    # don't worry about parameter with a prefix that doesn't match the endpoint_type.
    # You can write anything there, I won't even look at it.
    consul_token: "Julian's secret token"
     
    # how often things should be retried and how long to wait between retries.
    # (currently only affects arpClient)
    retry_num: 2
    retry_after: 250  #in milliseconds

    基本上,配置很简单:首先,vip-manager必须知道etcd在哪里。然后,它必须知道在哪里可以找到领导者密钥(URL)。最后,我们想知道哪个IP必须绑定到哪个网络接口。剩下的是etcd或一些重试配置的简单登录信息。真正的核心是:etcd在哪里,如何登录?我的领导密钥在etcd中的哪个位置,以及哪个IP分配给哪个设备。那就是全部的魔力。

    vip-manager有助于使群集完全透明。它可作为二进制软件包用于大多数常见的Linux发行版和Windows。我们维护该程序包,并根据需要添加改进。值得指出的一项改进是,vip-manager也可以在Hetzner(德国领先的托管公司)上工作。我们可以与Hetzner API来移动IP。我之所以这样说是因为,如果您有特殊要求,vip-manager可以通过合理的努力进行调整以满足您的需求。

    最后…

    我希望您喜欢这篇有关虚拟IP和PostgreSQL集群的文章。如果您想了解更多有关最近发布的软件的信息,我想向您介绍Scalefield,这是一种使用Kubernetes自动执行PostgreSQL部署的解决方案。如果您现在想阅读一些内容,我想向您介绍我们最近在Go(golang)中实现的另一种工具。pg_timetable是PostgreSQL的先进的作业调度程序,它使您可以运行SQL代码以及内置程序(电子邮件等)和其他可执行文件。
    请点击文章底部“阅读原文”查看原文内容!




    PostgreSQL中文社区欢迎广大技术人员投稿
    投稿邮箱:press@postgres.cn

    「喜欢文章,快来给作者赞赏墨值吧」

    评论

    0
    0
    最新发布
    暂无内容,敬请期待...
    数据库资讯
    最新 热门 更多
    本月热门
    近期活动
    全部
    暂无活动,敬请期待...
    相关课程
    全部
    暂无课程,敬请期待...