搭建etcd集群

etcd

  • 共享配置
  • 服务注册和发现

单机启动

  • 直接 ./etcd

集群搭建

物理机搭建
  • 我这里是用两台windows和一台mac 😂
  • 到github下载对应的二进制文件 https://github.com/etcd-io/etcd/releases
  • windows脚本启动
set TOKEN=token
set CLUSTER_STATE=new
set NAME_1=machine-1
set NAME_2=machine-2
set NAME_3=machine-3
set HOST_1=192.168.0.3
set HOST_2=192.168.0.14
set HOST_3=192.168.0.8
set CLUSTER=%NAME_1%=http://%HOST_1%:2380,%NAME_2%=http://%HOST_2%:2380,%NAME_3%=http://%HOST_3%:2380


set THIS_NAME=%NAME_2%
set THIS_IP=%HOST_2%
etcd.exe --data-dir=data.etcd --name %THIS_NAME% --initial-advertise-peer-urls http://%THIS_IP%:2380 --listen-peer-urls http://%THIS_IP%:2380 --advertise-client-urls http://%THIS_IP%:2379 --listen-client-urls http://%THIS_IP%:2379 --initial-cluster %CLUSTER% --initial-cluster-state %CLUSTER_STATE% --initial-cluster-token %TOKEN%

  • mac/linux 脚本启动
#!/bin/bash

TOKEN=token
CLUSTER_STATE=new
NAME_1=machine-1
NAME_2=machine-2
NAME_3=machine-3
HOST_1=192.168.0.3 # mac的ip 
HOST_2=192.168.0.14
HOST_3=192.168.0.8
CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380

THIS_NAME=${NAME_1} # 按情况替换
THIS_IP=${HOST_1} # 按情况替换
./etcd --data-dir=data.etcd --name ${THIS_NAME} \
	--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
	--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
	--initial-cluster ${CLUSTER} \
	--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
	

etcdctl

  • 设置环境变量 windows
# windows
set ETCDCTL_API=3
set HOST_1=192.168.0.3
set HOST_2=192.168.0.14
set HOST_3=192.168.0.8
set ENDPOINTS=%HOST_1%:2379,%HOST_2%:2379,%HOST_3%:2379

# 设置值 查看值
etcdctl.exe --endpoints==%ENDPOINTS% put foo "Hello World!"
etcdctl.exe --endpoints==%ENDPOINTS% get foo
etcdctl.exe --endpoints==%ENDPOINTS% --write-out="json" get foo

# 查看成员 状态
etcdctl.exe --endpoints=%ENDPOINTS% member list
etcdctl.exe  --write-out=table --endpoints=%ENDPOINTS% endpoint status

# linux/mac

  • 设置环境变量 linux/mac
# linux
export ETCDCTL_API=3
export HOST_1=192.168.0.3
export HOST_2=192.168.0.14
export HOST_3=192.168.0.8
export ENDPOINTS=$HOST_1:2379,$HOST_2:2379,$HOST_3:2379

# 设置值 查看值
etcdctl --endpoints=$ENDPOINTS put foo "Hello World!"
etcdctl --endpoints=$ENDPOINTS get foo
etcdctl --endpoints=$ENDPOINTS --write-out="json" get foo



# 查看成员 状态
etcdctl --endpoints=$ENDPOINTS member list
etcdctl --write-out=table --endpoints=$ENDPOINTS endpoint status

# watch
etcdctl --endpoints=$ENDPOINTS watch stock1
etcdctl --endpoints=$ENDPOINTS put stock1 1000

etcdctl --endpoints=$ENDPOINTS watch stock --prefix # stock
etcdctl --endpoints=$ENDPOINTS put stock1 10
etcdctl --endpoints=$ENDPOINTS put stock2 20


# 有效期和租约
etcdctl --endpoints=$ENDPOINTS lease grant 300
# lease 776275fdd9a9fb0c granted with TTL(300s)

etcdctl --endpoints=$ENDPOINTS put sample value --lease=776275fdd9a9fb0c
etcdctl --endpoints=$ENDPOINTS get sample

etcdctl --endpoints=$ENDPOINTS lease keep-alive 776275fdd9a9fb0c
etcdctl --endpoints=$ENDPOINTS lease revoke 776275fdd9a9fb0c
# or after 300 seconds
etcdctl --endpoints=$ENDPOINTS get sample

报错收集

  • rafthttp: request sent was ignored (cluster ID mismatch: peer[a]=b, local=c)
    • 解决删除当前目录下的 data.etcd 文件夹

启动参数说明

--name
etcd集群中的节点名,这里可以随意,可区分且不重复就行
--listen-peer-urls
监听的用于节点之间通信的url,可监听多个,集群内部将通过这些url进行数据交互(如选举,数据同步等)
--initial-advertise-peer-urls
建议用于节点之间通信的url,节点间将以该值进行通信。
--listen-client-urls
监听的用于客户端通信的url,同样可以监听多个。
--advertise-client-urls
建议使用的客户端通信url,该值用于etcd代理或etcd成员与etcd节点通信。
--initial-cluster-token etcd-cluster-1
节点的token值,设置该值后集群将生成唯一id,并为每个节点也生成唯一id,当使用相同配置文件再启动一个集群时,只要该token值不一样,etcd集群就不会相互影响。
--initial-cluster
也就是集群中所有的initial-advertise-peer-urls 的合集
--initial-cluster-state new
新建集群的标志,初始化状态使用 new,建立之后改此值为 existing
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值