Etcd实战、一(安装、配置、设置集群及认证)

ETCD

前言:etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现

本文非原理介绍,仅介绍etcd在linux上的安装及在go下的使用

简介

  • 核心:k-v存储,高可用,分布式,raft,go (嗯具体底层可以阅读源码)
  • 使用场景:服务发现,分布式配置管理等
  • 项目地址:https://github.com/etcd-io/etcd (github赛高!!!)

安装

  • 环境:Linux下(centos.ubuntu等)
  • 安装包:https://github.com/etcd-io/etcd/releases/download/v3.3.18/etcd-v3.3.18-linux-amd64.tar.gz
  • 更多版本的安装包可以去:https://github.com/etcd-io/etcd/releases

详细流程

  1. 执行 wget https://github.com/etcd-io/etcd/releases/download/v3.3.18/etcd-v3.3.18-linux-amd64.tar.gz
  2. 接着执行 tar zxvf etcd-v3.3.18-linux-amd64.tar.gz 得到解压后的文件夹
  3. 不出意外的话会得到如图的文件
    Etcd实战、一(安装、配置、设置集群及认证)_第1张图片
  4. 我们可以将该文件夹移到系统目录下(按各自服务器的存放规则) mv etcd-v3.3.18-linux-amd64 /usr/local/etcd
  5. 启动etcd服务非常简单,在etcd目录下执行 ./etcd 就可以简单启动
  6. etcdctl 用于命令行输入指令

API

  • 下载的etcd包,默认配置是API 2,执行 ./etcdctl version 来查看当前版本,建议使用API 3
    在这里插入图片描述
  • /etc/profile 中追加 export ETCDCTL_API=3 设置,别忘了执行 source /etc/profile
  • v3截取部分指令
    Etcd实战、一(安装、配置、设置集群及认证)_第2张图片

配置

  • etcd包的配置文件需要自己编写,这里介绍些常用配置项
  • 配置要求格式为yml
  • 常用配置项
name:成员名称
data-dir:数据存储路径,为空则会按成员名生成在服务启动路径
listen-client-urls: 对外提供服务的地址,不可包含域名
advertise-client-urls: 此成员的客户端URL列表,用于通告群集的其余部分。这些URL可以包含域名
listen-peer-urls: 和成员之间通信的地址,域名无效
initial-advertise-peer-urls: 该节点成员对等URL地址,且会通告群集的其余成员节点
initial-cluster: 集群中所有节点的信息
initial-cluster-token: 创建集群的 token,这个值每个集群保持唯一
initial-cluster-state: 初始集群状态,可选new 或 existing

集群

  • 创建集群有多种方式,多机多节点,单机多节点等模式
  • 可以采用开源包实现自动化创建集群 github.com/mattn/goreman(GitHub赛高)

这里示例单机多节点配置集群,多机也同理,替换IP即可

  1. 创建一个基础配置conf.yml,写入内容
# this is the configuration file for the etcd server.

# Human-readable name for this member.
name: 'etcd_1'

# Path to the data directory.
data-dir:

# List of comma separated URLs to listen on for peer traffic.
listen-peer-urls: http://0.0.0.0:2380

# List of comma separated URLs to listen on for client traffic.
listen-client-urls: http://0.0.0.0:2379

# List of this member's peer URLs to advertise to the rest of the cluster.
# The URLs needed to be a comma-separated list.
initial-advertise-peer-urls: http://0.0.0.0:2380

# List of this member's client URLs to advertise to the public.
# The URLs needed to be a comma-separated list.
advertise-client-urls: http://0.0.0.0:2379

# Initial cluster configuration for bootstrapping.
initial-cluster: etcd_1=http://0.0.0.0:2380,etcd_2=http://0.0.0.0:12380,etcd_3=http://0.0.0.0:22380

# Initial cluster token for the etcd cluster during bootstrap.
initial-cluster-token: 'etcd-cluster-token-test38'

# Initial cluster state ('new' or 'existing').
initial-cluster-state: 'new'
  • 执行 ./etcd -config-file conf.yml 启动服务,不出意外服务会正常启动并监听了2379端口在这里插入图片描述
  • 执行 ./etcdctl member list来查看当前成员信息
  • 接着我们准备加入成员etcd_2
  • 执行 ./etcdctl member add etcd_2 --peel-urls=“http://0.0.0.0:12380” 加入成员,输出如下图所示在这里插入图片描述
  • OK。这个时候我们就可以准备启动成员etcd_2并加入集群了
  • 添加配置node2.yml
# this is the configuration file for the etcd server.

# Human-readable name for this member.
name: 'etcd_2'

# Path to the data directory.
data-dir:

# List of comma separated URLs to listen on for peer traffic.
listen-peer-urls: http://0.0.0.0:12380

# List of comma separated URLs to listen on for client traffic.
listen-client-urls: http://0.0.0.0:12379

# List of this member's peer URLs to advertise to the rest of the cluster.
# The URLs needed to be a comma-separated list.
initial-advertise-peer-urls: http://0.0.0.0:12380

# List of this member's client URLs to advertise to the public.
# The URLs needed to be a comma-separated list.
advertise-client-urls: http://0.0.0.0:12379

# Initial cluster configuration for bootstrapping.
initial-cluster: etcd_1=http://0.0.0.0:2380,etcd_2=http://0.0.0.0:12380

# Initial cluster token for the etcd cluster during bootstrap.
initial-cluster-token: 'etcd-cluster-token-test38'

# Initial cluster state ('new' or 'existing').
initial-cluster-state: 'existing'
  • 这里需要注意的点就是,端口,以及将 new 改为 existing
  • 成员etcd_3同理
  • 将成员都添加成功后,我们再来看member list
    在这里插入图片描述
  • 可以看到,成员都被成功加入,至此,单机集群已启动成功!

身份验证

  • 这里有两种模式,基于证书的访问控制基于身份验证的访问控制
  • 这里介绍下基于身份的模式
  • 执行 ./etcdctl user add root 添加root用户并设置密码
  • 执行 ./etcdctl auth enable 来开启身份验证
  • 在执行命令时,需要带上用户名密码,如*./etcdctl put -user=root:root test “a”*

总结

  • 好久没写博客了,其实中间用了很多值得深究的东西,可惜没都记下来
  • ETCD在分布式环境下是个功能强大的包,值得好好研究,下次写原理
  • 已开发ETCD使用的GO包,待实践中。。。T.T

你可能感兴趣的:(Golang)