文章转载自:配置中心ETCD搭建与简单使用
1 ETCD配置
1.1 Ubuntu安装ETCD
以下配置均在Ubuntu16.04系统中。 (1)使用wget命令对ETCD进行安装
wget https://github.com/etcd-io/etcd/releases/download/v3.3.10/etcd-v3.3.10-linux-amd64.tar.gz
(2)下载后,解压并移动在指定目录
tar zxvf etcd-v3.3.10-linux-amd64.tar.gz
mv etcd-v3.3.10-linux-amd64 /opt/etcd-v3.3.10
(3)配置环境变量 在终端中,打开bashrc
sudo gedit ~/.bashrc
在bashrc末尾,设置如下环境变量:
export ETCDCTL_API=3 # 指定ETCD版本
export ETCD=/home/xxx/go/gopath/src/github.com/etcd-v3.3.10/etcd # 设置ETCD链接路径,使ETCD在任何目录下都可以运行
export PATH=$PATH:$ETCD # 将ETCD环境变量添加到全局PATH中
注意:在etcd 3.0以上的版本中,即存在v2的版本,又有v3,因此需要在环境变量中指定所用版本,这里使用v3的版本,否则使用etcdctl put和get命令不生效。 在环境变量中配置ETCDCTL_API=2,使用etcdctl 可以查看 api2的命令; 在环境变量中配置ETCDCTL_API=2,使用etcdctl 可以查看 api3的命令。 (4)启动ETCD
~/go/gopath/src/github.com/etcd-v3.3.10$ ./etcd
2020-10-09 10:06:43.210921 I | etcdmain: etcd Version: 3.3.10
2020-10-09 10:06:43.210984 I | etcdmain: Git SHA: 27fc7e2
2020-10-09 10:06:43.210990 I | etcdmain: Go Version: go1.10.4
2020-10-09 10:06:43.210993 I | etcdmain: Go OS/Arch: linux/amd64
2020-10-09 10:06:43.210996 I | etcdmain: setting maximum number of CPUs to 8, total number of available CPUs is 8
2020-10-09 10:06:43.211005 W | etcdmain: no data-dir provided, using default data-dir ./default.etcd
2020-10-09 10:06:43.611421 I | embed: listening for peers on http://localhost:2380
2020-10-09 10:06:43.612071 I | embed: listening for client requests on localhost:2379
2020-10-09 10:06:43.618801 I | etcdserver: name = default
2020-10-09 10:06:43.618989 I | etcdserver: data dir = default.etcd
2020-10-09 10:06:43.619090 I | etcdserver: member dir = default.etcd/member
2020-10-09 10:06:43.619121 I | etcdserver: heartbeat = 100ms
2020-10-09 10:06:43.619132 I | etcdserver: election = 1000ms
2020-10-09 10:06:43.619160 I | etcdserver: snapshot count = 100000
2020-10-09 10:06:43.619215 I | etcdserver: advertise client URLs = http://localhost:2379
2020-10-09 10:06:43.619298 I | etcdserver: initial advertise peer URLs = http://localhost:2380
2020-10-09 10:06:43.619332 I | etcdserver: initial cluster = default=http://localhost:2380
2020-10-09 10:06:43.641714 I | etcdserver: starting member 8e9e05c52164694d in cluster cdf818194e3a8c32
2020-10-09 10:06:43.641931 I | raft: 8e9e05c52164694d became follower at term 0
2020-10-09 10:06:43.642163 I | raft: newRaft 8e9e05c52164694d [peers: [], term: 0, commit: 0, applied: 0, lastindex: 0, lastterm: 0]
2020-10-09 10:06:43.642261 I | raft: 8e9e05c52164694d became follower at term 1
2020-10-09 10:06:43.679850 W | auth: simple token is not cryptographically signed
2020-10-09 10:06:43.692368 I | etcdserver: starting server... [version: 3.3.10, cluster version: to_be_decided]
2020-10-09 10:06:43.694076 I | etcdserver: 8e9e05c52164694d as single-node; fast-forwarding 9 ticks (election ticks 10)
2020-10-09 10:06:43.722167 I | etcdserver/membership: added member 8e9e05c52164694d [http://localhost:2380] to cluster cdf818194e3a8c32
2020-10-09 10:06:44.061949 I | raft: 8e9e05c52164694d is starting a new election at term 1
2020-10-09 10:06:44.062420 I | raft: 8e9e05c52164694d became candidate at term 2
2020-10-09 10:06:44.062579 I | raft: 8e9e05c52164694d received MsgVoteResp from 8e9e05c52164694d at term 2
2020-10-09 10:06:44.062797 I | raft: 8e9e05c52164694d became leader at term 2
2020-10-09 10:06:44.063156 I | raft: raft.node: 8e9e05c52164694d elected leader 8e9e05c52164694d at term 2
2020-10-09 10:06:44.064115 I | etcdserver: setting up the initial cluster version to 3.3
2020-10-09 10:06:44.066910 N | etcdserver/membership: set the initial cluster version to 3.3
2020-10-09 10:06:44.067230 I | etcdserver: published {Name:default ClientURLs:[http://localhost:2379]} to cluster cdf818194e3a8c32
2020-10-09 10:06:44.067379 I | embed: ready to serve client requests
2020-10-09 10:06:44.067832 I | etcdserver/api: enabled capabilities for version 3.3
2020-10-09 10:06:44.068614 E | etcdmain: forgot to set Type=notify in systemd service file?
2020-10-09 10:06:44.074200 N | embed: serving insecure client requests on 127.0.0.1:2379, this is strongly discouraged!
proto: no coders for int
proto: no encoder for ValueSize int [GetProperties]
2 ETCD简单使用
完成上面的安装后,可以在任何目录中运行ETCD命令,以检查版本、设置配置信息、获取指定key等。 (1)查看ETCD版本
$ ./etcd -version
etcd Version: 3.3.10
Git SHA: 27fc7e2
Go Version: go1.10.4
Go OS/Arch: linux/amd64
(2)设置key-value
$ ./etcdctl put k1 v1
OK
(3)获取指定key
$ ./etcdctl get k1
k1
v1
(4)查看rest api版本信息 启动ETCD后,可以通过如下命令查看rest api所使用的etcd的版本信息:
$curl http://127.0.0.1:2379/version
{"etcdserver":"3.3.10","etcdcluster":"3.3.0"}
默认2379和2380端口只在127.0.0.1,即本机上监听。
(5)通过ss命令查看详细的TCP和连接状态信息 ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:6017 0.0.0.0:*
LISTEN 0 128 127.0.0.1:6018 0.0.0.0:*
LISTEN 0 128 127.0.0.1:6019 0.0.0.0:*
LISTEN 0 128 127.0.0.1:6020 0.0.0.0:*
LISTEN 0 128 127.0.0.1:6021 0.0.0.0:*
LISTEN 0 128 127.0.0.1:2379 0.0.0.0:*
LISTEN 0 128 127.0.0.1:2380 0.0.0.0:*
LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 5 127.0.0.1:631 0.0.0.0:*
LISTEN 0 128 127.0.0.1:6010 0.0.0.0:*
LISTEN 0 128 127.0.0.1:43325 0.0.0.0:*
LISTEN 0 128 127.0.0.1:6015 0.0.0.0:*
LISTEN 0 128 127.0.0.1:6016 0.0.0.0:*
LISTEN 0 128 *:39297 *:*
LISTEN 0 128 [::1]:6017 [::]:*
LISTEN 0 128 [::1]:6018 [::]:*
LISTEN 0 128 [::1]:6019 [::]:*
LISTEN 0 128 [::1]:6020 [::]:*
LISTEN 0 128 [::1]:6021 [::]:*
LISTEN 0 80 *:3306 *:*
LISTEN 0 128 *:45717 *:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 5 [::1]:631 [::]:*
LISTEN 0 128 [::1]:6010 [::]:*
LISTEN 0 128 *:8090 *:*
LISTEN 0 128 [::1]:6015 [::]:*
LISTEN 0 128 [::1]:6016 [::]:*
ss -tnl命令,表示显示处于监听状态的TCP套接字,不解析服务器的名称。
扩展,以下是ss命令格式和参数。 命令格式:ss [参数] [过滤]
-h, --help 帮助信息
-V, --version 程序版本信息
-n, --numeric 不解析服务名称
-r, --resolve 解析主机名
-a, --all 显示所有套接字(sockets)
-l, --listening 显示监听状态的套接字(sockets)
-o, --options 显示计时器信息
-e, --extended 显示详细的套接字(sockets)信息
-m, --memory 显示套接字(socket)的内存使用情况
-p, --processes 显示使用套接字(socket)的进程
-i, --info 显示 TCP内部信息
-s, --summary 显示套接字(socket)使用概况
-4, --ipv4 仅显示IPv4的套接字(sockets)
-6, --ipv6 仅显示IPv6的套接字(sockets)
-0, --packet 显示 PACKET 套接字(socket)
-t, --tcp 仅显示 TCP套接字(sockets)
-u, --udp 仅显示 UCP套接字(sockets)
-d, --dccp 仅显示 DCCP套接字(sockets)
-w, --raw 仅显示 RAW套接字(sockets)
-x, --unix 仅显示 Unix套接字(sockets)
-f, --family=FAMILY 显示 FAMILY类型的套接字(sockets),FAMILY可选,支持 unix, inet, inet6, link, netlink
-A, --query=QUERY, --socket=QUERY
QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
-D, --diag=FILE 将原始TCP套接字(sockets)信息转储到文件
-F, --filter=FILE 从文件中都去过滤器信息
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
(6)后台启动时指定IP 若想通过机器IP访问则需要启动时指定IP
$ ./etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380
2020-09-28 18:40:02.623598 I | etcdmain: etcd Version: 3.3.10
2020-09-28 18:40:02.644888 I | etcdmain: Git SHA: 27fc7e2
2020-09-28 18:40:02.644896 I | etcdmain: Go Version: go1.10.4
2020-09-28 18:40:02.644899 I | etcdmain: Go OS/Arch: linux/amd64
2020-09-28 18:40:02.644904 I | etcdmain: setting maximum number of CPUs to 8, total number of available CPUs is 8
2020-09-28 18:40:02.659594 I | etcdmain: advertising using detected default host "192.xxx.xx.xxx"
2020-09-28 18:40:02.659635 W | etcdmain: no data-dir provided, using default data-dir ./default.etcd
2020-09-28 18:40:02.686171 C | etcdmain: listen tcp 0.0.0.0:2380: bind: address already in use
$ nohup ./etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380 > /tmp/etcd.log 2>&1 &
[1] 42860
0.0.0.0:2379 表示任何ip都可以访问
参考
Ubuntu 搭建etcd ETCD 安装、简介、使用REST API golang etcd简明教程 彻底搞懂 etcd 系列文章(二):etcd 的多种安装姿势 每天一个linux命令(57):ss命令 etcd介绍