利用二进制文件安装etcd的教程详解(4)

condition可以表示某个任务在不在队列。这个任务可以是所有排序任务的首个执行程序,也可以是拓扑结构中没有依赖的点。通常,必须执行这些任务后才能执行队列中的其他任务。

condition还可以表示其它的一类开始执行任务的通知。可以由控制程序指定,当condition出现变化时,开始执行队列任务。

场景七:集群监控与Leader竞选

通过etcd来进行监控实现起来非常简单并且实时性强。

前面几个场景已经提到Watcher机制,当某个节点消失或有变动时,Watcher会第一时间发现并告知用户。

节点可以设置TTL key,比如每隔30s发送一次心跳使代表该机器存活的节点继续存在,否则节点消失。

这样就可以第一时间检测到各节点的健康状态,以完成集群的监控要求。

另外,使用分布式锁,可以完成Leader竞选。这种场景通常是一些长时间CPU计算或者使用IO操作的机器,只需要竞选出的Leader计算或处理一次,就可以把结果复制给其他的Follower。从而避免重复劳动,节省计算资源。

这个的经典场景是搜索系统中建立全量索引。如果每个机器都进行一遍索引的建立,不但耗时而且建立索引的一致性不能保证。通过在etcd的CAS机制同时创建一个节点,创建成功的机器作为Leader,进行索引计算,然后把计算结果分发到其它节点。

场景八:为什么用etcd而不用ZooKeeper?

ZooKeeper的部署维护复杂,管理员需要掌握一系列的知识和技能;

而etcd其优点也很明显

简单。使用Go语言编写部署简单;使用HTTP作为接口使用简单;使用Raft算法保证强一致性让用户易于理解。

数据持久化。etcd默认数据一更新就进行持久化。

安全。etcd支持SSL客户端安全认证

# 安装etcd master node01 node02执行
mkdir -p /opt/kubernetes/{bin,cfg,ssl}
vim /opt/kubernetes/cfg/etcd.conf
复制代码
#[menmber]
ETCD_NAME="etcd01" #分别修改为修改为master node01 ndoe02的名称
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.1.251:2380" #分别修改为修改为master node01 ndoe02的IP
ETCD_LISTEN_CLIENT_URLS="https://192.168.1.251:2379" #分别修改为修改为master node01 ndoe02的IP
#[clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.1.251:2380" #分别修改为修改为master node01 ndoe02的IP
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.1.251:2379" #分别修改为修改为master node01 ndoe02的IP
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.1.251:2380,etcd02=https://192.168.1.252:2380,etcd03=https://192.168.1.253:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
复制代码
vim /opt/kubernetes/cfg/etcd.service
复制代码
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
EnvironmentFile=-/opt/kubernetes/cfg/etcd.conf
ExecStart=/opt/kubernetes/bin/etcd \
--name=${ETCD_NAME} \
--data-dir=${ETCD_DATA_DIR} \
--listen-client-urls=${ETCD_LISTEN_CLIENT_URLS} \
--listen-peer-urls=${ETCD_LISTEN_PEER_URLS} \
--advertise-client-urls=${ETCD_ADVERTISE_CLIENT_URLS} \
--initial-advertise-peer-urls=${ETCD_INITIAL_ADVERTISE_PEER_URLS} \
--initial-cluster=${ETCD_INITIAL_CLUSTER} \
--initial-cluster-token=${ETCD_INITIAL_CLUSTER} \
--initial-cluster-state=new \
--cert-file=/opt/kubernetes/ssl/server.pem \
--key-file=/opt/kubernetes/ssl/server-key.pem \
--peer-cert-file=/opt/kubernetes/ssl/server.pem \
--peer-key-file=/opt/kubernetes/ssl/server-key.pem \
--trusted-ca-file=/opt/kubernetes/ssl/ca.pem \
--peer-trusted-ca-file=/opt/kubernetes/ssl/ca.pem
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
复制代码
#添加免密登录
ssh-keygen -t rsa
ssh-copy-id root@node01
ssh-copy-id root@node02
#添加启动文件
cp /opt/kubernetes/cfg/etcd.service /usr/lib/systemd/system/etcd.service
#安装etcd
tar zxvf etcd-v3.2.24-linux-amd64.tar.gz
cp etcd-v3.2.24-linux-amd64/etcd* /opt/kubernetes/bin
#复制证书文件到指定目录
cp ca-key.pem server.pem ca.pem server-key.pem /opt/kubernetes/ssl
#启动etcd
systemctl start etcd
systemctl enable etcd
#查看日志
tail -f /var/log/messages
#测试
etcdctl --ca-file=/opt/kubernetes/ssl/ca.pem --cert-file=/opt/kubernetes/ssl/server.pem --key-file=/opt/kubernetes/ssl/server-key.pem --endpoints="https://192.168.1.251:2379,https://192.168.1.252:2379,https://192.168.1.253:2379" cluster-health
      

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/1679.html