暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL来自欧罗巴Patroni系列技术主题二

文章转载自公众号:AustinDatabases

本次阅读时长

.

.

系列二:为什么选择ETCD?

接着上期说,既然在众多的PostgreSQL的高可用中Patroni是有让他被选择成为PostgreSQL的一种高可用方式的先进性,那下面就有另一个选择点,为什么选择etcd来作为Patroni的分布式协调服务,而不是zookeeper,或其他的方式。

Etcd本身是基于go语言编写的,具有下载后马上可以使用的类型,与zookeeper的结构相比,不需要jvm的支持。这点在配置上就会省去一些精力和时间。

simple,secure,fast,reliable表达的etcd最初的设计初衷。

Etcd is an open source distributed key-value store used to hold and manage the critical information that distributed systems need to keep running. 

ZooKeeper is an open source Apache project that provides a centralized service for providing configuration information,naming,synchronization and group services over large clusters in distributed systems. 

从上面的定义看etcd主要的工作是存储分布式键值,管理重要的信,保证分布式系统的运行。zookeeper提供的是集中化的服务,为大型分布式的 cluster提供配置信息,命名,同步等服务,zookeeper使用的是zab协议,而etcd使用的是raft协议,raft协议已经被不少的分布式数据库中使用,定义明确简单,实现方便,对比paxos协议(之前写过raft和paxos相关协议的文字),leader,follower,candidate三种服务器的状态,在raft集群中的所有服务器中有体现,一个时刻只能有一个leader其他为follower,当出现问题的情况下,会出现candidate状态,最终选举出new leader。

另外使用etcd作为patroni的搭档,在etcd的官网上有这样一个信息

ETCD整体的内部结构

整体的工作简单的描述,当用户的情况通过客户端或者http协议、https协议机械能访问,首先通过http server接口,将请求转发给store进行具体的事务处理,在有关整体集群的状态变更等问题会交给raft模块处理,最后在本地通过wal模块进行记录,在快速的提交给其他的节点进行信息同步。

关于信息的写入,有以下特点

对于etcd的节点中的信息写在所有节点都可以进行,但如果在follower节点的写会发送到leader节点,leader节点在将这些数据转发到follower节点。

作者:kevinyan

链接:https://juejin.im/post/6844903970461351944

来源:掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

安装上比较方便,去官网下载对应的安装包即可

etcd-v3.4.7-linux-amd64.tar.gz以3.4.7版本的etcd解压后可以看到里面有两个文件。

直接在对应账号中将系统变量设置,并且将相关的文件拷贝到你设置的目录。

Etcd通过2379 client request和2380两个端口进行数据的沟通,2379是etcd 与客户进行沟通的断开2380是etcd与另一个etcd之间沟通的通道。

启动单机非常简单,直接运行etcd命令即可。上图为执行命令后的打印信息,明确的相关的端口。

Etcd的配置方法主要分成1变量设置,2配置文件设置,3执行命令中的后缀配置,其中配置文件的优先级最高。

到底有那些信息需要进行配置
下面通过一个etcd的配置文件来说明一些相关的配置信息:
# This is the configuration file for the etcd server.
# Human-readable name for this member.
name: 'default' 每一个etcd都需要有一个名字,默认使用default
# Path to the data directory.
data-dir:记录我们的etcd的数据目录
# Path to the dedicated wal directory.
wal-dir:保存相关的日志文件的目录
# Time (in milliseconds) of a heartbeat interval.
heartbeat-interval:100心跳间隔,目前默认是100ms
# Time (in milliseconds) for an election to timeout.
election-timeout:1000选举节点状态的时间
# Raise alarms when backend size exceeds the given quota. 0 means use the
# default quota.
quota-backend-bytes:0
# List of comma separated urls to listen on for peer traffic.
listen-peer-urls:http://localhost:2380
此项配置是对于etcd对于多节点之间的信息互通的端口设计,一般希望指定IP定向监听
# List of comma separated urls to listen on for client traffic.
listen-client-urls:http://localhost:2379
对外的client的访问端口,是2379 
# List of this member's peer urls to advertise to the rest of the cluster.
# The urls needed to be a comma-separated list.
initial-advertise-peer-urls: http://localhost:2380
这个位置是设置PostgreSQL的对于集群中自己定位的地址
# List of this member's client urls to advertise to the public.
# The urls needed to be a comma-separated list.
advertise-client-urls:http://localhost:2379
对于发布对外的客户端URL名称
# Initial cluster configuration for bootstrapping.
initial-cluster:
初始化集群,类似数据库里面的peer在PXC或MGR中都需要有集群中所有节点的列表
# Initial cluster token for the etcd cluster during bootstrap.
initial-cluster-token:'etcd-cluster'
cluster的名字
# Initial cluster state('new' or 'existing').
initial-cluster-state:'new'
集群对于节点的状态,是新集群还是已经存在的集群
# Accept etcd V2 client requests
enable-v2:true
# Enable runtime profiling data via http server
enable-pprof:true
logger:zap
# Specify 'stdout' or 'stderr' to skip journald logging even when running under systemd.
log-outputs:[stderr]
下面是其中一个etcd的配置信息,其他节点的配置信息在部分位置有所改变
name:'etcd3'
data-dir:'/etcd/data'
wal-log:'/etcd/log'
snapshot-count:10000
heartbeat-interval:100
election-timeout:1000
listen-peer-urls:'http://192.168.198.68:2380'
listen-client-urls:'http://0.0.0.0:2379'
max-snapshots:5
max-wals:5
cors:
initial-advertise-peer-urls:'http://192.168.198.68:2380'
advertise-client-urls:'http://192.168.198.68:2379'
initial-cluster: 'etcd1=http://192.168.198.66:2380,etcd2=http://192.168.198.67:2380,etcd3=http://192.168.198.68:2380'
initial-cluster-token:'etcd'
initial-cluster-state:'new'
strict-reconfig-check:false
enable-v2:true
enable-pprof:true
debug:false
logger:zap
log-outputs:[stderr]
启动etcd
etcd--config-file/etc/etcd.conf>/etcd/etcd3.log2>&1&
依次启动三个机器,启动完毕后,我们可以查看端口2379、2380都已经启动
现在我们开始查看目前的集群的状态
etcdctl是etcd的客户端程序
etcdctl member list--write-out=table
可以看到所有的节点已经都在工作中
ETCDCTL_API=3 etcdctl endpoint status --write-out=table --endpoints=http://192.168.198.66:2379 
节点中信息写、读和清理

操作系统中的一些命令集合
HOST_1=192.168.198.66
HOST_2=192.168.198.67
HOST_3=192.168.198.68
ENDPOINTS=$HOST_1:2379,$HOST_2:2379,$HOST_3:2379
etcdctl --write-out=table --endpoints=$ENDPOINTS member list
HOST_2=192.168.198.67
HOST_3=192.168.198.68
ENDPOINTS=$HOST_1:2379,$HOST_2:2379,$HOST_3:2379
ETCDCTL_API=3 etcdctl endpoint status --write-out=table --endpoints=$ENDPOINTS

I Love PG

关于我们

PostgreSQLPG2017PostgreSQLPG非盈利行业协会组织。我们致力于在中国PostgreSQLPostgreSQL



欢迎投稿

做你的舞台,show出自己的才华 。

投稿邮箱:partner@postgresqlchina.com

                    

                    ——愿能安放你不羁的灵魂

往期回顾

 

活动成就

PostgresConf.CN & PGConf.Asia2020大会预告

PG ACE计划的正式发布

三期PostgreSQL国际线上沙龙活动的举办

六期PostgreSQL国内线上沙龙活动的举办

PGCM高级认证培训的正式开启

经典文章

PostgreSQL 13.0 正式版发布通告

深度报告:开源协议那些事儿

从“非主流”到“潮流”,开源早已值得拥有

Oracle中国正在进行新一轮裁员,传 N+6 补偿

PostgreSQL与MySQL版权比较

PostgreSQL与Oracle:成本、易用性和功能上的差异

使用ora2pg完成从Oracle到Postgres的迁移

精彩专辑

PostgreSQL活动篇

文章转载自开源软件联盟PostgreSQL分会,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论