ETCD集群节点:
角色 | 系统 | 节点 |
master | CentOS-7 | 192.168.10.5 |
node-1 | CentOS-7 | 192.168.10.6 |
node-2 | CentOS-7 | 192.168.10.7 |
yum安装etcd
#配置阿里epel源: mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install etcd yum list installed |grep -i etcd
Master配置修改介绍
[root@master etcd]# egrep -v "^$|^#" /etc/etcd/etcd.conf ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #etcd数据保存目录 ETCD_LISTEN_PEER_URLS="http://192.168.10.5:2380" #集群内部通信使用的URL ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" #供外部客户端使用的url ETCD_NAME="etcd01" #etcd实例名称 ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.10.5:2380" #广播给集群内其他成员访问的URL ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379" #广播给外部客户端使用的url ETCD_INITIAL_CLUSTER="etcd01=http://192.168.10.5:2380,etcd02=http://192.168.10.6:2380,etcd03=http://192.168.10.7:2380" #初始集群成员列表 ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" #集群的名称 ETCD_INITIAL_CLUSTER_STATE="new" #初始集群状态,new为新建集群
node1 etcd 配置
[root@node1 etcd]# egrep -v "^$|^#" /etc/etcd/etcd.conf ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="http://192.168.10.6:2380" ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" ETCD_NAME="etcd02" ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.10.6:2380" ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379" ETCD_INITIAL_CLUSTER="etcd01=http://192.168.10.5:2380,etcd02=http://192.168.10.6:2380,etcd03=http://192.168.10.7:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="exist"
node2 etcd 配置
[root@node2 ~]# egrep -v "^$|^#" /etc/etcd/etcd.conf ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="http://192.168.10.7:2380" ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" ETCD_NAME="etcd03" ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.10.7:2380" ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379" ETCD_INITIAL_CLUSTER="etcd01=http://192.168.10.5:2380,etcd02=http://192.168.10.6:2380,etcd03=http://192.168.10.7:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="exist"
添加系统服务命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[root@localhost etcd] # cat /usr/lib/systemd/system/etcd.service [Service] Type=notify WorkingDirectory= /var/lib/etcd/ EnvironmentFile=- /etc/etcd/etcd .conf User=etcd # set GOMAXPROCS to number of processors ExecStart= /bin/bash -c "GOMAXPROCS=$(nproc) /usr/bin/etcd \ --name=\"${ETCD_NAME}\" \ --data- dir =\"${ETCD_DATA_DIR}\" \ --listen-peer-urls=\"${ETCD_LISTEN_PEER_URLS}\" \ --listen-client-urls=\"${ETCD_LISTEN_CLIENT_URLS}\" \ --initial-advertise-peer-urls=\"${ETCD_INITIAL_ADVERTISE_PEER_URLS}\" \ --advertise-client-urls=\"${ETCD_ADVERTISE_CLIENT_URLS}\" \ --initial-cluster=\"${ETCD_INITIAL_CLUSTER}\" \ --initial-cluster-token=\"${ETCD_INITIAL_CLUSTER_TOKEN}\" \ --initial-cluster-state=\ "${ETCD_INITIAL_CLUSTER_STATE}\"" Restart=on-failure LimitNOFILE=65536 |
以上操作在 master、node2、node3 节点上都需要操作,需要修改对应的ip
启动 etcd
依次启动 node1、node2、node3 节点的 etcd
1
2
3
|
systemctl start etcd.service systemctl status etcd.service systemctl enable etcd.service |
验证 etcd集群
# 查看集群节点 [root@master etcd]# etcdctl member list 315fd62e577c4037: name=etcd03 peerURLs=http://192.168.10.7:2380 clientURLs=http://0.0.0.0:2379 isLeader=false 4c5d727d37966a87: name=etcd01 peerURLs=http://192.168.10.5:2380 clientURLs=http://0.0.0.0:2379 isLeader=true f617da66fb9b90ad: name=etcd02 peerURLs=http://192.168.10.6:2380 clientURLs=http://0.0.0.0:2379 isLeader=false #查看集群健康状态: [root@master etcd]# etcdctl cluster-health member 315fd62e577c4037 is healthy: got healthy result from http://0.0.0.0:2379 member 4c5d727d37966a87 is healthy: got healthy result from http://0.0.0.0:2379 member f617da66fb9b90ad is healthy: got healthy result from http://0.0.0.0:2379 cluster is healthy
设置键值:
在一个节点设置值 [root@master etcd]# etcdctl set /test/key "test kubernetes" test kubernetes 在另一个节点获取值 [root@node1 etcd]# etcdctl get /test/key test kubernetes key存在的方式和zookeeper类似,为 /路径/key 设置完之后,其他集群也可以查询到该值 如果dir和key不存在,该命令会创建对应的项
更新键值:
[root@master etcd]# etcdctl update /test/key "test kubernetes cluster" test kubernetes cluster [root@node1 etcd]# etcdctl get /test/key test kubernetes cluster
删除键值:
[root@master etcd]# etcdctl rm /test/key PrevNode.Value: test kubernetes cluster # 当键不存在时,会报错 [root@node1 etcd]# etcdctl get /test/key Error: 100: Key not found (/test/key) [15]
通过api接口验证
验证集群的状态,从三个node返回的v2/members数据是一样的值。
curl -L http://127.0.0.1:2380/v2/members
通过curl添加查询信息
curl -L http://127.0.0.1:32789/v2/keys/foo -XPUT -d value="Hello foo"
curl -L http://127.0.0.1:32789/v2/keys/foo1/foo1 -XPUT -d value="Hello foo1"
curl -L http://127.0.0.1:32789/v2/keys/foo2/foo2 -XPUT -d value="Hello foo2"
curl -L http://127.0.0.1:32789/v2/keys/foo2/foo21/foo21 -XPUT -d value="Hello foo21"
curl -L http://127.0.0.1:32787/v2/keys/foo
curl -L http://127.0.0.1:32787/v2/keys/foo2
curl -L http://127.0.0.1:32787/v2/keys/foo2?recursive=true