首页 > 数据库 > > PostgreSQL 高可用之 ETCD

PostgreSQL 使用的Patroni是并不是一个软件而是通过分布式软件来进行相关的FAILOVER 或者节点的选举。而Patroni 使用的分布式软件,主要的两个 ZOOKEEPER 和 ETCD, 这里为什么使用 ETCD 而不是 ZOOKEEPER。主要的原因之一是相比较两者的使用的编制语言和使用的协议都是不同的。一个是使用PAXOS 一个使用的是 RAFT ,使用的语言分别是 JAVA 和 GO 语言。
从未来的前景看,目前ETCD 是占据上风的并且RAFT 协议在软件的成型也更加的容易。而另一个原因是 ZOOKEEPER 要使用JAVA 的环境,并且要配置JAVA的环境,相对ETCD 来说,这点其实就可以看做是不大友好,ETCD 直接下载直接使用不需要环境依赖等等都值得去赞。
首先 ZOOKEEPER 和 ETCD 都是 KEY-VALUE 存储的系统,和传统的数据库思维不同,这样的KEY -VALUE 每个数据的表达都有自身的 KEY 和 VALUE ,或者说是通过类JOSN 的方式进行数据的存储。并且
ETCD 的安装方式主要有两种,1 yum -y install etcd 就可以直接安装,2 或者直接下载 tar包,后解压后直接运行。这里采用了最简单的 yum的方式进行安装。
基于RAFT 的原理,ETCD 具有自主选举主和FAILOVER 的功能,Patroni 就是借助这个功能来进行POSTGRESQL 的选主和FAILOVER的切换等高可用的功能。这里我们使用的是静态发现的方式 (ETCD 有三种发现的方式,分别是静态, etcd discovery , DNS discovery)
这里安装ETCD 有三台机器
192.168.198.200
192.168.198.110
192.168.198.111
在/etc/hosts 中 将机器名和 IP 地址一一对应
在进行ETCD 配置是,由于是静态配置所以我们需要以下配置,不必要的东西已经删减掉 基本上每台机器都是这样配置的,但的确安装后就有坑,先看配置,然后在说坑
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.198.200:2380,http://127.0.0.1:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.198.200:2379,http://127.0.0.1:2379"
ETCD_NAME="etcd1"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.198.200:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.198.200:2379"
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.198.200:2380,etcd2=http://192.168.198.110:2380,etcd3=http://192.168.198.111:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
————————————————————————————
启动etcd 也是很简单的,有两种方式,
1 通过命令行的方式,可以将所有的参数都贴在后面
2 通过 读取conf 的方式来进行系统的系统
systemctl start etcd.service
下面的配置中
1 ETCD_LISTEN_PEER_URLS 互相监听的地址,这里面需要设置本地地址否则会出问题,虽然第一台机器不设置也能起来但后面其他的机器启动就会出现故障
2 ETCD_NAME必须每台节点都要有自己的值
3 ETCD_INITIAL_CLUSTER_STATE 一开始可以设置为NEW 但建议其他的机器设置为 existing ,否则后面如果集群重启后,可能会报已经有值服务退出的故障。
另外如果出现莫名奇妙的故障可以将原始的数据清空,当然前提是你的etcd并未投入到正常的工作状态。
可以去 ETCD_DATA_DIR 指定的目录将里面的数据清空,然后从新启动机器。

默认清空日志输出到 /var/log/message
原文作者:;如有侵权,请联系管理员删除。