etcd的搭建

前言

这里记录下如何搭建etcd

单机

在etcd的releases中有安装脚本,安装脚本

这里放一个docker的安装脚本

rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
docker rmi quay.io/coreos/etcd:v3.5.0 || true && \
docker run \
-p 2379:2379 \
-p 2380:2380 \
--mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
--name etcd-gcr-v3.5.0 \
quay.io/coreos/etcd:v3.5.0 \
/usr/local/bin/etcd \
--name s1 \
--data-dir /etcd-data \
--listen-client-urls http://0.0.0.0:2379 \
--advertise-client-urls http://0.0.0.0:2379 \
--listen-peer-urls http://0.0.0.0:2380 \
--initial-advertise-peer-urls http://0.0.0.0:2380 \
--initial-cluster s1=http://0.0.0.0:2380 \
--initial-cluster-token tkn \
--initial-cluster-state new \
--log-level info \
--logger zap \
--log-outputs stderr

集群

这里准备了三台centos7机器

主机 ip
etcd-1 192.168.56.111
etcd-2 192.168.56.112
etcd-3 192.168.56.113

首先在每台机器中安装etcd,这里写了安装的脚本

$ cat etcd.sh 

ETCD_VER=v3.5.0

# choose either URL
GOOGLE_URL=https://storage.googleapis.com/etcd
GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
DOWNLOAD_URL=${GITHUB_URL} rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
rm -rf /opt/etcd && mkdir -p /opt/etcd curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /opt/etcd --strip-components=1
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

赋予执行权限

$ chmod +x etcd.sh

在每台机器中都执行下

$ ./etcd.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 636 100 636 0 0 1328 0 --:--:-- --:--:-- --:--:-- 1330
100 18.4M 100 18.4M 0 0 717k 0 0:00:26 0:00:26 --:--:-- 775k
...

创建etcd配置文件

$ mkdir /etc/etcd
$ vi /etc/etcd/conf.yml

节点1

name: etcd-1
data-dir: /opt/etcd/data
listen-client-urls: http://192.168.56.111:2379,http://127.0.0.1:2379
advertise-client-urls: http://192.168.56.111:2379,http://127.0.0.1:2379
listen-peer-urls: http://192.168.56.111:2380
initial-advertise-peer-urls: http://192.168.56.111:2380
initial-cluster: etcd-1=http://192.168.56.111:2380,etcd-2=http://192.168.56.112:2380,etcd-3=http://192.168.56.113:2380
initial-cluster-token: etcd-cluster-token
initial-cluster-state: new

节点2

name: etcd-2
data-dir: /opt/etcd/data
listen-client-urls: http://192.168.56.112:2379,http://127.0.0.1:2379
advertise-client-urls: http://192.168.56.112:2379,http://127.0.0.1:2379
listen-peer-urls: http://192.168.56.112:2380
initial-advertise-peer-urls: http://192.168.56.112:2380
initial-cluster: etcd-1=http://192.168.56.111:2380,etcd-2=http://192.168.56.112:2380,etcd-3=http://192.168.56.113:2380
initial-cluster-token: etcd-cluster-token
initial-cluster-state: new

节点3

name: etcd-3
data-dir: /opt/etcd/data
listen-client-urls: http://192.168.56.113:2379,http://127.0.0.1:2379
advertise-client-urls: http://192.168.56.113:2379,http://127.0.0.1:2379
listen-peer-urls: http://192.168.56.113:2380
initial-advertise-peer-urls: http://192.168.56.113:2380
initial-cluster: etcd-1=http://192.168.56.111:2380,etcd-2=http://192.168.56.112:2380,etcd-3=http://192.168.56.113:2380
initial-cluster-token: etcd-cluster-token
initial-cluster-state: new

配置项说明:

  • --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,新建集群的标志

更新etcd系统默认配置

当前使用的是etcd v3版本,系统默认的是v2,通过下面命令修改配置。

$ vi /etc/profile
# 在末尾追加
export ETCDCTL_API=3
# 然后更新
$ source /etc/profile

启动

$ ./etcd --config-file=/etc/etcd/conf.yml

配置ETCD为启动服务

编辑/usr/lib/systemd/system/etcd.service

$ cat /usr/lib/systemd/system/etcd.service
[Unit]
Description=EtcdServer
After=network.target
After=network-online.target
Wants=network-online.target [Service]
Type=notify
WorkingDirectory=/opt/etcd/
# User=etcd
ExecStart=/opt/etcd/etcd --config-file=/etc/etcd/conf.yml
Restart=on-failure
LimitNOFILE=65536 [Install]
WantedBy=multi-user.target

更新启动:

$ systemctl daemon-reload
$ systemctl enable etcd
$ systemctl start etcd
$ systemctl restart etcd $ systemctl status etcd.service -l

测试下

复制etcd二进制文件到/usr/local/bin/

$ cp /opt/etcd/etcd* /usr/local/bin/

首先设置ETCD_ENDPOINTS

# export ETCDCTL_API=3
# export ETCD_ENDPOINTS=192.168.56.111:2379,192.168.56.112:2379,192.168.56.113:2379

查看状态

$ etcdctl --endpoints=${ETCD_ENDPOINTS} --write-out=table member list
+------------------+---------+--------+----------------------------+--------------------------------------------------+------------+
| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS | IS LEARNER |
+------------------+---------+--------+----------------------------+--------------------------------------------------+------------+
| 90d224ceb3098d7 | started | etcd-2 | http://192.168.56.112:2380 | http://127.0.0.1:2379,http://192.168.56.112:2379 | false |
| 3b23fbb7d9c7cd10 | started | etcd-1 | http://192.168.56.111:2380 | http://127.0.0.1:2379,http://192.168.56.111:2379 | false |
| 7909c74e3f5ffafa | started | etcd-3 | http://192.168.56.113:2380 | http://127.0.0.1:2379,http://192.168.56.113:2379 | false |
+------------------+---------+--------+----------------------------+--------------------------------------------------+------------+ $ etcdctl --endpoints=${ETCD_ENDPOINTS} --write-out=table endpoint health
+---------------------+--------+------------+-------+
| ENDPOINT | HEALTH | TOOK | ERROR |
+---------------------+--------+------------+-------+
| 192.168.56.111:2379 | true | 6.558088ms | |
| 192.168.56.113:2379 | true | 6.543104ms | |
| 192.168.56.112:2379 | true | 7.405801ms | |
+---------------------+--------+------------+-------+ $ etcdctl --endpoints=${ETCD_ENDPOINTS} --write-out=table endpoint status
+---------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+---------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| 192.168.56.111:2379 | 3b23fbb7d9c7cd10 | 3.5.0 | 20 kB | true | false | 2 | 19 | 19 | |
| 192.168.56.112:2379 | 90d224ceb3098d7 | 3.5.0 | 20 kB | false | false | 2 | 19 | 19 | |
| 192.168.56.113:2379 | 7909c74e3f5ffafa | 3.5.0 | 20 kB | false | false | 2 | 19 | 19 | |
+---------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

在etcd-1中watch一个key,然后再etcd-2中对key设置一个值

[root@centos7-1 ~]# etcdctl watch test
PUT
test
xiaoming [root@centos7-3 ~]# etcdctl put test xiaoming
OK

参考

【ETCD集群安装配置】https://zhuanlan.zhihu.com/p/46477992

【Install】https://etcd.io/docs/v3.5/install/

【彻底搞懂 etcd 系列文章(三):etcd 集群运维部署】https://developer.aliyun.com/article/765312

etcd学习(4)-centos7中部署etcd的更多相关文章

  1. CentOS7中部署Showdoc

    目录 CentOS7中部署Showdoc 前置环境 部署 配置文件 解压安装包 添加启动服务 设置权限 运行安装 界面 CentOS7中部署Showdoc 文:铁乐与猫 前置环境 因为showdoc其 ...

  2. ETCD:在容器中运行etcd集群

    原文地址:Docker container 以下指南显示了如何使用静态引导过程在rkt和Docker上运行etcd. rkt 运行单节点的etcd 以下rkt run命令将在端口2379上公开etcd ...

  3. 无网络centos7中部署kubernetes

    本文提供的kubernetes1.1实际为kubernetes0.8,最新kubernetes部署方式见下一篇文章:centos下kubernetes+flannel部署. 一.部署环境信息: 1)m ...

  4. 不使用pvc的方式在K8S中部署apisix-gateway

    不使用pvc的方式在K8S中部署apisix-gateway 简介 我的apisix使用etcd作为数据存储服务器,官方的使用pvc方式或者docker-compose的方式,对于新手不太友好,本篇是 ...

  5. K8S中部署apisix(非ingress)

    不使用pvc的方式在K8S中部署apisix-gateway 简介 因为公司项目准备重构,现在做技术储备,之前公司项目使用的ocelot做网关,ocelot是.net平台下的一个网关,也是很不错,但是 ...

  6. Centos7中离线安装DockerCE最新版

    一.简述 离线在Centos7中部署DockerCE. 二.步骤 (1)在有外网的计算A上执行: 1.配置安装源存放路径 mkdir -p /root/docker-ce-local &&am ...

  7. etcd学习(8)-etcd中Lease的续期

    etcd中的Lease 前言 Lease Lease 整体架构 key 如何关联 Lease Lease的续期 过期 Lease 的删除 checkpoint 机制 总结 参考 etcd中的Lease ...

  8. centos7部署etcd集群

    实验环境:centos7.4纯净版 192.168.216.130 node1 master 192.168.216.132 node2 slave 192.168.216.134 node3 sla ...

  9. etcd学习(9)-etcd中的存储实现

    etcd中的存储实现 前言 V3和V2版本的对比 MVCC treeIndex 原理 MVCC 更新 key MVCC 查询 key MVCC 删除 key 压缩 周期性压缩 版本号压缩 boltdb ...

随机推荐

  1. SpringCloud-OAuth2(二):实战篇

    如果不了解Oauth2 是什么.工作流程的可以看我上一篇文章: SpringCloud-OAuth2(一):基础篇 这篇讲的内容是:Oauth2在SpringBoot/SpringCloud中的实战. ...

  2. Python使用websocket调用语音识别,语音转文字

    @ 目录 0. 太长不看系列,直接使用 1. Python调用标贝科技语音识别websocket接口,实现语音转文字 1.1 环境准备: 1.2 获取权限 1.2.1 登录 1.2.2 创建新应用 1 ...

  3. 【题解】Luogu P3123 [USACO15OPEN]贝茜说哞Bessie Goes Moo

    Luogu P3123 [USACO15OPEN]贝茜说哞Bessie Goes Moo 题目描述 Farmer John and Bessie the cow love to exchange ma ...

  4. JNI相关笔记 [TOC]

    JNI相关笔记 目录 JNI相关笔记 1 生成native code所需要的头文件 2 JNI提供的一些函数和方法 3 局部引用,全局引用,全局弱引用. 4 异常 1 生成native code所需要 ...

  5. N沟通场效应管深度图解(1)工作原理及Multisim实例仿真

    场效应晶体管(Field Effect Transistor, FET)简称场效应管,是一种由多数载流子参与导电的半导体器件,也称为单极型晶体管,它主要分型场效应管(Junction FET, JFE ...

  6. Java并发之ReentrantLock源码解析(一)

    ReentrantLock ReentrantLock是一种可重入的互斥锁,它的行为和作用与关键字synchronized有些类似,在并发场景下可以让多个线程按照一定的顺序访问同一资源.相比synch ...

  7. 利用C语言判别输入数的位数并正逆序输出

    利用C语言判别用户输入数的位数并正逆序输出 #include <stdio.h> void main() {        int i, scanfNum, printfNum, temp ...

  8. Docker搭建Prometheus+grafana监控系统

    一.Prometheus简介 1.简介 Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB). Prometheus使用Go语言开发,是Google BorgM ...

  9. git分支案例

  10. phpredis中文手册

    本文是参考<redis中文手册>,将示例代码用php来实现,注意php-redis与redis_cli的区别(主要是返回值类型和参数用法). 目录(使用CTRL+F快速查找命令): Key ...