网站 宽屏窄屏自适应,wordpress如何使用dplayer,深圳住房和建设局网站登录界面,360云主机永久免费吗在分布式系统的复杂世界中#xff0c;确保有效的数据管理至关重要。分布式可靠的键值存储在维护跨分布式环境的数据一致性和可伸缩性方面起着关键作用。 在这个全面的教程中#xff0c;我们将深入研究etcd#xff0c;这是一个开源的分布式键值存储。我们将探索其基本概念、特… 在分布式系统的复杂世界中确保有效的数据管理至关重要。分布式可靠的键值存储在维护跨分布式环境的数据一致性和可伸缩性方面起着关键作用。 在这个全面的教程中我们将深入研究etcd这是一个开源的分布式键值存储。我们将探索其基本概念、特性和用例并提供一个动手快速入门指南。最后我们将把etcd与其他几个分布式键值存储进行比较以了解它的优势和独特之处。 分布式KV存储
分布式键值存储是一种NoSQL数据库它将数据存储为跨多个物理机或虚拟机的键值对。这种分布本质上增强了可伸缩性、容错性和性能。此外每个数据值都与唯一标识符键相关联。该模型对于某些用例非常高效例如缓存、配置管理和快速数据检索。
Apache Zookeeper、Consul和Redis是一些提供可靠键值存储的例子。
分布式键值存储是许多分布式系统的支柱为存储和检索数据提供了简单而强大的机制。
下面是分布式键值存储的一些重要特点
简单性包含键值对的基本数据结构使其易于理解和用于特定类型的应用程序。可伸缩性系统通过跨多个节点分配工作负载来高效处理不断增长的数据量和负载。可靠性它们确保数据一致性、容错性和可伸缩性。性能键值机制提供对数据的快速有效访问。此外通过将其分布在多个节点上减少单个机器上的负载。分布式由于数据分布在多个节点上因此性能得到了增强。
分布式键值存储已在各种场景中得到实际应用例如配置管理、缓存、会话存储、服务发现、主节点选举等。
Etcd简介
Etcd是一个分布式的、可靠的键值存储用于存储分布式系统中最关键的数据。它是一种简单、安全、快速和可靠的键值存储专为分布式系统的配置管理、服务发现和协调而设计。
Etcd是由CoreOS团队开发的现在是CNCF云原生计算基金会项目它提供了一个可靠的分布式数据存储可以在动态和可扩展的环境中协调配置和发现服务。
Etcd丰富的特性集使其成为分布式系统的通用且可靠的选择为云原生环境中的配置管理、服务发现和协调提供了必要的构建块。在某些情况下它可以达到每秒10,000次写。
让我们来了解一下它的一些主要特性 HTTP/gRPC API: etcd提供HTTP和gRPC API使其可与各种编程语言进行访问和互操作并轻松集成到不同类型的应用程序和框架中。 分布式一致性它在分布式设置中保持强一致性确保集群中的所有节点具有一致的数据视图。 高可用性etcd设计为高可用性具有自动领导选举和故障转移机制。因此etcd集群即使面对节点故障也能保持运行有助于提高系统的弹性。 支持监听机制etcd支持强一致性监听机制允许应用程序实时监视特定键值存储的更改。 原子事务它支持原子事务允许将多个键值操作组合在一起并作为单个原子单元执行从而维护数据一致性。 租约管理etcd引入了租约的概念允许键具有相关的生存时间TTL值从而在指定的期限之后自动删除它们。 基于角色的访问控制RBAC支持RBAC允许管理员为与集群交互的用户和应用程序定义角色和权限。 快照和备份提供了创建集群状态快照的机制并支持备份和恢复过程。因此它确保了灾难恢复和数据持久性。 可插拔存储后端etcd提供了一个可插拔的存储后端允许用户选择最适合他们需求的底层存储引擎例如etcd的默认存储引擎LevelDB或RocksDB。因此它提供了灵活性并允许基于特定用例和性能考虑进行优化。 与Kubernetes集成etcd是Kubernetes中的一个关键组件作为配置和状态信息的主要数据存储。这使得etcd成为容器编排的核心部分确保分布式系统可以有效地管理配置和扩展。 etcdctl这是命令行客户端工具用于与etcd集群进行交互和管理。
与etcd类似的解决方案还有:Apache ZooKeeper和Consul等实际选择取决于具体的项目需求。
etcd由于其简单性和云原生计算基金会CNCF的支持适合Kubernetes这样的云原生环境。Apache ZooKeeper是大规模部署的强大选择它提供了强大的一致性但也带来了额外的复杂性。另一方面Consul以简单和有效的服务发现而闻名它与HashiCorp堆栈无缝集成。
安全性、易用性和集成需求在决策过程中扮演着关键角色。每种工具都有其优势因此根据所需的特性和用例做出明智的选择对我们来说是至关重要的。
安装与配置
让我们了解如何配置和设置etcd以使其运行。etcd兼容Linux发行版如Ubuntu、CentOS和Windows。这里以Ubuntu为示例进行安装其他系统可以参考官方文档
$ sudo apt update
$ sudo apt install etcd
$ etcd --verisonetcd Version: 3.3.25
Git SHA: Not provided (use ./build instead of go build)
Go Version: go1.18.1
Go OS/Arch: linux/amd64我们有多钟方式配置etcd本文采用配置文件方式我们将创建具有基本设置的配置文件。
etcd配置文件是一个YAML文件其中包含用于配置etcd节点行为的设置和参数。这个文件对于定制etcd的各个方面非常重要比如网络设置、集群信息、身份验证和存储选项。让我们来看一个例子
# Example etcd-config.yml
# Node name, a unique identifier, in the etcd cluster
name: node-1# Data directory where etcd will store its data
data-dir: /var/lib/etcd/default.etcd# Listen addresses for client communication
listen-client-urls: http://127.0.0.1:2379,http://NODE-IP:2379# Advertise addresses for client communication
advertise-client-urls: http://NODE-IP:2379# Listen addresses for peer communication
listen-peer-urls: http://NODE-IP:2380# Advertise addresses for peer communication
initial-advertise-peer-urls: http://NODE-IP:2380# Initial cluster configuration
initial-cluster: node-1http://NODE-IP:2380,node-2http://NODE-IP:2380# Unique token for the etcd cluster
initial-cluster-token: etcd-cluster-1# Initial cluster state (new, existing, or standby)
initial-cluster-state: new# Enable authentication with a shared secret token
auth-token: some-secret-token# Enable authorization with RBAC
enable-authorization: true# Enable automatic compaction of the etcd key-value store
auto-compaction-mode: periodic
auto-compaction-retention: 1h# Secure communication settings (TLS)
client-transport-security:cert-file: /etc/etcd/server.crtkey-file: /etc/etcd/server.keyclient-cert-auth: truetrusted-ca-file: /etc/etcd/ca.crtpeer-transport-security:cert-file: /etc/etcd/peer.crtkey-file: /etc/etcd/peer.keyclient-cert-auth: truetrusted-ca-file: /etc/etcd/ca.crt1. 节点相关基础配置 name 含义指定节点在 etcd 集群中的名称它是集群内该节点的唯一标识符。在集群通信、识别等场景中起到关键作用便于区分不同节点。 示例中值node-1表示这个节点的名称为 node-1如果集群中有多个节点其他节点就会通过这个名称来识别它。 data-dir 含义定义了 etcd 存储其数据的目录路径。etcd 在运行过程中会将诸如键值对数据、集群相关的元数据等信息存储在此目录下需要确保对应的目录有合适的读写权限。 示例中值/var/lib/etcd/default.etcd表明数据会存储在该指定路径下。
2. 客户端通信相关配置 listen-client-urls 含义指定 etcd 节点监听客户端连接请求的地址列表。客户端通过这些地址来与 etcd 节点进行交互比如发送读写键值对的请求等。可以配置多个地址通常包含本地回环地址如 127.0.0.1方便本地测试以及对外暴露的节点 IP 地址NODE-IP 处需替换为实际节点可访问的 IP。 示例中值http://127.0.0.1:2379,http://NODE-IP:2379意味着客户端既可以通过本地回环地址 127.0.0.1 的 2379 端口也可以通过节点实际 IP 对应的 2379 端口与该 etcd 节点通信。 advertise-client-urls 含义对外宣告给客户端的用于连接该 etcd 节点的地址。客户端实际使用这些地址来发起请求一般来说就是节点可被外部访问到的地址和 listen-client-urls 中的对外地址部分通常是对应的。 示例中值http://NODE-IP:2379告知客户端通过这个节点 IP 和 2379 端口来连接此 etcd 节点进行操作。
3. 节点间对等体通信相关配置 listen-peer-urls 含义设置 etcd 节点监听其他节点对等体连接请求的地址用于集群内节点之间互相通信、同步数据、选举等集群相关操作指定的端口通常是 2380区别于客户端通信端口。 示例中值http://NODE-IP:2380表示节点会在自身的这个 IP 和 2380 端口上监听来自其他节点的连接。 initial-advertise-peer-urls 含义在集群初始化阶段向其他节点宣告自己用于对等通信的地址方便其他节点能准确找到并与之建立连接进行数据交互等集群协作操作。 示例中值http://NODE-IP:2380同样是用节点 IP 和 2380 端口来宣告给其他节点用于对等通信。
4. 集群初始化相关配置 initial-cluster 含义定义了集群初始的节点配置情况格式为 节点名称节点对等通信地址 的形式多个节点用逗号分隔。在集群启动初始化时各节点依据此配置来发现并连接其他节点构建起集群的初始拓扑结构。 示例中值node-1http://NODE-IP:2380,node-2http://NODE-IP:2380表明初始集群包含名为 node-1 和 node-2 的两个节点并且给出了它们用于对等通信的地址后续节点会按照此信息去相互连接组成集群。 initial-cluster-token 含义为 etcd 集群提供唯一的标识令牌。主要用于区分不同的集群特别是在多个集群存在于同一网络环境等场景下避免节点误加入到错误的集群中保证集群的独立性和唯一性。 示例中值etcd-cluster-1此为这个 etcd 集群的唯一标识。 initial-cluster-state 含义指定集群的初始状态有 new新创建集群、existing加入已存在的集群、standby备用状态比如用于容灾切换等场景等选项。这里配置为 new 表示要初始化创建一个全新的 etcd 集群。 示例中值new表明当前配置是用于启动新的 etcd 集群。
5. 安全认证与授权相关配置 auth-token 含义用于启用基于共享秘密令牌的身份验证机制。客户端在与 etcd 节点交互时需要提供这个对应的秘密令牌来证明自己的身份增强集群访问的安全性。 示例中值some-secret-token这就是集群中使用的共享秘密令牌实际使用中要妥善保管该值。 enable-authorization 含义设置是否启用基于角色的访问控制RBAC授权机制。启用后可以通过配置不同的角色、权限规则等来控制哪些用户或客户端能够对哪些键值对资源进行何种操作如读、写等进一步细化访问控制提升安全性。 示例中值true表示在该 etcd 集群中启用 RBAC 授权机制。
6. 数据自动压缩相关配置 auto-compaction-mode 含义定义 etcd 键值存储的自动压缩模式periodic 表示按照一定的时间周期来自动触发压缩操作以清理过期的、冗余的数据版本等节省存储空间优化存储性能。 示例中值periodic采用周期性自动压缩的模式。 auto-compaction-retention 含义配合自动压缩模式指定数据保留的时长示例中 1h 表示保留最近一小时的数据版本超过这个时间范围的数据版本会在自动压缩时被清理掉具体时长可根据实际需求和存储资源等情况进行调整。 示例中值1h即按一小时来设定数据保留期限用于自动压缩。
7. 安全通信TLS相关配置 client-transport-security 部分 cert-file指定客户端与 etcd 节点通信时节点使用的证书文件路径。该证书用于向客户端证明节点的身份合法性基于 TLS 机制保障通信安全。 示例中值/etc/etcd/server.crt是节点对应的服务器证书文件所在路径。 key-file定义节点私钥文件的路径私钥与证书配合使用用于在 TLS 加密通信中进行解密、签名等操作确保通信的安全性和数据完整性。 示例中值/etc/etcd/server.key指明了节点私钥文件存放位置。 client-cert-auth设置是否启用客户端证书认证。若为 true则客户端在连接 etcd 节点时也需要提供有效的证书来证明自己身份进一步增强客户端到节点通信的安全性。 示例中值true表示启用客户端证书认证机制。 trusted-ca-file指定信任的证书颁发机构CA的证书文件路径。节点通过此 CA 文件来验证客户端证书是否合法判断客户端是否可信构建起完整的证书信任链体系用于安全通信。 示例中值/etc/etcd/ca.crt即信任的 CA 证书文件所在路径。 peer-transport-security 部分 这部分配置与 client-transport-security 类似不过它主要针对的是集群内节点之间对等体通信的安全保障各个参数如 cert-file、key-file、client-cert-auth、trusted-ca-file含义与客户端通信安全配置对应参数一致只是作用于节点间通信场景确保节点间通信的保密性、完整性和身份验证等安全需求。
最后我们应该确保根据特定的需求和安全考虑来定制配置文件。编辑完文件后我们可以重新启动etcd服务以使更改生效。
启动etcd与交互
我们可以使用以下命令启动指定配置的etcd
$ ./etcd --config-fileetcd-config.yml此外我们可以使用etcdctl命令行工具与etcd交互该工具是为与etcd集群交互和管理而设计的。它便于管理员和开发人员直接从命令行在etcd集群上执行各种操作。让我们用几个例子来理解
# 存储值
$ etcdctl put mykey Hello, etcd!# 获取值
$ etcdctl get mykey
mykey
Hello, etcd!
# 监听值
$ etcdctl watch mykey在etcd中观察键允许我们接收有关键更改的实时通知无论值被修改还是键被删除。Watch事件提供有关更改性质的详细信息使应用程序能够动态地对etcd键值存储中的更新作出反应。
重要的是要注意监视键并不能防止它被删除。监听是用来观察变化的机制而不是用来控制或限制变化的。最后我们可以使用以下命令检查etcd集群的健康状况
$ etcdctl endpoint health如果我们使用的是安全的etcd集群那么我们可能需要提供额外的身份验证和安全选项例如在检查运行状况时指定-cacert、-cert和-key标志以指向证书和密钥文件。
etcd 开发示例
golang示例
首先确保已经安装了 go.etcd.io/etcd/clientv3 库示例代码如下
package mainimport (contextfmtgo.etcd.io/etcd/clientv3time
)func main() {// 配置客户端连接参数client, err : clientv3.New(clientv3.Config{Endpoints: []string{127.0.0.1:2379}, // etcd服务端地址可按需修改DialTimeout: 5 * time.Second,})if err! nil {fmt.Printf(连接etcd失败%v\n, err)return}defer client.Close()// 写入键值对到etcdctx, cancel : context.WithTimeout(context.Background(), time.Second)_, err client.Put(ctx, my-key, my-value)cancel()if err! nil {fmt.Printf(写入数据到etcd失败%v\n, err)return}// 从etcd读取键值对ctx, cancel context.WithTimeout(context.Background(), time.Second)resp, err : client.Get(ctx, my-key)cancel()if err! nil {fmt.Printf(从etcd读取数据失败%v\n, err)return}for _, ev : range resp.Kvs {fmt.Printf(键%s值%s\n, ev.Key, ev.Value)}
}简要解释代码如下
连接 etcd通过 clientv3.New 方法按照配置的连接端点示例中是本地 127.0.0.1:2379和超时时间来创建与 etcd 服务端的客户端连接。如果连接失败会打印错误信息并退出程序。
写入键值对使用 client.Put 方法向 etcd 中写入一个键为 my-key值为 my-value 的键值对操作设置了超时控制通过 context 来管理操作的生命周期。
读取键值对调用 client.Get 方法从 etcd 中读取键为 my-key 的键值对同样设置了超时读取成功后遍历返回结果并打印出键和值。
Rust示例
在cargo.toml中增加依赖
[dependencies]
etcd-client 0.12rust与etcd交互代码
use etcd_client::{Client, Error};
use std::time::Duration;#[tokio::main]
async fn main() - Result(), Error {// 连接etcd服务端let client Client::connect(vec![http://127.0.0.1:2379], Some(Duration::from_secs(5))).await?;// 写入键值对到etcdclient.put(my-rust-key, my-rust-value, None).await?;// 从etcd读取键值对let resp client.get(my-rust-key, None).await?;for kv in resp.kvs() {println!(键{}值{}, kv.key_str()?, kv.value_str()?);}Ok(())
}需要注意的是这些示例只是最基础的操作演示在实际应用中你可以根据具体需求进一步扩展功能比如处理更复杂的事务、使用租约、实现分布式锁等基于 etcd 的高级功能。同时确保 etcd 服务已经正确启动并能被访问到且相应的网络配置如端口等是准确的。
总结
在本文中我们全面地探讨了etcd讨论了它的基本概念、关键特性和实际应用。快速入门指南将帮助我们快速设置etcd并以编程方式与之交互。此外与其他分布式键值存储的比较突出了etcd的独特优势使其成为各种分布式系统场景的可靠选择。
了解分布式可靠的键值存储、分布式系统中数据的重要性以及etcd的功能将有助于我们在设计和实现分布式应用程序时做出明智的决策。最后作为许多分布式系统的骨干etcd的简单性、一致性和高可用性使其成为开发人员在复杂的分布式环境中有价值的工具。 文章转载自: http://www.morning.hpcpp.cn.gov.cn.hpcpp.cn http://www.morning.rkzb.cn.gov.cn.rkzb.cn http://www.morning.gxfzrb.com.gov.cn.gxfzrb.com http://www.morning.tntbs.cn.gov.cn.tntbs.cn http://www.morning.kfcfq.cn.gov.cn.kfcfq.cn http://www.morning.bkkgt.cn.gov.cn.bkkgt.cn http://www.morning.wgcng.cn.gov.cn.wgcng.cn http://www.morning.qjlkp.cn.gov.cn.qjlkp.cn http://www.morning.hnkkm.cn.gov.cn.hnkkm.cn http://www.morning.rtryr.cn.gov.cn.rtryr.cn http://www.morning.wmcng.cn.gov.cn.wmcng.cn http://www.morning.bfkrf.cn.gov.cn.bfkrf.cn http://www.morning.rdsst.cn.gov.cn.rdsst.cn http://www.morning.mmplj.cn.gov.cn.mmplj.cn http://www.morning.tpbhf.cn.gov.cn.tpbhf.cn http://www.morning.cnwpb.cn.gov.cn.cnwpb.cn http://www.morning.mqss.cn.gov.cn.mqss.cn http://www.morning.ppqzb.cn.gov.cn.ppqzb.cn http://www.morning.yrrnx.cn.gov.cn.yrrnx.cn http://www.morning.wtnyg.cn.gov.cn.wtnyg.cn http://www.morning.wmmjw.cn.gov.cn.wmmjw.cn http://www.morning.jikuxy.com.gov.cn.jikuxy.com http://www.morning.jqswf.cn.gov.cn.jqswf.cn http://www.morning.stwxr.cn.gov.cn.stwxr.cn http://www.morning.dlurfdo.cn.gov.cn.dlurfdo.cn http://www.morning.xtdms.com.gov.cn.xtdms.com http://www.morning.bzgpj.cn.gov.cn.bzgpj.cn http://www.morning.kdrjd.cn.gov.cn.kdrjd.cn http://www.morning.nxdqz.cn.gov.cn.nxdqz.cn http://www.morning.tkchg.cn.gov.cn.tkchg.cn http://www.morning.pcgjj.cn.gov.cn.pcgjj.cn http://www.morning.ptqds.cn.gov.cn.ptqds.cn http://www.morning.rjnrf.cn.gov.cn.rjnrf.cn http://www.morning.cfocyfa.cn.gov.cn.cfocyfa.cn http://www.morning.cgbgc.cn.gov.cn.cgbgc.cn http://www.morning.hybmz.cn.gov.cn.hybmz.cn http://www.morning.mtbth.cn.gov.cn.mtbth.cn http://www.morning.czwed.com.gov.cn.czwed.com http://www.morning.ywqw.cn.gov.cn.ywqw.cn http://www.morning.zxybw.cn.gov.cn.zxybw.cn http://www.morning.hwcln.cn.gov.cn.hwcln.cn http://www.morning.mgkb.cn.gov.cn.mgkb.cn http://www.morning.xxsrm.cn.gov.cn.xxsrm.cn http://www.morning.rbrhj.cn.gov.cn.rbrhj.cn http://www.morning.knczz.cn.gov.cn.knczz.cn http://www.morning.tthmg.cn.gov.cn.tthmg.cn http://www.morning.yqqxj26.cn.gov.cn.yqqxj26.cn http://www.morning.pbpcj.cn.gov.cn.pbpcj.cn http://www.morning.swzpx.cn.gov.cn.swzpx.cn http://www.morning.gywfp.cn.gov.cn.gywfp.cn http://www.morning.ygpdm.cn.gov.cn.ygpdm.cn http://www.morning.qpqwd.cn.gov.cn.qpqwd.cn http://www.morning.tmcmj.cn.gov.cn.tmcmj.cn http://www.morning.gryzk.cn.gov.cn.gryzk.cn http://www.morning.crkhd.cn.gov.cn.crkhd.cn http://www.morning.mdplm.cn.gov.cn.mdplm.cn http://www.morning.fdrch.cn.gov.cn.fdrch.cn http://www.morning.tzzkm.cn.gov.cn.tzzkm.cn http://www.morning.krbjb.cn.gov.cn.krbjb.cn http://www.morning.btqqh.cn.gov.cn.btqqh.cn http://www.morning.rlbg.cn.gov.cn.rlbg.cn http://www.morning.kybpj.cn.gov.cn.kybpj.cn http://www.morning.swkzk.cn.gov.cn.swkzk.cn http://www.morning.ssjry.cn.gov.cn.ssjry.cn http://www.morning.qgghr.cn.gov.cn.qgghr.cn http://www.morning.gpsr.cn.gov.cn.gpsr.cn http://www.morning.mkydt.cn.gov.cn.mkydt.cn http://www.morning.xrrbj.cn.gov.cn.xrrbj.cn http://www.morning.xrpwk.cn.gov.cn.xrpwk.cn http://www.morning.fksxs.cn.gov.cn.fksxs.cn http://www.morning.pbgnx.cn.gov.cn.pbgnx.cn http://www.morning.dbbcq.cn.gov.cn.dbbcq.cn http://www.morning.blqgc.cn.gov.cn.blqgc.cn http://www.morning.zmpsl.cn.gov.cn.zmpsl.cn http://www.morning.jzykw.cn.gov.cn.jzykw.cn http://www.morning.qnjcx.cn.gov.cn.qnjcx.cn http://www.morning.hxrg.cn.gov.cn.hxrg.cn http://www.morning.nmbbt.cn.gov.cn.nmbbt.cn http://www.morning.bnlkc.cn.gov.cn.bnlkc.cn http://www.morning.tqsmg.cn.gov.cn.tqsmg.cn