一 etcd集群概述

1.1 概述

静态启动etcd集群要求每个成员都知道集群中的另一个成员。Etcd运行在集群的每个coreos节点上,可以保证coreos集群的稳定,可靠的运行。当集群网络出现动荡,或者当前master节点出现异常时,etcd可以进行master节点的选举工作,同时恢复集群中损失的数据。

1.2 集群容错能力

集群大小
最大容错
1
0
2
1
4
1
5
2
6
2
7
3
8
3
9
4

1.3 集群基础

每个 etcd cluster 都由若干个 member 组成的,每个 member 是一个独立运行的 etcd 实例,单台机器上也可以运行多个 member。
在正常运行的状态下,集群中会有一个 leader,其余的 member 都是 followers。leader 向 followers 同步日志,保证数据在各个 member 都有副本。leader 还会定时向所有的 member 发送心跳报文,如果在规定的时间里 follower 没有收到心跳,就会重新进行选举。
客户端所有的请求都会先发送给 leader,leader 向所有的 followers 同步日志,等收到超过半数的确认后就把该日志存储到磁盘,并返回响应客户端。
每个 etcd 服务有三大主要部分组成:raft 实现、WAL 日志存储、数据的存储和索引。
WAL 会在本地磁盘(即 --data-dir)上存储日志内容(wal file)和快照(snapshot)。
提示:etcd 默认只保存 1000 个历史事件,因此不适合有大量更新操作的场景,否则会导致数据的丢失。etcd 典型的应用场景是配置管理和服务发现,即读多写少的。

1.4 引导机制

  • 静态的
在启动 etcd server 的时候,通过 --initial-cluster 参数配置好所有的节点信息
  • etcd Discovery
使用已有的 etcd cluster 来注册和启动
  • DNS发现
使用 DNS 启动。

二 集群部署-静态

2.1 环境准备

ntp配置:略 #建议配置ntp服务,保证时间一致性
etcd版本:v3.3.9
防火墙及SELinux:关闭防火墙和SELinux
名称
地址
主机名
备注
etcd1
172.24.8.31
etcd1.example.com
 
etcd2
172.24.8.32
etcd2.example.com
 
etcd3
172.24.8.33
etcd3.example.com
 
  1 # hostnamectl set-hostname etcd1.example.com
2 # hostnamectl set-hostname etcd2.example.com
3 # hostnamectl set-hostname etcd3.example.com
4 # vi /etc/hosts
5 #……
6 172.24.8.31 etcd1.example.com
7 172.24.8.32 etcd2.example.com
8 172.24.8.33 etcd3.example.com
 
提示:CentOS6.x则修改/etc/sysconfig/network。

2.2 安装etcd

  1 # ETCD_VER=v3.3.9
2 # GITHUB_URL=https://github.com/coreos/etcd/releases/download
3 # DOWNLOAD_URL=${GITHUB_URL}
4 # rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
5 # rm -rf /tmp/etcd-download-test
6 # mkdir -p /tmp/etcd-download-test #创建下载保存目录
7 # curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
8 # tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
9 # cp /tmp/etcd-download-test/etcd /usr/local/bin/
10 # cp /tmp/etcd-download-test/etcdctl /usr/local/bin/
11 # rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
12
13 # rm -rf /tmp/etcd-download-test/
14 # ETCDCTL_API=3
15 # etcd --version
16 # etcdctl --version #查看已安装版本
 
提示:所有节点均需要安装etcd。

2.3 启动前准备

  1 # mkdir -p /var/log/etcd/			#建议创建etcd日志保存目录
2 # mkdir -p /data/etcd #建议创建单独的etcd数据目录
 

2.4 启动集群

  1 [root@etcd1 ~]# etcd --name etcd1 --data-dir /data/etcd \
2 --initial-advertise-peer-urls http://172.24.8.31:2380 \
3 --listen-peer-urls http://172.24.8.31:2380 \
4 --listen-client-urls http://172.24.8.31:2379,http://127.0.0.1:2379 \
5 --advertise-client-urls http://172.24.8.31:2379 \
6 --initial-cluster-token etcd-cluster-1 \
7 --initial-cluster etcd1=http://172.24.8.31:2380,etcd2=http://172.24.8.32:2380,etcd3=http://172.24.8.33:2380 \
8 --initial-cluster-state new
 
注意:第一台启动的 etcd 服务器将会不断等待其他集群成员完成初始化连接, 处于 waiting 状态。
  1 [root@etcd2 ~]# etcd --name etcd2 --data-dir /data/etcd \
2 --initial-advertise-peer-urls http://172.24.8.32:2380 \
3 --listen-peer-urls http://172.24.8.32:2380 \
4 --listen-client-urls http://172.24.8.32:2379,http://127.0.0.1:2379 \
5 --advertise-client-urls http://172.24.8.32:2379 \
6 --initial-cluster-token etcd-cluster-1 \
7 --initial-cluster etcd1=http://172.24.8.31:2380,etcd2=http://172.24.8.32:2380,etcd3=http://172.24.8.33:2380 \
8 --initial-cluster-state new
9
10 [root@etcd3 ~]# etcd --name etcd3 --data-dir /data/etcd \
11 --initial-advertise-peer-urls http://172.24.8.33:2380 \
12 --listen-peer-urls http://172.24.8.33:2380 \
13 --listen-client-urls http://172.24.8.33:2379,http://127.0.0.1:2379 \
14 --advertise-client-urls http://172.24.8.33:2379 \
15 --initial-cluster-token etcd-cluster-1 \
16 --initial-cluster etcd1=http://172.24.8.31:2380,etcd2=http://172.24.8.32:2380,etcd3=http://172.24.8.33:2380 \
17 --initial-cluster-state new
 
提示:etcd可通过配置文件、命令行参数和环境变量进行配置,在命令行上设置的选项优先于来自环境的选项。如果提供了配置文件,则将忽略其他命令行参数和环境变量。例如,etcd --config-file etcd.conf.yml --data-dir /tmp将忽略该--data-dir标志。即优先级为:配置文件>命令行参数>环境变量。
配置文件为yml的文件,可参考《附001.etcd实例配置文件》
建议:
建议根据以下操作将启动命令写成固定脚本:
  1 [root@etcd1 ~]# vi /root/startetcd.sh
2 #!/bin/sh
3 #****************************************************************#
4 # ScriptName: /root/startetcd.sh
5 # Author: Xiang Hongying
6 # Create Date: 2018-09-10 01:14
7 # Modify Author: Xiang Hongying
8 # E-Mail: x120952576@126.com
9 # Version:
10 #***************************************************************#
11 LOGFILE=/var/log/etcd/etcd.log
12 /usr/local/bin/etcd --name etcd1 --data-dir /data/etcd \
13 --initial-advertise-peer-urls http://172.24.8.31:2380 \
14 --listen-peer-urls http://172.24.8.31:2380 \
15 --listen-client-urls http://172.24.8.31:2379,http://127.0.0.1:2379 \
16 --advertise-client-urls http://172.24.8.31:2379 \
17 --initial-cluster-token etcd-cluster-1 \
18 --initial-cluster etcd1=http://172.24.8.31:2380,etcd2=http://172.24.8.32:2380,etcd3=http://172.24.8.33:2380 \
19 -initial-cluster-state new >> $LOGFILE 2>&1 &
20 [root@etcd1 ~]# chmod u+x startetcd.sh
 

2.5 集群健康检测

  1 [root@etcd1 ~]# etcdctl cluster-health

附录:使用systemd管理etcd。

  1 [root@etcd1 ~]# vi /lib/systemd/system/etcd.service
2 [Unit]
3 Description=etcd
4 Documentation=https://github.com/coreos/etcd
5 Conflicts=etcd.service
6
7 [Service]
8 Type=notify
9 Restart=always
10 RestartSec=5s
11 LimitNOFILE=40000
12 TimeoutStartSec=0
13
14 ExecStart=/usr/local/bin/etcd --name etcd1 --data-dir /data/etcd \
15 --initial-advertise-peer-urls http://172.24.8.31:2380 \
16 --listen-peer-urls http://172.24.8.31:2380 \
17 --listen-client-urls http://172.24.8.31:2379,http://127.0.0.1:2379 \
18 --advertise-client-urls http://172.24.8.31:2379 \
19 --initial-cluster-token etcd-cluster-1 \
20 --initial-cluster etcd1=http://172.24.8.31:2380,etcd2=http://172.24.8.32:2380,etcd3=http://172.24.8.33:2380 \
21 --initial-cluster-state new
22
23 [Install]
24 WantedBy=multi-user.target
25 [root@etcd1 ~]# systemctl daemon-reload
26 [root@etcd1 ~]# systemctl start etcd.service
27 [root@etcd1 ~]# systemctl enable etcd.service
 
提示:其他节点类似即可。

2.6 关闭集群

  1 [root@etcd1 ~]# systemctl stop etcd
提示:
使用systemctl stop etcd 关闭集群, 在重新启动集群, 之前 etcd 保存的资料不会丢失 要对 etcd 集群进行重置, 最简单的方式是关闭集群后, 删除了所有 etcd member 中ETCD_DATA_DIR 配置中定义的目录下的所有子目录,然后启动所有 member 即可。

三 集群管理

3.1 集群成员检测

  1 [root@etcd1 ~]# etcdctl member list

3.2 更新成员url

若成员etcd2的IP地址有变动,需要更新url,则需要执行以下操作:
  1 [root@etcd3 ~]# ifconfig eth0
2 inet 172.24.8.40
3 [root@etcd3 ~]# vi /lib/systemd/system/etcd.service #将所有旧IP改为最新IP。
 
提示:将所有IP修改为新的IP,若使用命令参数启动,则在命令参数中修改此IP为新值即可。
  1 [root@etcd3 ~]# systemctl restart etcd
2 [root@etcd1 ~]# etcdctl member list #在leader节点查看所有节点
 
  1 [root@etcd1 ~]# etcdctl member update 14ff148c62a24fb2 http://172.24.8.40:2380	#更新对等url
 
提示:错误更新的客户端URL不会影响etcd群集的运行状况。

3.3 添加新成员

  1 [root@localhost ~]# hostnamectl set-hostname etcd4.example.com
参考2.3步骤在etcd4.example.com节点安装etcd。
  1 [root@etcd1 ~]# etcdctl member add etcd4 http://172.24.8.34:2380
  1 [root@etcd4 ~]# export ETCD_NAME="etcd4"
2 [root@etcd4 ~]# export ETCD_INITIAL_CLUSTER="etcd4=http://172.24.8.34:2380,etcd3=http://172.24.8.40:2380,etcd1=http://172.24.8.31:2380,etcd2=http://172.24.8.32:2380"
3 [root@etcd4 ~]# export ETCD_INITIAL_CLUSTER_STATE="existing"
4 [root@etcd4 ~]# etcd --listen-client-urls http://172.24.8.34:2379,http://127.0.0.1:2379 --advertise-client-urls http://172.24.8.34:2379 --listen-peer-urls http://172.24.8.34:2380 --initial-advertise-peer-urls http://172.24.8.34:2380 --data-dir /data/etcd
5 [root@etcd1 ~]# etcdctl member list
6 [root@etcd1 ~]# etcdctl cluster-health
 
提示:当使用已删除成员的数据目录启动etcd时,如果etcd连接到集群中的任何活动成员,它将自动退出,可通过以下方式删除旧member的数据,然后重新启动:
  1 # rm -rf /var/lib/etcd/default.etcd/
2 # systemctl start etcd
 

3.4 删除成员

  1 [root@etcd1 ~]# etcdctl member remove 5a6397499417250
2 Removed member 5a6397499417250 from cluster
 
提示:删除leader是安全的,但是当选出新领导者时,群集将处于非活动状态。此持续时间通常是选举超时和投票过程的时间段。

四 集群部署-发现

见《004.etcd集群部署-发现》
参考官方文档:
https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/configuration.md

003.etcd集群部署-静态发现的更多相关文章

  1. 004.etcd集群部署-动态发现

    一 etcd发现简介 1.1 需求背景 在实际环境中,集群成员的ip可能不会提前知道.如使用dhcp自动获取的情况,在这些情况下,使用自动发现来引导etcdetcd集群,而不是指定静态配置,这个过程被 ...

  2. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  3. etcd集群部署与遇到的坑(转)

    原文 https://www.cnblogs.com/breg/p/5728237.html etcd集群部署与遇到的坑 在k8s集群中使用了etcd作为数据中心,在实际操作中遇到了一些坑.今天记录一 ...

  4. 005.基于docker部署etcd集群部署

    一 环境准备 ntp配置:略 #建议配置ntp服务,保证时间一致性 etcd版本:v3.3.9 防火墙及SELinux:关闭防火墙和SELinux 名称 地址 主机名 备注 etcd1 172.24. ...

  5. etcd集群部署

    etcd是用于共享配置和服务发现的分布式KV存储系统,随着CoreOS和Kubernetes等项目在开源社区日益火热,它们都用到了etcd组件作为一个高可用.强一致性的服务发现存储仓库.操作系统版本: ...

  6. Kubernetes集群部署之三ETCD集群部署

    kuberntes 系统使用 etcd 存储所有数据,本文档介绍部署一个三节点高可用 etcd 集群的步骤,这三个节点复用 kubernetes 集群机器k8s-master.k8s-node-1.k ...

  7. K8s集群部署(一)------ETCD集群部署

    环境说明 三台主机: k8s-master  10.0.3.225 k8s-node1    10.0.3.226 k8s-node2    10.0.3.227 配置主机名解析 [root@k8s- ...

  8. etcd集群部署与遇到的坑

    在k8s集群中使用了etcd作为数据中心,在实际操作中遇到了一些坑.今天记录一下,为了以后更好操作. ETCD参数说明 —data-dir 指定节点的数据存储目录,这些数据包括节点ID,集群ID,集群 ...

  9. etcd 集群部署

    etcd web管理 https://nikfoundas.github.io/etcd-viewer/ # git clone https://github.com/nikfoundas/etcd- ...

随机推荐

  1. Confluence 6 配置草稿保存的时间

    这个设置仅仅应用到 Confluence 6.0 及后续版本中,如果你选择 禁用(disable )collaborative editing. 当协同编辑被启用后,我们将会保存所有的修改. 当协同编 ...

  2. Mycat配置文件详解及全局序列号

    来详细的看看 mycat的配置文件,更多信息请查看:mycat权威指南. schema.xml: Schema.xml 作为 MyCat 中重要的配置文件之一,管理着 MyCat 的逻辑库.表.分片规 ...

  3. laravel 队列发送邮件

    批量处理任务的场景在我们开发中是经常使用的,比如邮件群发,消息通知,短信,秒杀等等,我们需要将这个耗时的操作放在队列中来处理,从而大幅度缩短Web请求和相应的时间.下面讲解下Laravel中队列的使用 ...

  4. Vue2 异步获取的数据(通过ajax)获取的数据 渲染到dom上

    页面dom结构如下 <ul class="user" id="app"> <li><span>姓名: </span&g ...

  5. Python函数之递归函数

    递归函数的定义:在这个函数里再调用这个函数本身 最大递归深度默认是997或者998,python从内存角度做的限制 优点:代码变简单 缺点:占内存 一:推导年龄 问a的值是多少: a 比 b 小2,b ...

  6. JAVA 程序编译过程;编辑器,编译器和解释器

    最基本的软件工具包括,编辑器,编译器,解释器; 编译器:编译器就是将一种编程语言代码翻译成另一种语言的等效代码程序. 解释器:解释器将编译和执行交织在一起,即编译一部分代码后执行该部分代码,然后再编译 ...

  7. linux服务器上简单命令

    linux命令 1.ifconfig 查看 设置ip: 2.连接另一台linux 命令 ssh; 3.查看尾部 新追加内容 tail -f; 4.ln -s 原命令 新命令路径: 5.创建一个空文件 ...

  8. P1036 选数 题解

    题目链接https://www.luogu.org/problemnew/show/P1036 题目描述 已知 nnn 个整数 x1,x2,-,xnx_1,x_2,-,x_nx1​,x2​,-,xn​ ...

  9. mongodb 安装时错误

    1.安装MongoDB进度条长时间不动 根据在网上搜的步骤安装mongoDB到这步,就基本上卡死不动,在网上查到的办法是死等,等了半个小时,但运气不好半个小时也不一定安装成功. 如果进行到这步,卡死在 ...

  10. 真的分治fft

    以前学的分治fft f[i]=sigma(f[i-x]*g[x]),其中g[x]已知 那么我们可以用cdq分治来做(l,mid 对mid+1,t的影响) 而现在的$f[i]=sum(f(i-x)*f( ...