一、准备工作:
etcd构建自身高可用集群主要有三种形式:
- 静态发现: 预先已知etcd集群中有哪些节点,在启动时通过--initial-cluster参数直接指定好etcd的各个节点地址
- etcd动态发现:
静态配置前提是在搭建集群之前已经提前知道各节点的信息,而实际应用中可能存在预先并不知道各节点ip的情况,这时可通过已经搭建的etcd来辅助搭建新的etcd集群。通过已有的etcd集群作为数据交互点,然后在扩展新的集群时实现通过已有集群进行服务发现的机制。比如官方提供的:discovery.etcd.io
- DNS动态发现: 通过DNS查询方式获取其他节点地址信息
1、集群搭建
- 安装服务(etcd的安装)
- 编辑etcd.conf文件,添加集群信息注意修改对应的ip
etcd.conf1
######################################################### ###### ?请根据各节点实际情况修改配置:1/3/4/5/6/7 ?###### ######################################################### #[Member] #1.节点名称,必须唯一 ETCD_NAME="etcd01"
#2.设置数据保存的目录 ETCD_DATA_DIR="/var/lib/etcd"
#3.用于监听其他etcd member的url ETCD_LISTEN_PEER_URLS="http://192.168.44.138:2380"
#4.该节点对外提供服务的地址 ETCD_LISTEN_CLIENT_URLS="http://192.168.44.138:2379,http://127.0.0.1:2379"
#[Clustering] #5.对外公告的该节点客户端监听地址 ETCD_ADVERTISE_CLIENT_URLS="http://192.168.44.138:2379"
#6.该节点成员对等URL地址,且会通告集群的其余成员节点 ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.44.138:2380"
#7.集群中所有节点的信息 ETCD_INITIAL_CLUSTER="etcd01=http://192.168.44.138:2380,etcd02=http://192.168.44.139:2380"
#8.创建集群的token,这个值每个集群保持唯一 ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
#9.初始集群状态,新建集群的时候,这个值为new; ETCD_INITIAL_CLUSTER_STATE="new"
#10.flannel操作etcd使用的是v2的API,而kubernetes操作etcd使用的v3的API # ? 为了兼容flannel,将默认开启v2版本,故配置文件中设置? ETCD_ENABLE_V2="true"
?etcd.conf2
?######################################################### ###### ?请根据各节点实际情况修改配置:1/3/4/5/6/7 ?###### ######################################################### #[Member] #1.节点名称,必须唯一 ETCD_NAME="etcd02"
#2.设置数据保存的目录 ETCD_DATA_DIR="/var/lib/etcd"
#3.用于监听其他etcd member的url ETCD_LISTEN_PEER_URLS="http://192.168.44.139:2380"
#4.该节点对外提供服务的地址 ETCD_LISTEN_CLIENT_URLS="http://192.168.44.139:2379,http://127.0.0.1:2379"
#[Clustering] #5.对外公告的该节点客户端监听地址 ETCD_ADVERTISE_CLIENT_URLS="http://192.168.44.139:2379"
#6.该节点成员对等URL地址,且会通告集群的其余成员节点 ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.44.139:2380"
#7.集群中所有节点的信息 ETCD_INITIAL_CLUSTER="etcd01=http://192.168.44.138:2380,etcd02=http://192.168.44.139:2380"
#8.创建集群的token,这个值每个集群保持唯一 ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
#9.初始集群状态,新建集群的时候,这个值为new; ETCD_INITIAL_CLUSTER_STATE="new"
#10.flannel操作etcd使用的是v2的API,而kubernetes操作etcd使用的v3的API # ? 为了兼容flannel,将默认开启v2版本,故配置文件中设置? ETCD_ENABLE_V2="true"
修改/etc/etcd/etcd.conf文件后,要先删除/var/lib/etcd目录下保存的数据,再重新启用服务,不然失败
cd /var/lib/etcd && rm -rf *
- 为节点etcd01创建一个etcd服务 /etc/systemd/system/etcd.service
?etcd.service
[Unit] Description=Etcd Server Documentation=https://github.com/etcd-io/etcd After=network.target
[Service] User=root Type=notify ## 根据实际情况修改EnvironmentFile和ExecStart这两个参数值 ## 1.EnvironmentFile即配置文件的位置,注意“-”不能少 EnvironmentFile=-/etc/etcd/etcd.conf ## 2.ExecStart即etcd启动程序位置 ExecStart=/usr/local/bin/etcd Restart=always RestartSec=10s LimitNOFILE=65536
[Install] WantedBy=multi-user.target
systemctl daemon-reload
firewall-cmd --zone=public --add-port=2379/tcp --permanent? 开启2379 firewall-cmd --zone=public --add-port=2380/tcp --permanent 开启2380 firewall-cmd --reload? ?重启 firewall-cmd --list-port? 查看开启防火墙的端口
?
??
然后启动?
master-16 etcd[25461]: request cluster ID mismatch (got bdd7c7c32bde1208 want 698851d67fea3c17)
原因: 集群ip地址变化后,除了修改/etc/etcd/etcd.conf 文件并重新启用服务外,还需要删除/var/lib/etcd目录下保存的数据 解决办法 :删除了etcd集群所有节点中的--data_dir的内容
systemctl daemon-reload? 刷新 systemctl enable etcd? 启动 systemctl start etcd? ?启动 systemctl status etcd? 查看状态 systemctl stop etcd? 停止 systemctl restart etcd? 重启
在另一台虚拟机做同样操作
2.集群测试
各节点重启启动完成后,在任意节点执行etcdctl member list可列所有集群节点信息
etcdctl member list etcdctl member list -w table etcdctl endpoint health etcdctl endpoint status
http命令
?etcdctl --endpoints=http://192.168.44.139:2379,http://192.168.44.139:2379,http://192.168.44.139:2379 endpoint health etcdctl --endpoints=http://192.168.44.139:2379 endpoint health? ? etcdctl --endpoints=http://192.168.44.139:2379 member list -w table
?
|