5、etcd集群部署

5、etcd集群部署

一、ETCD详解

什么是 etcd
etcd 是 CoreOS 团队于 2013 年 6 月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库,基于 Go 语言实现。我们知道,在分布式系统中,各种服务的配置信息的管理分享,服务的发现是一个很基本同时也是很重要的问题。CoreOS 项目就希望基于 etcd 来解决这一问题。
etcd 目前在 github.com/coreos/etcd 进行维护,即将发布 2.0.0 版本。
受到 Apache ZooKeeper 项目和 doozer 项目的启发,etcd 在设计的时候重点考虑了下面四个要素:
    简单:支持 REST 风格的 HTTP+JSON API
    安全:支持 HTTPS 方式的访问
    快速:支持并发 1k/s 的写操作
    可靠:支持分布式结构,基于 Raft 的一致性算法
注:Apache ZooKeeper 是一套知名的分布式系统中进行同步和一致性管理的工具。
注:doozer 则是一个一致性分布式数据库。
注:Raft 是一套通过选举主节点来实现分布式系统一致性的算法,相比于大名鼎鼎的 Paxos 算法,它的过程更容易被人理解,由 Stanford 大学的Diego Ongaro 和 John Ousterhout 提出。更多细节可以参考 raftconsensus.github.io。
一般情况下,用户使用 etcd 可以在多个节点上启动多个实例,并添加它们为一个集群。同一个集群中的 etcd 实例将会保持彼此信息的一致性。

安装
etcd 基于Go语言实现,因此,用户可以从项目主页下载源代码自行编译,也可以下载编译好的二进制文件,甚至直接使用制作好的 Docker 镜像文件来体验。

二、二进制文件方式如下地址

wget -O https://github.com/etcd-io/etcd/releases/download/v3.3.13/etcd-v3.3.13-linux-amd64.tar.gz

三、解压ETCD压缩包

[root@k8s-master etcd-v3.3.13-linux-amd64]# tar xf etcd-v3.3.13-linux-amd64.tar.gz 

四、拷贝etcd与etcdctl命令到/usr/local/bin下

[root@k8s-master etcd-v3.3.13-linux-amd64]# ls
Documentation  etcd  etcdctl  README-etcdctl.md  README.md  READMEv2-etcdctl.md
[root@k8s-master etcd-v3.3.13-linux-amd64]# cp -a etcd etcdctl /usr/local/bin/

 

五、搭建ETCD

1、创建工作目录

[root@k8s-master ~]# mkdir /opt/etcd/{bin,cfg,ssl,logs} -p
[root@k8s-master ~]# mkdir /opt/etcd/{bin,cfg,ssl,logs} -p
[root@k8s-master etcd]# mv /opt/etcd-v3.3.13-linux-amd64/etcd ../etcd/bin/
[root@k8s-master etcd]# mv /opt/etcd-v3.3.13-linux-amd64/etcdctl ../etcd/bin/

说明:

  • bin目录用于存放etcd命令。
  • cfg目录用于存放etcd配置文件。
  • ssl目录用于存放数字证书文件。

 

2、配置etcd.conf集群配置文件

#[Member]
ETCD_NAME="etcd01"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.3.63:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.3.63:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.3.63:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.3.63:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.3.63:2380,etcd02=https://192.168.3.64:2380,etcd03=https://192.168.3.65:2380,etcd04=https://192.168.3.66:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

详解:

  • ETCD_NAME     ETCD集群唯一的名称。
  • ETCD_DATA_DIR   ETCD的数据存储目录。
  • ETCD_LISTEN_PEER_URLS  ETCD监听的集群IP和端口,用于集群内部通信的地址。
  • ETCD_LISTEN_CLIENT_URLS  ETCD监听的集群IP和端口,用于集群客户端外部通信的地址。
  • ETCD_INITIAL_ADVERTISE_PEER_URLS 集群内部通信的内部地址。
  • ETCD_ADVERTISE_CLIENT_URLS  集群客户端通信的外部地址。
  • ETCD_INITIAL_CLUSTER   集群节点的所有相互通信的地址与端口配置信息。
  • ETCD_INITIAL_CLUSTER_TOKEN 用于ETCD集群每台信息通信的认证与端口
  • ETCD_INITIAL_CLUSTER_STATE 集群的状态,新集群采用new,如果已有的集群加入改为exsiting。

3、etcd.service启动配置文件

[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
EnvironmentFile=/opt/etcd/cfg/etcd.conf
ExecStart=/opt/etcd/bin/etcd \
        --name=${ETCD_NAME} \
        --data-dir=${ETCD_DATA_DIR} \
        --listen-peer-urls=${ETCD_LISTEN_PEER_URLS} \
        --listen-client-urls=${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \
        --advertise-client-urls=${ETCD_ADVERTISE_CLIENT_URLS} \
        --initial-advertise-peer-urls=${ETCD_INITIAL_ADVERTISE_PEER_URLS} \
        --initial-cluster=${ETCD_INITIAL_CLUSTER} \
        --initial-cluster-token=${ETCD_INITIAL_CLUSTER_TOKEN} \
        --initial-cluster-state=new \
        --cert-file=/opt/etcd/ssl/server.pem \
        --key-file=/opt/etcd/ssl/server-key.pem \
        --peer-cert-file=/opt/etcd/ssl/server.pem \
        --peer-key-file=/opt/etcd/ssl/server-key.pem \
        --trusted-ca-file=/opt/etcd/ssl/ca.pem \
        --peer-trusted-ca-file=/opt/etcd/ssl/ca.pem
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

详解:

  • --name=${ETCD_NAME}
  •  --data-dir=${ETCD_DATA_DIR}
  • --listen-peer-urls=${ETCD_LISTEN_PEER_URLS}
  • --listen-client-urls=${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379
  • --advertise-client-urls=${ETCD_ADVERTISE_CLIENT_URLS}
  • --initial-advertise-peer-urls=${ETCD_INITIAL_ADVERTISE_PEER_URLS}
  • --initial-cluster=${ETCD_INITIAL_CLUSTER}
  • --initial-cluster-token=${ETCD_INITIAL_CLUSTER_TOKEN}
  • --initial-cluster-state=new
  • --cert-file=/opt/etcd/ssl/server.pem 
  • --key-file=/opt/etcd/ssl/server-key.pem
  • --peer-cert-file=/opt/etcd/ssl/server.pem
  • --peer-key-file=/opt/etcd/ssl/server-key.pem 
  • --trusted-ca-file=/opt/etcd/ssl/ca.pem
  • --peer-trusted-ca-file=/opt/etcd/ssl/ca.pem
    说明:以上内容采用变量引用etcd.conf配置文件的选项,红色引用CA自签证书通信。

 

4、把生成的证书从/server/script/迁移至/opt/etcd/ssl目录下

[root@k8s-master script]# mv ca.pem ca-key.pem server.pem server-key.pem ../etcd/ssl/

5、查看集群状态

[root@k8s-master ~]# /opt/etcd/bin/etcdctl --ca-file=/opt/etcd/ssl/ca.pem --cert-file=/opt/etcd/ssl/server.pem --key-file=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.3.62:2379,https://192.168.3.63:2379,https://192.168.3.64:2379,https://192.168.3.65:2379,https://192.168.3.65:2379" cluster-health

 

 

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
百度已收录
Linux

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: