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
内容版权声明:除非注明,否则皆为本站原创文章。