阿里云+腾讯云服务器:搭建ETCD分布式K-V数据库集群、常用命令及其配置文件深入解读


上上篇博客,我们已经使用了etcd数据库实现伪分布式,并没有做分布式。因此对配置文件解读还不够,再加上上上篇博客只学了个创建K-V,因为etcd的重要性不言而喻,所以我再单独为其写一篇博文。

一、etcd概念词一览

Raft:etcd所采用的保证分布式系统强一致性的算法。
Node:一个Raft状态机实例。
Member: 一个etcd实例。它管理着一个Node,并且可以为客户端请求提供服务。
Cluster:由多个Member构成可以协同工作的etcd集群。
Peer:对同一个etcd集群中另外一个Member的称呼。
Client: 向etcd集群发送HTTP请求的客户端。
WAL:预写式日志,etcd用于持久化存储的日志格式。
snapshot:etcd防止WAL文件过多而设置的快照,存储etcd数据状态。
Proxy:etcd的一种模式,为etcd集群提供反向代理服务。
Leader:Raft算法中通过竞选而产生的处理所有数据提交的节点。
Follower:竞选失败的节点作为Raft中的从属节点,为算法提供强一致性保证。
Candidate:当Follower超过一定时间接收不到Leader的心跳时转变为Candidate开始竞选。
Term:某个节点成为Leader到下一次竞选时间,称为一个Term。
Index:数据项编号。Raft中通过Term和Index来定位数据。

二、etcd数据库配置文件深入解读

cat /etc/etcd/etcd.conf

#[Member]  //本台etcd服务器自身的配置参数

//常用重要参数:
ETCD_NAME="etcd1" //定义本服务器在集群中的成员标示
ETCD_DATA_DIR="/data/etcd/" //定义etcd数据目录
#ETCD_WAL_DIR="" //独立设置wal目录,etcd会将WAL文件写入waldir而不是datadir。独立的wal路径,有助于避免日志记录和其他IO操作之间的竞争。
#ETCD_LISTEN_PEER_URLS="http://172.16.193.200:2380" //定义本台etcd服务器与集群中其他etcd服务通信的端口
ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379,http://172.16.193.200:2379" //定义本台etcd服务器的数据端口,监听本地是为了本地连接,承接命令带来的数据;监听真实ip,是为了接受集群其他服务器带来的数据。
#ETCD_MAX_SNAPSHOTS="5" //要保留的最大快照文件数(0表示不受限制)
#ETCD_MAX_WALS="5" //要保留的最大wal文件数(0表示不受限制)

//不常用参数
#ETCD_SNAPSHOT_COUNT="100000" //指定有多少事务(transaction)被提交时,触发截取快照保存到磁盘。
#ETCD_HEARTBEAT_INTERVAL="100" //leader 多久发送一次心跳到 followers
#ETCD_ELECTION_TIMEOUT="1000" //重新投票的超时时间,如果 follow 在该时间间隔没有收到心跳包,会触发重新投票,默认为 1000 ms。
#ETCD_CORS="" //逗号分隔的CORS原始白名单(跨源资源共享)
#ETCD_QUOTA_BACKEND_BYTES="0" //当后端大小超过给定配额时(0默认为低空间配额),引发警报。
#ETCD_MAX_REQUEST_BYTES="1572864" //服务器将接受的最大客户端请求大小(字节)
#ETCD_GRPC_KEEPALIVE_MIN_TIME="5s" //客户端在ping服务器之前应等待的最短持续时间间隔。
#ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s" //服务器到客户端ping的频率持续时间,以检查连接是否处于活动状态(0表示禁用)。
#ETCD_GRPC_KEEPALIVE_TIMEOUT="20s" //关闭非响应连接之前的额外持续等待时间(0表示禁用)。
------------------------------------------------------------------------
#[Clustering] //都是etcd集群的配置参数,不再是对某一台etcd服务器了!

//常用重要参数
#ETCD_INITIAL_ADVERTISE_PEER_URLS="172.16.193.200:2380" //这个参数可能大家会和ETCD_LISTEN_PEER_URLS这个参数搞混,LISTEN参数是本地监听这个真实ip的端口,在本地定义这个端口。此处的ADVERTISE参数则是把这个listen参数值告诉给集群中其他人,告诉了,别人才能来找你。所以一般来说这两个参数值都是一样的。
ETCD_ADVERTISE_CLIENT_URLS="http://127.0.0.1:2379,http://172.16.193.200:2379" //这个参数和ETCD_LISTEN_CLIENT_URLS这个参数容易搞混,还是定义和宣告的区别,和上面那一对参数一样的区别。
#ETCD_INITIAL_CLUSTER="etcd1=http://172.16.193.200:2380,etcd2=172.16.193.201:2380,etcd3=172.16.193.202:2380" //定义该etcd集群中的节点有哪些,并给出了集群通信端口,etcd1这是成员标示
#ETCD_INITIAL_CLUSTER_STATE="new" //设置new为初始静态或DNS引导期间出现的所有成员。如果将此选项设置为existing,则etcd将尝试加入现有群集。
#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" //创建集群的token,这个值每个集群保持唯一,集群标示。

//非常用参数
#ETCD_DISCOVERY="" //用于引导群集的发现URL。
#ETCD_DISCOVERY_FALLBACK="proxy" //发现服务失败时的预期行为(“退出”或“代理”)。“proxy”仅支持v2 API。
#ETCD_DISCOVERY_PROXY="" //用于流量到发现服务的HTTP代理。
#ETCD_DISCOVERY_SRV="" //DNS srv域用于引导群集。
#ETCD_STRICT_RECONFIG_CHECK="true" //拒绝可能导致仲裁丢失的重新配置请求。
#ETCD_ENABLE_V2="true" //接受etcd V2客户端请求

//模块参数,暂时还未用到,未来再更新!
#[Proxy]
#ETCD_PROXY="off"
#ETCD_PROXY_FAILURE_WAIT="5000"
#ETCD_PROXY_REFRESH_INTERVAL="30000"
#ETCD_PROXY_DIAL_TIMEOUT="1000"
#ETCD_PROXY_WRITE_TIMEOUT="5000"
#ETCD_PROXY_READ_TIMEOUT="0"
#
#[Security]
#ETCD_CERT_FILE=""
#ETCD_KEY_FILE=""
#ETCD_CLIENT_CERT_AUTH="false"
#ETCD_TRUSTED_CA_FILE=""
#ETCD_AUTO_TLS="false"
#ETCD_PEER_CERT_FILE=""
#ETCD_PEER_KEY_FILE=""
#ETCD_PEER_CLIENT_CERT_AUTH="false"
#ETCD_PEER_TRUSTED_CA_FILE=""
#ETCD_PEER_AUTO_TLS="false"
#
#[Logging]
#ETCD_DEBUG="false"
#ETCD_LOG_PACKAGE_LEVELS=""
#ETCD_LOG_OUTPUT="default"
#
#[Unsafe]
#ETCD_FORCE_NEW_CLUSTER="false"
#
#[Version]
#ETCD_VERSION="false"
#ETCD_AUTO_COMPACTION_RETENTION="0"
#
#[Profiling]
#ETCD_ENABLE_PPROF="false"
#ETCD_METRICS="basic"
#
#[Auth]
#ETCD_AUTH_TOKEN="simple"

三、etcd分布式数据库常用命令

大家都晓得etcd数据库是K-V(键值对)数据库,然后大家都晓得linux操作系统是根目录然后一级级的可以创建目录,还可以创建文件。我们的etcd融合了linux操作系统这个特点。可以创建目录,目录里面可以创建键值对

1、etcdctl命令
#对目录的操作
etcdctl ls / #查看目录
etcdctl mkdir /huahua #创建目录
etcdctl rmdir /huahua #删除目录

#对K-V的操作
etcdctl mk /huahua/haha '希望你能开心' #创建键值对
etcdctl get /huahua/haha #查看键的值
etcdctl rm /huahua/haha #删除键值对

#查看扩展操作
etcdctl get /huahua/ --prefix #批量获取目录下的内容
etcdctl get /huahua/ --prefix --keys-only #只看key
etcdctl get /huahua/ --prefix --print-value-only #只看value

#watch监听key
etcdctl watch /huahua/haha 开启监听
另一启动一个客户端
etcdctl mk /huahua/haha v1 有反应
etcdctl mk /huahua/haha v2 有反应
etcdctl get /huahua/haha 没反应
etcdctl rm /huahua/haha 有反应

#k8s中常用命令
etcdctl cluster-health #查看集群健康状况
etcdctl member list #查看集群中有哪些成员
etcdctl member add http://172.16.193.200:2379 #添加一个成员到该etcd集群
etcdctl member remove http://172.16.193.200:2379 #从集群中删除一个成员

#除此之外etcdctl -user加role参数还可以实现创建用户,并赋予其一个角色进行访问控制
2、etcd命令

注:etcd命令完全就是拿来在线增添、修改etcd的配置文件的。不用再vim编辑etcd修改配置。

etcd --help

四、etcd分布式集群搭建

实验环境:
阿里云服务器 公网IP:39.97.176.117 内网IP:172.17.77.241
腾讯云服务器 公网IP:106.54.72.122 内网IP:172.17.0.16

1、下载
yum install etcd -y
2、更改etcd配置文件
vim /etc/etcd/etcd.conf

阿里云(etcd1)配置如下:
在这里插入图片描述
腾讯云(etcd2)配置如下:
在这里插入图片描述注:可能很多人想问为什么listen的参数都是监听的内网网卡,不监听公网网卡呢?
首先我们看下自己的网卡:
在这里插入图片描述我们可以看到根本没有公网网卡!所以我们不能监听公网网卡的相应端口!我们只能本着监听内网网卡相应端口,advertise宣告公网网卡相应端口的方法

3、创建数据目录
mkdir /data/etcd
chown etcd.etcd /data/etcd

最后启动两个etcd即可!先启动的为leader(etcd集群对外访问服务器)
在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凤求凰的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值