尝试驯服etcd
Etcd
参考文档
基于 Raft协议的服务发现程序
安装
使用ubuntu22可以直接安装
1 |
|
你也可以单独安装部分模块
1 |
|
如果只使用单服务, 一台机器是server即可, 其他机器使用client进行通报
需要高可用集群, 每个机器都安装两个模块
安装完成后server会自动启用, 或者手动启动
1 |
|
其中, 端口 2379
用于服务器通信, 2380
用与伙伴通信
安装好后是单机模式, 可以使用client的指令查看当前集群都有哪些成员
1 |
|
配置
参考 https://etcd.io/docs/v3.5/op-guide/configuration/
配置文件向导参考文件 https://github.com/etcd-io/etcd/blob/main/etcd.conf.yml.sample
有多种方式进行配置, 参见参考文件 , 这里以配置文件进行设置
配置文件很可能没有创建, 你需要自己创建文件夹
/etc/etcd/config.yaml
并使用--config-file '...'
指定配置文件地址或者使用系统变量(优先级比配置参数低)ETCD_CONFIG_FILE ...
指定
由于是使用APT安装的etcd, 需要对配置文件进行修剪, 查询当前etcd的service配置目录
1 |
|
默认一般在该目录下, 删除掉 ( 你也可以根据自己的需求直接修改 )
1 |
|
创建新的, 并复制新的配置
1 |
|
注意, 这个配置文件一般没有创建, 需要先创建
1 |
|
然后使用新的配置文件
- 这是一个基本配置, 后续根据集群发现的方式不同会追加新的字段
1 |
|
然后刷新配置并启动
1 |
|
启动配置
上面介绍的配置会默认按照 single node
独立集群启动, 即一个etcd就是一个新集群
你可以使用以下字段对新集群进行控制
1 |
|
集群初始化&集群发现
假设现在我们有三条服务器需要组成一个etcd的可用 , 配置如下
1 |
|
那么首先需要一个 Leader , 也就是主机器, 主机器的配置就是上面的配置, 其中 stat: 'new'
需要注意, 添加集群时额外将他们的信息写在 inital-cluster
里
1 |
|
追加这三个字段到基础的配置参数中并启动集群
然后另外两台机器也使用这三个字段进行启动, 但是使用 initial-cluster-state: 'existing'
进行启动即可
还有另外一个集群的启动方式, 因为我们不总是知道这些个集群的IP地址, 或者当集群机器数量较多时一个一个写非常麻烦, 还支持一个 discoverURL
进行集群发现
他依赖一个已经启用的集群进行发现 , 本质上就是有一个集群提供一个特殊的API地址, 当有一个成员加入集群时, 成员向这个API注册自己的信息(包括交互IP地址和端口)等
这意味着任意一个新加入的集群成员都能通过这个API立即发现其他集群成员, 并根据获取到的地址进行health探测
注意
提供发现API的etcd集群节点不能加入这个被发现的集群中, 否则会出现clusterID mismatch的问题
现在假设我们有一台使用 inital模式启动的单机集群( 就是依据第一种方法启动, 但是集群中只有一个节点) , 并对外提供公网访问(总之其他机器能访问到就行)
你可以使用ETCD官方已经准备好的高可用集群生成一个discoverURL,然后他会返回一个discoverURL
操作如下
1 |
|
size
是预计的集群大小, 一般为 1 3 5 7 … 等奇数- 你的机器数量一定跟集群大小一样, 否则所有的机器会等待集群满员才会工作
然后API就已经创建好了, 填充配置
1 |
|
是的, 三个预计要组成集群的机器都使用这个字段, 且只需要追加这个字段到基本配置中
之后 短时间内同时启动三个机器 , 因为他们必须要等到集群满员才开始工作, 且有超时设置, 如果你三台机器启动的时间间隔过大会导致集群建立失败且无法再次使用这个uuid组建集群!
如果你的机器无法访问外网, 只能在内网进行操作,或者你想知道怎么自建一个discoverURL, 我们继续
首先你得有一个充当集群发现服务的 已运行集群 , 这里我们假设有一台Zero机器
1 |
|
对Zero集群进行操作
1 |
|
将这个集群uuid使用etcd的接口创建一个URL
1 |
|
- 实际上前导路径可以任意设置, 不一定按照我的(虽然他是官方推荐的标准) , 但是UUID及其后方的路径建议你保持一致
此时你的discoverURL就是
1 |
|
填充到 discovery
字段内即可
失败重建
如果你意外的失败了, 需要删除掉之前的数据文件才能以干净的etcd方式启动,当然,配置文件不需要动
1 |
|
即可
如果你是自建discoverURL遭遇失败,要么更换uuid,要么按照上面的方法干净启动这个服务集群
当然,直接删掉这个键也是可以的,但是似乎还是会有问题, 你可以试试
1 |
|