大纲
Etcd是一个强一致的分布式键值存储,它提供了一种可靠的方式来存储分布式系统或机器集群需要访问的数据
以下所有测试使用etcd版本为v3.5.0
下载地址 https://github.com/etcd-io/etcd/releases/tag/v3.5.0
etcdv3.5.0 安装包已上传到百度云盘 /常用软件/etcd
安装步骤很简单 解压后把解压目录配置到环境变量即可
tar -zxvf etcd-v3.5.0-linux-amd64.tar.gz
export PATH=/ops/etcd/etcd-v3.5.0-linux-amd64:$PATH
etcd -version
不带参数启动
直接执行 etcd 不带任何参数会自动启动到2379端口
带参数启动
etcd --data-dir=/ops/etcd/etcd-v3.5.0-linux-amd64/data --listen-client-urls="http://0.0.0.0:2479" --advertise-client-urls="http://0.0.0.0:2479"
--data-dir=#指定数据文件夹
--listen-client-urls= #暴露端口
--advertise-client-urls= #用于通知其他ETCD节点,客户端接入本节点的监听地址
后台启动
nohup etcd -listen-client-urls="http://0.0.0.0:2379" --advertise-client-urls="http://0.0.0.0:2379" &
指定配置文件启动
./etcd --config-file=/ops/etcd/etcd-v3.5.0-linux-amd64/simple.yaml
静态配置时候etcd集群中各个节点(member)都能明确知道对方,例如(明确知道节点个数,集群中各个节点地址已知)
静态配置注意点
相关配置项目说明
实例
192.168.0.160 etcd-node1 节点配置
--name=etcd-node1
--initial-advertise-peer-urls=http://192.168.0.160:2480
--listen-peer-urls=http://192.168.0.160:2480
--listen-client-urls=http://192.168.0.160:2479
--advertise-client-urls=http://192.168.0.160:2479
--initial-cluster-token=my-etcd-cluster
--initial-cluster=etcd-node1=http://192.168.0.160:2480,etcd-node2=http://192.168.0.124:2480,etcd-node3=http://192.168.0.54:2480
--initial-cluster-state=new
执行启动命令
./etcd --name=etcd-node1 --initial-advertise-peer-urls=http://192.168.0.160:2480 --listen-peer-urls=http://192.168.0.160:2480 --listen-client-urls=http://192.168.0.160:2479 --advertise-client-urls=http://192.168.0.160:2479 --initial-cluster-token=my-etcd-cluster --initial-cluster-state=new --initial-cluster=etcd-node1=http://192.168.0.160:2480,etcd-node2=http://192.168.0.124:2480,etcd-node3=http://192.168.0.54:2480
192.168.0.124 etcd-node2 节点配置
--name=etcd-node2
--initial-advertise-peer-urls=http://192.168.0.124:2480
--listen-peer-urls=http://192.168.0.124:2480
--listen-client-urls=http://192.168.0.124:2479
--advertise-client-urls=http://192.168.0.124:2479
--initial-cluster-token=my-etcd-cluster
--initial-cluster=etcd-node1=http://192.168.0.160:2480,etcd-node2=http://192.168.0.124:2480,etcd-node3=http://192.168.0.54:2480
--initial-cluster-state=new
执行启动命令
./etcd --name=etcd-node2 --initial-advertise-peer-urls=http://192.168.0.124:2480 --listen-peer-urls=http://192.168.0.124:2480 --listen-client-urls=http://192.168.0.124:2479 --advertise-client-urls=http://192.168.0.124:2479 --initial-cluster-token=my-etcd-cluster --initial-cluster-state=new --initial-cluster=etcd-node1=http://192.168.0.160:2480,etcd-node2=http://192.168.0.124:2480,etcd-node3=http://192.168.0.54:2480
192.168.0.54 etcd-node3 节点配置
--name=etcd-node3
--initial-advertise-peer-urls=http://192.168.0.54:2480
--listen-peer-urls=http://192.168.0.54:2480
--listen-client-urls=http://192.168.0.54:2479
--advertise-client-urls=http://192.168.0.54:2479
--initial-cluster-token=my-etcd-cluster
--initial-cluster=etcd-node1=http://192.168.0.160:2480,etcd-node2=http://192.168.0.124:2480,etcd-node3=http://192.168.0.54:2480
--initial-cluster-state=new
执行启动命令
./etcd --name=etcd-node3 --initial-advertise-peer-urls=http://192.168.0.54:2480 --listen-peer-urls=http://192.168.0.54:2480 --listen-client-urls=http://192.168.0.54:2479 --advertise-client-urls=http://192.168.0.54:2479 --initial-cluster-token=my-etcd-cluster --initial-cluster-state=new --initial-cluster=etcd-node1=http://192.168.0.160:2480,etcd-node2=http://192.168.0.124:2480,etcd-node3=http://192.168.0.54:2480
静态方式配置的集群启动完成
使用 ./etcdctl member list -w table --endpoints=192.168.0.124:2479 查看集群成员
member list -w (–write-out的简写) 选项可以指定输出格式
member list -w
member list --write-out
支持格式 json fields simple(默认) table
在很多场景下,我们无法预知集群中各个成员的地址,例如K8s环境等,需要集群成员自主发现并加入集群
服务自主发现有两种模式
etcd 发现模式的原理就是利用一个已经存在的etcd(单机或集群)作为注册中心,把需要集群的节点信息注册到这个etcd中
实例
在192.168.0.210启动一个etcd 注意–enable-v2=true 开启支持v2版本的api接口
./etcd --listen-client-urls="http://0.0.0.0:2479" --advertise-client-urls="http://0.0.0.0:2479" --enable-v2=true
分别在192.168.0.160 , 192.168.0.124 ,192.168.0.54 三台机器上配置host映射 (也可不配置后面直接使用ip)
vi /etc/hosts
加入
192.168.0.210 liuyijiang-dev3.com
在192.168.0.210这台etcd上创建一个key 用于注册发现
例如有三台机器需要集群
curl -X PUT http://liuyijiang-dev3.com:2479/v2/keys/registry/lyj_ectd_cluster/_config/size -d value=3
注意 key /registry/lyj_ectd_cluster可以任意配置 只要是一个合法的key路径即可,value=3表示三台机器集群
集群结构如下
这样 http://liuyijiang-dev3.com:2479/v2/keys/registry/lyj_ectd_cluster 这个地址将用于注册发现
192.168.0.160 etcd-node1 节点配置
--name=etcd-node1
--initial-advertise-peer-urls=http://192.168.0.160:2480
--listen-peer-urls=http://192.168.0.160:2480
--listen-client-urls=http://192.168.0.160:2479
--advertise-client-urls=http://192.168.0.160:2479
--discovery http://liuyijiang-dev3.com:2479/v2/keys/registry/lyj_ectd_cluster
执行启动命令
./etcd --name=etcd-node1 --initial-advertise-peer-urls=http://192.168.0.160:2480 --listen-peer-urls=http://192.168.0.160:2480 --listen-client-urls=http://192.168.0.160:2479 --advertise-client-urls=http://192.168.0.160:2479 --discovery http://liuyijiang-dev3.com:2479/v2/keys/registry/lyj_ectd_cluster
192.168.0.124 etcd-node2 节点配置
--name=etcd-node2
--initial-advertise-peer-urls=http://192.168.0.124:2480
--listen-peer-urls=http://192.168.0.124:2480
--listen-client-urls=http://192.168.0.124:2479
--advertise-client-urls=http://192.168.0.124:2479
--discovery http://liuyijiang-dev3.com:2479/v2/keys/registry/lyj_ectd_cluster
执行启动命令
./etcd --name=etcd-node2 --initial-advertise-peer-urls=http://192.168.0.124:2480 --listen-peer-urls=http://192.168.0.124:2480 --listen-client-urls=http://192.168.0.124:2479 --advertise-client-urls=http://192.168.0.124:2479 --discovery http://liuyijiang-dev3.com:2479/v2/keys/registry/lyj_ectd_cluster
192.168.0.54 etcd-node3 节点配置
--name=etcd-node3
--initial-advertise-peer-urls=http://192.168.0.54:2480
--listen-peer-urls=http://192.168.0.54:2480
--listen-client-urls=http://192.168.0.54:2479
--advertise-client-urls=http://192.168.0.54:2479
--discovery http://liuyijiang-dev3.com:2479/v2/keys/registry/lyj_ectd_cluster
执行启动命令
./etcd --name=etcd-node3 --initial-advertise-peer-urls=http://192.168.0.54:2480 --listen-peer-urls=http://192.168.0.54:2480 --listen-client-urls=http://192.168.0.54:2479 --advertise-client-urls=http://192.168.0.54:2479 --discovery http://liuyijiang-dev3.com:2479/v2/keys/registry/lyj_ectd_cluster
完成3节点集群
DNS 发现模式主要是利用DNS配置SRV记录实现发现etcd服务器地址
DNS SRV 是 DNS 记录中一种,用来查询指定服务的地址。与常见的A记录、CNAME 不同的是,SRV中除了记录服务器的地址,还记录了服务的端口,并且可以设置每个服务地址的优先级和权重
SRV的配置格式如下
_Service._Proto.Name TTL Class SRV Priority Weight Port Target
字段说明
Service: 服务名称,前缀“_”是为防止与DNS Label(普通域名)冲突。
Proto: 服务使用的通信协议,_TCP、_UDP、其它标准协议或者自定义的协议。
Name: 提供服务的域名。
TTL: 缓存有效时间。
CLASS: 类别
Priority: 该记录的优先级,数值越小表示优先级越高,范围0-65535。
Weight: 该记录的权重,数值越高权重越高,范围0-65535。
Port: 服务端口号,0-65535。
Target: host 地址。
Etcd 使用DNS发现的方式 Service服务名称必须是 _etcd-server
集群结构如下
DNS服务器使用 coreDNS coreDNS的使用参考《k8s kubernetes 核心组件 CoreDNS 域名解析服务 学习总结》
测试使用liuyijiang.com 这个域名作为DNS发现域名,DNS服务器安装在192.168.0.206
db.liuyijiang.com 配置如下
@ 1800 IN SOA ns.liuyijiang.com. 755688196.qq.com. (
1121 ; serial number
1h ; refresh interval
10m ; retry interval
3w ; expiry period
1h ; negative TTL
)
_etcd-server._tcp 300 IN SRV 0 0 2480 etcd-node1.liuyijiang.com.
_etcd-server._tcp 300 IN SRV 0 0 2480 etcd-node2.liuyijiang.com.
_etcd-server._tcp 300 IN SRV 0 0 2480 etcd-node3.liuyijiang.com.
etcd-node1 1800 IN A 192.168.0.160
etcd-node2 1800 IN A 192.168.0.124
etcd-node3 1800 IN A 192.168.0.54
注意:SRV记录中Service服务名称必须是_etcd-server
Corefile 配置如下
liuyijiang.com {
root /root/coreDNS
file db.liuyijiang.com
}
. {
health :8199
ready :8289
prometheus :8389
forward . 114.114.114.114
cache 30
errors
log
}
./coredns 启动DNS服务 会读取当前文件夹下的Corefile配置文件
分别修改 192.168.0.160 192.168.0.124 192.168.0.54 三台机器的DNS服务器地址
vi /etc/resolv.conf
将 nameserver 改为 192.168.0.206
dig +noall +answer SRV _etcd-server._tcp.liuyijiang.com
nslookup etcd-node1.liuyijiang.com
nslookup etcd-node2.liuyijiang.com
nslookup etcd-node3.liuyijiang.com
已经可以解析到信息
192.168.0.160 etcd-node1 节点配置
cluster-dns-node1.yaml 内容如下
name: etcd-node1
initial-advertise-peer-urls: http://192.168.0.160:2480
listen-peer-urls: http://192.168.0.160:2480
listen-client-urls: http://192.168.0.160:2479
advertise-client-urls: http://192.168.0.160:2479
initial-cluster-token: my-etcd-cluster
initial-cluster-state: new
discovery-srv: liuyijiang.com
执行启动命令
./etcd --config-file cluster-dns-node1.yaml
192.168.0.124 etcd-node2 节点配置
cluster-dns-node2.yaml 内容如下
name: etcd-node2
initial-advertise-peer-urls: http://192.168.0.124:2480
listen-peer-urls: http://192.168.0.124:2480
listen-client-urls: http://192.168.0.124:2479
advertise-client-urls: http://192.168.0.124:2479
initial-cluster-token: my-etcd-cluster
initial-cluster-state: new
discovery-srv: liuyijiang.com
执行启动命令
./etcd --config-file cluster-dns-node2.yaml
192.168.0.54 etcd-node3 节点配置
cluster-dns-node3.yaml 内容如下
name: etcd-node3
initial-advertise-peer-urls: http://192.168.0.54:2480
listen-peer-urls: http://192.168.0.54:2480
listen-client-urls: http://192.168.0.54:2479
advertise-client-urls: http://192.168.0.54:2479
initial-cluster-token: my-etcd-cluster
initial-cluster-state: new
discovery-srv: liuyijiang.com
执行启动命令
./etcd --config-file cluster-dns-node3.yaml
使用 ./etcdctl member list -w table --endpoints=192.168.0.160:2479 查看集群成员
镜像地址 https://hub.docker.com/r/bitnami/etcd 选择tags etcd3.5.0
tags etcd3.5.0
https://hub.docker.com/layers/bitnami/etcd/3.5.0/images/sha256-25e92046bb3226211875fe89ca7e2689ffba991eba4eddb9d73dd7756b5c30c5?context=explore
测试使用配置文件启动镜像
配置文件etcd.conf.yml 内容如下
name: simple-node
data-dir: /opt/bitnami/data //注意此镜像可以操作/opt/bitnami文件夹
wal-dir: /opt/bitnami/wallog
listen-client-urls: http://0.0.0.0:2579
advertise-client-urls: http://0.0.0.0:2579
etcd.conf.yml 放置在主机 /ops/docker/etcd 文件夹下
docker run -p 2579:2579 -v /ops/docker/etcd:/opt/bitnami/etcd/conf bitnami/etcd:3.5.0 etcd --config-file /opt/bitnami/etcd/conf/etcd.conf.yml
部署文件 single-deploy.yaml 内容如下
apiVersion: apps/v1
kind: Deployment
metadata:
name: etcd-single-deployment
spec:
replicas: 1
selector:
matchLabels:
app: etcd-single
template:
metadata:
labels:
app: etcd-single
spec:
#hostNetwork: true
hostname: etcd-single-host
subdomain: etcd-single-domain
containers:
- name: etcd-single-run #容器名称(自定义)
image: bitnami/etcd:3.5.0
imagePullPolicy: Always
ports:
- containerPort: 2579
protocol: TCP
name: http
command:
- etcd
- --name=simple-node
- --data-dir=/opt/bitnami/data
- --wal-dir=/opt/bitnami/wallog
- --listen-client-urls=http://0.0.0.0:2579
- --advertise-client-urls=http://0.0.0.0:2579
- --enable-v2=true
---
apiVersion: v1
kind: Service
metadata:
name: etcd-single-service
spec:
selector:
app: etcd-single
type: NodePort
ports:
- port: 2579
targetPort: 2579
nodePort: 12579
找一个客户端实验一下
集群版使用Etcd集群静态配置,使用hostname + subdomain 创建每个etcd pod的域名访问 ,如果对数据有持久化需求 还需要将pod的数据文件夹与主机挂载
可参考 《k8s-Pod域名学习总结》
集群配置文件如下 cluster-deploy.yaml
#节点1 部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: etcd-node1-deployment
spec:
replicas: 1
selector:
matchLabels:
app: etc-node1
template:
metadata:
labels:
app: etc-node1
spec:
hostname: etc-k8s-node1-host
subdomain: etc-k8s-node1-domain
containers:
- name: etc-k8s-node1-run
image: bitnami/etcd:3.5.0
imagePullPolicy: Always
ports:
- containerPort: 2579
protocol: TCP
name: http
command:
- etcd
- --name=etc-k8s-node-1
- --data-dir=/opt/bitnami/data
- --wal-dir=/opt/bitnami/wallog
- --listen-client-urls=http://0.0.0.0:2579
- --advertise-client-urls=http://0.0.0.0:2579
- --initial-advertise-peer-urls=http://etc-k8s-node1-host.etc-k8s-node1-domain.default.svc.cluster.local:2480
- --listen-peer-urls=http://0.0.0.0:2480
- --enable-v2=true
- --initial-cluster-token=my-k8s-etcd-cluster
- --initial-cluster=etc-k8s-node-1=http://etc-k8s-node1-host.etc-k8s-node1-domain.default.svc.cluster.local:2480,etc-k8s-node-2=http://etc-k8s-node2-host.etc-k8s-node2-domain.default.svc.cluster.local:2480,etc-k8s-node-3=http://etc-k8s-node3-host.etc-k8s-node3-domain.default.svc.cluster.local:2480
- --initial-cluster-state=new
---
#配置一个headless service
apiVersion: v1
kind: Service
metadata:
name: etc-k8s-node1-domain # 注意name为 pod中 subdomain 的名称
spec:
selector:
app: etc-node1
clusterIP: None #注意 clusterIP 为None
---
apiVersion: v1
kind: Service
metadata:
name: etc-node1-service
spec:
selector:
app: etc-node1
type: NodePort
ports:
- port: 2579
targetPort: 2579
nodePort: 12579
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: etcd-node2-deployment
spec:
replicas: 1
selector:
matchLabels:
app: etc-node2
template:
metadata:
labels:
app: etc-node2
spec:
hostname: etc-k8s-node2-host
subdomain: etc-k8s-node2-domain
containers:
- name: etc-k8s-node2-run
image: bitnami/etcd:3.5.0
imagePullPolicy: Always
ports:
- containerPort: 2579
protocol: TCP
name: http
command:
- etcd
- --name=etc-k8s-node-2
- --data-dir=/opt/bitnami/data
- --wal-dir=/opt/bitnami/wallog
- --listen-client-urls=http://0.0.0.0:2579
- --advertise-client-urls=http://0.0.0.0:2579
- --initial-advertise-peer-urls=http://etc-k8s-node2-host.etc-k8s-node2-domain.default.svc.cluster.local:2480
- --listen-peer-urls=http://0.0.0.0:2480
- --enable-v2=true
- --initial-cluster-token=my-k8s-etcd-cluster
- --initial-cluster=etc-k8s-node-1=http://etc-k8s-node1-host.etc-k8s-node1-domain.default.svc.cluster.local:2480,etc-k8s-node-2=http://etc-k8s-node2-host.etc-k8s-node2-domain.default.svc.cluster.local:2480,etc-k8s-node-3=http://etc-k8s-node3-host.etc-k8s-node3-domain.default.svc.cluster.local:2480
- --initial-cluster-state=new
---
apiVersion: v1
kind: Service
metadata:
name: etc-k8s-node2-domain
spec:
selector:
app: etc-node2
clusterIP: None
---
apiVersion: v1
kind: Service
metadata:
name: etc-node2-service
spec:
selector:
app: etc-node2
type: NodePort
ports:
- port: 2579
targetPort: 2579
nodePort: 22579
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: etcd-node3-deployment
spec:
replicas: 1
selector:
matchLabels:
app: etc-node3
template:
metadata:
labels:
app: etc-node3
spec:
hostname: etc-k8s-node3-host
subdomain: etc-k8s-node3-domain
containers:
- name: etc-k8s-node3-run
image: bitnami/etcd:3.5.0
imagePullPolicy: Always
ports:
- containerPort: 2579
protocol: TCP
name: http
command:
- etcd
- --name=etc-k8s-node-3
- --data-dir=/opt/bitnami/data
- --wal-dir=/opt/bitnami/wallog
- --listen-client-urls=http://0.0.0.0:2579
- --advertise-client-urls=http://0.0.0.0:2579
- --initial-advertise-peer-urls=http://etc-k8s-node3-host.etc-k8s-node3-domain.default.svc.cluster.local:2480
- --listen-peer-urls=http://0.0.0.0:2480
- --enable-v2=true
- --initial-cluster-token=my-k8s-etcd-cluster
- --initial-cluster=etc-k8s-node-1=http://etc-k8s-node1-host.etc-k8s-node1-domain.default.svc.cluster.local:2480,etc-k8s-node-2=http://etc-k8s-node2-host.etc-k8s-node2-domain.default.svc.cluster.local:2480,etc-k8s-node-3=http://etc-k8s-node3-host.etc-k8s-node3-domain.default.svc.cluster.local:2480
- --initial-cluster-state=new
---
apiVersion: v1
kind: Service
metadata:
name: etc-k8s-node3-domain
spec:
selector:
app: etc-node3
clusterIP: None
---
apiVersion: v1
kind: Service
metadata:
name: etc-node3-service
spec:
selector:
app: etc-node3
type: NodePort
ports:
- port: 2579
targetPort: 2579
nodePort: 32579
部署集群完成
找一个客户端实验一下
使用 etcd --help可以查看所有的配置选择
–name
节点名称
default: “default”
env variable: ETCD_NAME
这个值和–initial-cluster (例如 default=http://localhost:2380)中的key值一一对应,如果在集群环境中,name必须是唯一的,建议用主机名称或者机器ID。
–data-dir
数据存储目录
default: “${name}.etcd”
env variable: ETCD_DATA_DIR
–wal-dir
default: “”
env variable: ETCD_WAL_DIR
存放预写式日志,最大的作用是记录了整个数据变化的全部历程。未设置,共用–data-dir文件所在目录。可以配置路径为专用磁盘,有助于避免日志记录和其他io操作之间的io竞争
–snapshot-count
default: “100000”
env variable: ETCD_SNAPSHOT_COUNT
数据快照触发数量,etcd处理指定的次数的事务提交后,生成数据快照
–heartbeat-interval
default: “100”
env variable: ETCD_HEARTBEAT_INTERVAL
Leader心跳间隔(毫秒)
–election-timeout
default: “1000”
env variable: ETCD_ELECTION_TIMEOUT
集群选举的超时时间
–listen-peer-urls
default: “http://localhost:2380”
env variable: ETCD_LISTEN_PEER_URLS
example: “http://10.0.0.1:2380”
invalid example: “http://example.com:2380” (domain name is invalid for binding)
集群节点之间通信监听的URL 本节点与其他节点进行数据交换(选举,数据同步)的监听地址,地址写法是 scheme://IP:port,可以多个并用逗号隔开,如果配置是http://0.0.0.0:2380,将不限制node访问地址
–listen-client-urls
default: “http://localhost:2379”
env variable: ETCD_LISTEN_CLIENT_URLS
example: “http://10.0.0.1:2379”
invalid example: “http://example.com:2379” (domain name is invalid for binding)
本节点访问地址,监听客户端请。地址写法是 scheme://IP:port,可以多个并用逗号隔开,如果配置是http://0.0.0.0:2379,将不限制node访问地址 (配置此地址用于客户端访问,修改端口号等)
–max-snapshots
default: 5
env variable: ETCD_MAX_SNAPSHOTS
要保留的快照文件的最大数量,0是无限制。Windows用户的默认值是无限制的,建议设置5以下的值。
–max-wals
default: 5
env variable: ETCD_MAX_WALS
要保留的wal文件的最大数量,0是无限制。Windows用户的默认值是无限制的,建议设置5以下的值。
–cors
default: “”
env variable: ETCD_CORS
逗号分隔的跨域资源共享白名单Comma-separated white list of origins for CORS (cross-origin resource sharing).
–quota-backend-bytes
default: 0
env variable: ETCD_QUOTA_BACKEND_BYTES
当后端大小超过给定的配额时发出报警
如果键空间的任何成员的后端数据库超过了空间配额, etcd 发起集群范围的警告,让集群进入维护模式,仅接收键的读取和删除。在键空间释放足够的空间之后,警告可以被解除,而集群将恢复正常运作。
–backend-batch-limit
default: 0
env variable: ETCD_BACKEND_BATCH_LIMIT
提交后端实物之前的最大操作
–backend-batch-interval
default: 0
env variable: ETCD_BACKEND_BATCH_INTERVAL
提交后端事物之前的最长时间
–max-txn-ops
default: 128
env variable: ETCD_MAX_TXN_OPS
事物中允许的最大操作数
–max-request-bytes
default: 1572864
env variable: ETCD_MAX_REQUEST_BYTES
服务器可以接受的客户端请求大小
–grpc-keepalive-min-time
default: 5s
env variable: ETCD_GRPC_KEEPALIVE_MIN_TIME
客户端在ping服务器之前最少要等待多久
–grpc-keepalive-interval
default: 2h
env variable: ETCD_GRPC_KEEPALIVE_INTERVAL
服务器ping客户端的频率,检查连接是否处于活动状态(0表示禁用)
–grpc-keepalive-timeout
default: 20s
env variable: ETCD_GRPC_KEEPALIVE_TIMEOUT
关闭非响应连接之前额外等待时间(0表示禁用)
–initial-advertise-peer-urls
default: “http://localhost:2380”
env variable: ETCD_INITIAL_ADVERTISE_PEER_URLS
example: “http://example.com:2380, http://10.0.0.1:2380”
通知其他节点(member)与本节点进行数据交换(选举,同步)的地址,URL可以使用domain地址。
与–listener-peer-urls不同在于listener-peer-urls用于请求客户端的接入控制,initial-advertise-peer-urls是告知其他集群节点访问哪个URL,需要和–initial-cluster
–initial-cluster
default: “default=http://localhost:2380”
env variable: ETCD_INITIAL_CLUSTER
用于引导初始集群配置,集群中所有节点的信息。此处default为节点的–name指定的名字;localhost:2380为–initial-advertise-peer-urls指定的值。
–initial-cluster-state
default: “new”
env variable: ETCD_INITIAL_CLUSTER_STATE
初始集群状态,设置new为初始静态或DNS引导期间出现的所有成员。如果将此选项设置为existing,则etcd将尝试加入现有群集。
–initial-cluster-token
default: “etcd-cluster”
env variable: ETCD_INITIAL_CLUSTER_TOKEN
集群唯一标识,相同标识的节点将视为在一个集群内
–advertise-client-urls
default: “http://localhost:2379”
env variable: ETCD_ADVERTISE_CLIENT_URLS
example: “http://example.com:2379, http://10.0.0.1:2379”
用于通知其他ETCD节点,客户端接入本节点的监听地址,一般来说advertise-client-urls是listen-client-urls子集,这些URL可以包含域名。
注意,不能写http://localhost:237,这样就是通知其他节点,可以用localhost访问,将导致ectd的客户端用localhost访问本地,导致访问不通。如果ectd布置了代理层,代理层将一直通过locahost访问自己的代理接口,导致无限循环。
–discovery
default: none
env variable: ETCD_DISCOVERY_SRV
集群发现服务地址
此地址是一个etcd中的key 查询地址
–discovery-srv
default: “”
env variable: ETCD_DISCOVERY_SRV
用于引导集群的DNS sry域
参考DNS集群方式 例如liuyijiang.com 真实访问地址为 _etcd-server._tcp.liuyijiang.com
–discovery-srv-name
使用DNS引导时查询的DNS srv名称的后缀
default: “”
env variable: ETCD_DISCOVERY_SRV_NAME
例子_etcd-server【–discovery-srv-name】._tcp
–discovery-fallback
发现服务失败时的预期行为(“退出”或“代理”)。“proxy”仅支持v2 API
default: “proxy”
env variable: ETCD_DISCOVERY_FALLBACK
–discovery-proxy
用于流量到发现服务的HTTP代理
default: “”
env variable: ETCD_DISCOVERY_PROXY
–strict-reconfig-check
default: true
env variable: ETCD_STRICT_RECONFIG_CHECK
拒绝可能导致仲裁丢失的重新配置请求。
–auto-compaction-retention
default: 0
env variable: ETCD_AUTO_COMPACTION_RETENTION
在一个小时内为mvcc键值存储的自动压实保留。0表示禁用自动压缩
–auto-compaction-mode
default: periodic
env variable: ETCD_AUTO_COMPACTION_MODE
配置的基于时间保留的三种模式:periodic, revision. periodic
–enable-v2
接受etcd V2客户端请求
default: true
env variable: ETCD_ENABLE_V2
–proxy配置etcd以在代理模式下运行,“proxy”仅支持v2 API。
–proxy
代理模式设置,(“off”, “readonly” or “on”)
default: “off”
env variable: ETCD_PROXY
–proxy-failure-wait
在重新考虑代理请求之前,endpoints 将处于失败状态的时间(以毫秒为单位)
default: 5000
env variable: ETCD_PROXY_FAILURE_WAIT
–proxy-refresh-interval
endpoints 刷新间隔的时间(以毫秒为单位)
default: 30000
env variable: ETCD_PROXY_REFRESH_INTERVAL
–proxy-dial-timeout
拨号超时的时间(以毫秒为单位)或0表示禁用超时
default: 1000
env variable: ETCD_PROXY_DIAL_TIMEOUT
–proxy-write-timeout
写入超时的时间(以毫秒为单位)或0以禁用超时
default: 5000
env variable: ETCD_PROXY_WRITE_TIMEOUT
–proxy-read-timeout
读取超时的时间(以毫秒为单位)或0以禁用超时。
如果使用watch,不要改变这个值,因为使用长轮询请求
default: 0
env variable: ETCD_PROXY_READ_TIMEOUT
–cert-file
客户端服务器TLS证书文件的路径。
default: “”
env variable: ETCD_CERT_FILE
–key-file
客户端服务器TLS密钥文件的路径
default: “”
env variable: ETCD_KEY_FILE
–client-cert-auth
启用客户端证书验证。
default: false
env variable: ETCD_CLIENT_CERT_AUTH
grpc-gateway不支持CN身份验证
–client-crl-file
客户端证书吊销列表文件的路径
default: “”
env variable: ETCD_CLIENT_CRL_FILE
–trusted-ca-file
客户端服务器的路径TLS可信CA证书文件
default: “”
env variable: ETCD_TRUSTED_CA_FILE
–auto-tls
客户端TLS使用生成的证书
default: false
env variable: ETCD_AUTO_TLS
–peer-cert-file
对等服务器TLS证书文件的路径。这是对等流量的证书,用于服务器和客户端。
default: “”
env variable: ETCD_PEER_CERT_FILE
–peer-key-file
对等服务器TLS密钥文件的路径。这是对等流量的关键,用于服务器和客户端。
default: “”
env variable: ETCD_PEER_KEY_FILE
–peer-client-cert-auth
启用对等客户端证书验证
default: false
env variable: ETCD_PEER_CLIENT_CERT_AUTH
–peer-crl-file
对等证书吊销列表文件的路径。
default: “”
env variable: ETCD_PEER_CRL_FILE
–peer-trusted-ca-file
对等服务器TLS可信CA文件的路径
default: “”
env variable: ETCD_PEER_TRUSTED_CA_FILE
–peer-auto-tls
Peer TLS使用自动生成的证书
default: false
env variable: ETCD_PEER_AUTO_TLS
–peer-cert-allowed-cn
允许CommonName进行对等体认证
default: none
env variable: ETCD_PEER_CERT_ALLOWED_CN