标签:etcd 基于linux7的ectd安装与部署 etcd集群 etcd安装与部署
基于linux7的ectd安装与部署iostat
Linux 3.10.0-693.17.1.el7.x86_64 (swarm1) 2018年03月28日 _x86_64_ (2 CPU)
cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
getenforce
Disabled
##etcd下载
mkdir -p /opt/etcd && cd /opt/etcd
curl -L https://github.com/coreos/etcd/releases/download/v3.3.2/etcd-v3.3.2-linux-amd64.tar.gz -o etcd-v3.3.2-linux-amd64.tar.gz
##解压后是一些文档和两个二进制文件etcd和etcdctl。etcd是server端,etcdctl是客户端。
tar zxf etcd-v3.3.2-linux-amd64.tar.gz
mv etcd-v3.3.2-linux-amd64 etcd
pwd
/opt/etcd
cd etcd
ls
etcd etcdctl README-etcdctl.md README.md READMEv2-etcdctl.md
##如果在测试环境,启动一个单节点的etcd服务,只需要运行etcd命令就行。
./etcd
如下:
##前台运行,直接占用了当前终端。
2018-03-28 17:46:23.082655 I | etcdmain: etcd Version: 3.3.2
2018-03-28 17:46:23.082753 I | etcdmain: Git SHA: c9d46ab37
2018-03-28 17:46:23.082769 I | etcdmain: Go Version: go1.9.4
2018-03-28 17:46:23.082783 I | etcdmain: Go OS/Arch: linux/amd64
2018-03-28 17:46:23.082817 I | etcdmain: setting maximum number of CPUs to 2, total number of available CPUs is 2
。。。。。。
##从上面的输出中,我们可以看到很多信息。以下是几个比较重要的信息:
(1)name表示节点名称,默认为default。
(2)data-dir 保存日志和快照的目录,默认为当前工作目录default.etcd/目录下。
(3)在http://localhost:2380和集群中其他节点通信。
(4)在http://localhost:2379提供HTTP API服务,供客户端交互。
(5)heartbeat为100ms,该参数的作用是leader多久发送一次心跳到followers,默认值是100ms。
(6)election为1000ms,该参数的作用是重新投票的超时时间,如果follow在该时间间隔没有收到心跳包,会触发重新投票,默认为1000ms。
(7)snapshot count为10000,该参数的作用是指定有多少事务被提交时,触发截取快照保存到磁盘。
(8)集群和每个节点都会生成一个uuid。
(9)启动的时候会运行raft,选举出leader。
##添加etcd启动路径
cat >> /etc/profile << EOF
##etcd
export PATH=/opt/etcd/etcd:$PATH
export ETCDCTL_API=3
EOF
source /etc/profile
##查看下etcd路径
echo $PATH
/opt/etcd/etcd:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
说明:如果不设置 ETCDCTL_API=3,则默认是的API版本是2:
etcdctl version
etcdctl version: 3.3.2
API version: 2
正确设置后,API版本变成3:
etcdctl version
etcdctl version: 3.3.2
API version: 3.3
##上面的方法只是简单的启动一个etcd服务,但要长期运行的话,还是做成一个服务好一些。下面将以systemd为例,介绍如何建立一个etcd服务。
##设定etcd配置文件,建立相关目录
mkdir -p /var/lib/etcd/
mkdir -p /opt/etcd/config/
##创建etcd配置文件
cat <<EOF | sudo tee /opt/etcd/config/etcd.conf
#节点名称
ETCD_NAME=$(hostname -s)
#数据存放位置
ETCD_DATA_DIR=/var/lib/etcd
EOF
##创建systemd配置文件
cat <<EOF | tee /etc/systemd/system/etcd.service
[Unit]
Description=Etcd Server
Documentation=https://github.com/coreos/etcd
After=network.target
[Service]
User=root
Type=notify
EnvironmentFile=/opt/etcd/config/etcd.conf
ExecStart=/opt/etcd/etcd/etcd
Restart=on-failure
RestartSec=10s
LimitNOFILE=40000
[Install]
WantedBy=multi-user.target
##启动etcd
systemctl daemon-reload && systemctl enable etcd && systemctl start etcd
##查看etcd版本
etcd --version
etcd Version: 3.3.2
Git SHA: c9d46ab37
Go Version: go1.9.4
Go OS/Arch: linux/amd64
##etcdctl参数和选项
etcdctl -h
##数据库操作
数据库操作围绕对键值和目录的CRUD完整生命周期的管理。
etcd在键的组织上采用了层次化的空间结构(类似于文件系统中目录的概念),用户指定的键可以为单独的名字,如:testkey,此时实际上放在根目录/下面,也可以为指定目录结构,如/cluster1/node2/testkey,则将创建相应的目录结构。
说明:CRUD即Create,Read,Update,Delete是符合REST风格的一套API操作。
(1)put
etcdctl put foo "hello world"
OK
etcdctl put /root/wtf "datagrand"
OK
(2)get
etcdctl get foo
foo
hello world
etcdctl get /root/wtf
/root/wtf
datagrand
##当键不存在时,则会报错。例如:
etcdctl get /testdir/testkey2
Error: 100: Key not found (/testdir/testkey2) [5]
##单独集群:只有一台服务器的集群。
部署etcd集群作为单独集群是直截了当的。仅用一个命令启动它
etcd或
systemctl daemon-reload && systemctl enable etcd && systemctl start etcd
##本地多成员集群
多成员集群:有多台台服务器的集群。
提供 Procfile 用于简化搭建本地多成员集群。通过少量命令来启动多成员集群:
##使用go get **** 命令安装程序
yum install -y go
系统会安装golang-1.8.3-1.el7.x86_64(按实际版本)
##执行 go version,查看当前 go 的当前版本
go version
go version go1.8.3 linux/amd64
##执行 go env,查看当前 go 的环境变量
go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/root/go"
GORACE=""
GOROOT="/usr/lib/golang"
GOTOOLDIR="/usr/lib/golang/pkg/tool/linux_amd64"
说明:golang1.8默认情况下,在 GOPATH 没有设置的情况下,使用的默认路径是 /root/go 。这个是非常不好的,因为 /root 目录权限非常特殊。
因此最好能自己设置 GOPATH,比如设置到自己的工作区目录。
##修改 /etc/profile,将go加入到path中
cat >> /etc/profile << EOF
export GOPATH=/usr/local/go
export PATH=/usr/local/go/bin:$PATH
EOF
source /etc/profile
##执行 go env,查看当前 go 的GOPATH
GOPATH="/usr/local/go"
说明:之后再通过 go get **** 命令安装程序时,新的程序就会被安装到 GOPATH/bin 下,然后由于GOPATH/bin 已经加入到 PATH,因此就可以很方便的使用新安装的程序。
##安装goreman
go get github.com/mattn/goreman
##查看下安装路径
which goreman
/usr/local/go/bin/goreman
##编辑Procfile文件
cat >> Procfile << EOF
##Use goreman to run `go get github.com/mattn/goreman`
etcd1: etcd --name infra1 --listen-client-urls http://127.0.0.1:12379 --advertise-client-urls http://127.0.0.1:12379 --listen-peer-urls http://127.0.0.1:12380 --initial-advertise-peer-urls http://127.0.0.1:12380 --initial-cluster-token etcd-cluster-1 --initial-cluster ‘infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380‘ --initial-cluster-state new --enable-pprof
etcd2: etcd --name infra2 --listen-client-urls http://127.0.0.1:22379 --advertise-client-urls http://127.0.0.1:22379 --listen-peer-urls http://127.0.0.1:22380 --initial-advertise-peer-urls http://127.0.0.1:22380 --initial-cluster-token etcd-cluster-1 --initial-cluster ‘infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380‘ --initial-cluster-state new --enable-pprof
etcd3: etcd --name infra3 --listen-client-urls http://127.0.0.1:32379 --advertise-client-urls http://127.0.0.1:32379 --listen-peer-urls http://127.0.0.1:32380 --initial-advertise-peer-urls http://127.0.0.1:32380 --initial-cluster-token etcd-cluster-1 --initial-cluster ‘infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380‘ --initial-cluster-state new --enable-pprof
EOF
##查看当前监控端口
etstat -lnp|grep etcd
tcp 0 0 127.0.0.1:2379 0.0.0.0:* LISTEN 32618/etcd
tcp 0 0 127.0.0.1:2380 0.0.0.0:* LISTEN 32618/etcd
##启动多成员集群
goreman -f /root/Procfile start
##查看监控端口
netstat -lnp|grep etcd
tcp 0 0 127.0.0.1:22379 0.0.0.0:* LISTEN 53932/etcd
tcp 0 0 127.0.0.1:2379 0.0.0.0:* LISTEN 32618/etcd
tcp 0 0 127.0.0.1:22380 0.0.0.0:* LISTEN 53932/etcd
tcp 0 0 127.0.0.1:2380 0.0.0.0:* LISTEN 32618/etcd
tcp 0 0 127.0.0.1:32379 0.0.0.0:* LISTEN 53926/etcd
tcp 0 0 127.0.0.1:12379 0.0.0.0:* LISTEN 53925/etcd
tcp 0 0 127.0.0.1:32380 0.0.0.0:* LISTEN 53926/etcd
tcp 0 0 127.0.0.1:12380 0.0.0.0:* LISTEN 53925/etcd
说明:启动的成员各自在 localhost:12379, localhost:22379, 和 localhost:32379 上监听客户端请求。
##通过使用 etcdctl 来查看已经启动的集群
etcdctl --write-out=table --endpoints=localhost:12379 member list
##kill某个成员
goreman run stop etcd2
说明:
使用etcdctl --write-out=table --endpoints=localhost:12379 member list查看时,etcd2还在,但netstat -lnp|grep etcd监控的端口已经停掉了,使用ps -ef | grep etcd | grep 127.0.0.1:22379查看下ectd2的pid为空。
##put数据
etcdctl --endpoints=localhost:12379 put key hello
OK
##get数据
etcdctl --endpoints=localhost:12379 get key
hello
##试图从被杀掉的成员获取key
etcdctl --endpoints=localhost:22379 get key
报错:Error: dial tcp [::1]:22379: getsockopt: connection refused
##重启被杀掉的成员
goreman run restart etcd2
##从重启的成员获取key
etcdctl --endpoints=localhost:22379 get key
hello
标签:etcd 基于linux7的ectd安装与部署 etcd集群 etcd安装与部署
原文地址:http://blog.51cto.com/wutengfei/2092141