一 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 整合到支持的附件存储选项

    如果你现在正在存储附件到 WebDav 或者你的数据库中.你可以整合附件的存储到文件系统中.当你的附件从数据库中被合并到文件系统后,你存储在数据库中的附件数据就可以从数据库中删除了. 当附件合并进行的 ...

  2. LeetCode(110):平衡二叉树

    Easy! 题目描述: 给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1. 示例 1: 给定二叉树 [3, ...

  3. light1370 欧拉函数打表

    /* 给定n个数ai,要求欧拉函数值大于ai的最小的数bi 求sum{bi} */ #include<bits/stdc++.h> using namespace std; #define ...

  4. 20165314 学习基础和C语言基础调查

    技能学习心得 你有什么技能比大多人(超过90%以上)更好?针对这个技能的获取你有什么成功的经验?与老师博客中的学习经验有什么共通之处? 从小我的父母就逼着我学习很多技能,比如钢琴,围棋,书法等,不过很 ...

  5. sass基础—具体编译步骤及对应命令:详细

    /*基础语法*/h1{ color: red;} /*变量定义*/ $color: red; /*嵌套*/body{ header{ } footer{ }} /*mixin函数*/@mixin al ...

  6. Android 第一波

    1. Devik进程,Linux进程,线程的区别 说一说对 SP 频繁操作有什么后果? SP 能存储多少数据? SP 的底层其实是由xml文件来实现的,操作 SP 的过程其实就是xml的序列化和反序列 ...

  7. springboot的创建

  8. 回到未来123Back To The Future

    或许,决定着现在的过去已经无法改变,但决定着未来的现在,却在我们每个人的手里. 路?我们要去的地方不需要路.(Roads? Where we're going we don't need roads) ...

  9. PyOpenCV图像逆时针旋转90度

    warpAffine方法效果很搓,留下大片黑色区域. 使用flip和transpose可以实现逆时针旋转90度.先flip或先transpose均可. #coding:utf-8 import cv2 ...

  10. 隐藏WIN10资源管理器中的3D对象文件夹

    1.WIN+R,打开运行窗口,输入“regdeit”启动注册表编辑器 2.定位到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersio ...