Linux下ETCD安装、配置、命令
介绍etcd的概念。linux实操安装etcd以及一些常用命令
1:介绍ETCD
1.1:什么是ETCD
etcd(分布式键值存储)是一个开源的分布式系统工具,用于可靠地存储和提供键值对数据。
以下是 etcd 的主要特性和用途:
- 分布式一致性存储: etcd 提供一个分布式键值存储系统,数据被分布式地存储在多个节点上。etcd 使用 Raft 协议来确保一致性和容错性,保证在节点故障或网络分区情况下数据的可用性和一致性。
- 配置管理: etcd 常用于配置管理,应用程序可以将配置信息存储在 etcd 中,并通过监听 etcd 中的配置变更来动态调整应用程序行为。
- 服务注册和服务发现: etcd 可以用作服务注册和服务发现的组件。微服务架构中的服务可以在 etcd 中注册其地址和元数据,其他服务则可以通过 etcd 查询并发现可用的服务实例。
- 分布式锁: etcd 提供了基于分布式锁的机制,用于协调多个节点之间的并发访问,以确保一致性和可靠性。
- 观察者模式: etcd 支持观察者模式,即客户端可以监听键值的变更事件。这使得应用程序可以实时响应 etcd 中数据的变化。
- 容器编排: Kubernetes 使用 etcd 作为其默认的分布式数据存储,用于存储集群状态、配置信息和其他重要数据。
- 分布式系统基础设施: etcd 作为分布式系统的基础设施组件,可以用于构建各种分布式应用程序和系统。
etcd 通常通过 HTTP 或 gRPC 提供 API,允许应用程序通过简单的接口与其交互。由于其可靠性和稳定性,etcd 在构建可扩展、分布式、高可用的系统中发挥着重要的作用。
1.2:优点
- 分布式一致性: etcd 使用 Raft 协议来实现分布式一致性,确保数据的可靠性和一致性。Raft 协议提供了强一致性和容错性,即使在节点故障或网络分区的情况下,etcd 也能保持一致性。
- 高可用性: etcd 支持数据的多副本存储和自动故障转移。通过在多个节点上存储数据的副本,etcd 提供了高可用性,即使其中一部分节点发生故障,系统仍能保持可用。
- 强大的观察者模式: etcd 支持观察者模式,允许客户端监听键值的变更事件。这使得应用程序能够实时响应 etcd 中数据的变化,支持实时配置更新和通知机制。
- 灵活的数据模型: etcd 提供简单的键值对数据模型,同时支持对数据的复杂查询和过滤。这使得 etcd 可以适应各种应用场景,包括配置管理、服务发现等。
- 轻量级和高性能: etcd 被设计为轻量级和高性能的分布式存储系统。其简单的设计和高效的实现使其能够处理大规模的数据和请求。
- 容器编排的标准: etcd 是容器编排系统 Kubernetes 的默认分布式数据存储。这使得 etcd 成为构建可扩展和可靠的容器化应用的标准选择。
- 开源和活跃的社区: etcd 是一个开源项目,拥有活跃的社区支持。这意味着用户可以获得及时的更新、bug 修复和安全补丁。
- 多语言支持: etcd 提供了多种语言的客户端库,使得开发者可以使用多种编程语言轻松地与 etcd 进行交互。
- 支持 TLS 加密: etcd 提供了对传输层安全性(TLS)的支持,确保数据在传输过程中的安全性。
总体而言,etcd 通过其一致性、高可用性、观察者模式等特性,为分布式系统提供了强大的基础设施。这些优点使得 etcd 在构建现代分布式应用和服务时非常有价值。
1.3:图解
2:安装
2.1:liunx安装
Release v3.5.10 · etcd-io/etcd · GitHub
1:配置环境变量
将文件夹中etcd和etcdctl两个文件添加可执行文件路径到环境变量PATH中。
- etcd是服务端,etcdctl是运维人员操作的控制端,一般只需要装etcd,现在是学习就都装在同一台机器。
- PS:用echo $PATH查看自己的环境变量路径
# 移动可执行文件位置
mv etcd /usr/local/bin
mv etcdctl /usr/local/bin
# 修改profile文件,
vim /etc/profile
# 在文件最后加入变量,因为etcd默认使用V2版本,我们需要V3版本的API。
export ETCDCTL_API=3
# 使环境变量生效
source /etc/profile
2:查看版本信息
etcdctl version
3:创建etcd配置文件,一定需要确认用户对数据目录etcd有读写权限,否则服务可能无法正确启动
[root@Cent0S7 ~]# mkdir -p /var/lib/etcd/
[root@Cent0S7 ~]# cat <<EOF | sudo tee /etc/etcd.conf
#节点名称
ETCD_NAME=$(hostname -s)
#数据存放位置
ETCD_DATA_DIR=/var/lib/etcd/
EOF
4:创建开机启动文件
[root@Cent0S7 ~]# cat <<EOF | sudo tee /etc/systemd/system/etcd.service
[Unit]
Description=Etcd Server
Documentation=https://github.com/coreos/etcd
After=network.target
[Service]
User=root
Type=notify
#这个文件特别关键,etcd使用的环境变量都需要通过环境变量文件读取
EnvironmentFile=-/etc/etcd.conf
ExecStart=/usr/local/bin/etcd
Restart=on-failure
RestartSec=10s
LimitNOFILE=40000
[Install]
WantedBy=multi-user.target
EOF
5:重新加载配置 & 开机启动 & 启动etcd
[root@Cent0S7 ~]# systemctl daemon-reload && systemctl enable etcd && systemctl start etcd
6:开机启动,设置状态enabled:
[root@Cent0S7 ~]# systemctl list-unit-files etcd.service
UNIT FILE STATE
etcd.service enabled
1 unit files listed.
7:查看etcd状态:
[root@Cent0S7 ~]# systemctl show etcd.service
Type=notify
Restart=on-failure
NotifyAccess=main
RestartUSec=10s
TimeoutStartUSec=1min 30s
TimeoutStopUSec=1min 30s
WatchdogUSec=0
WatchdogTimestamp=Sun 2020-11-29 22:44:07 CST
WatchdogTimestampMonotonic=9160693425
------ 剩余内容 (略) -------
8:查看端口是否启动
CentOS默认没有装netstat,需要 # yum install -y net-tools 自己装
[root@Cent0S7 ~]# netstat -an |grep 2379
tcp 0 0 127.0.0.1:2379 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:53156 127.0.0.1:2379 ESTABLISHED
tcp 0 0 127.0.0.1:2379 127.0.0.1:53156 ESTABLISHED
2.2:命令
-
设置键值对:
etcdctl put key value
示例:
etcdctl put /database/url "mysql://user:password@localhost:3306/db"
-
获取键值对:
etcdctl get key
示例:
etcdctl get /database/url
-
递归获取键值对:
etcdctl get --prefix key
示例:
etcdctl get --prefix /database
-
删除键值对:
etcdctl del key
示例:
etcdctl del /database/url
-
监视键变化:
etcdctl watch key
示例:
etcdctl watch /database/url
-
创建租约并将键值与租约关联:
etcdctl lease grant TTL etcdctl put --lease=LEASE_ID key value
示例:
etcdctl lease grant 60 etcdctl put --lease=LEASE_ID /session/user1 "John Doe"
-
查看租约信息:
etcdctl lease timetolive LEASE_ID
示例:
etcdctl lease timetolive LEASE_ID
-
撤销租约:
etcdctl lease revoke LEASE_ID
示例:
etcdctl lease revoke LEASE_ID
-
查看成员列表:
etcdctl member list
-
查看成员详细信息:
etcdctl member status MEMBER_ID
示例:
etcdctl member status 1234abcd5678efgh
-
事务操作:
codeetcdctl txn <<EOF txn details... EOF
示例:
codeetcdctl txn <<EOF put key1 value1 put key2 value2 EOF
2.3:权限管理
在 etcd 中,权限操作通常通过 Role-Based Access Control (RBAC) 来管理。以下是一些常见的 etcd 权限操作:
-
创建用户: 使用 etcdctl 命令创建用户账号,通常需要提供用户名和密码。
etcdctl user add <username>:<password>
-
为用户授予权限: 创建用户后,你可以为其授予特定的权限。这通常涉及到创建角色和将角色分配给用户。
etcdctl role add <rolename> etcdctl role grant-permission <rolename> <permission-type> <key> <range-end> etcdctl user grant-role <username> <rolename>
例如:
etcdctl role add readwrite etcdctl role grant-permission readwrite readwrite /path/to/key/* etcdctl user grant-role user1 readwrite
上述示例中,创建了一个名为 “readwrite” 的角色,并授予了该角色对 “/path/to/key/*” 范围内键的读写权限。然后,将该角色授予了用户 “user1”。
-
列出用户、角色和权限: 你可以使用 etcdctl 命令列出已创建的用户、角色和权限。
etcdctl user list etcdctl role list etcdctl user get <username> etcdctl role get <rolename>
例如:
etcdctl user list etcdctl role list etcdctl user get user1 etcdctl role get readwrite
-
删除用户和角色: 如果需要,你可以使用 etcdctl 删除用户和角色。
etcdctl user remove <username> etcdctl role remove <rolename>
例如:
etcdctl user remove user1 etcdctl role remove readwrite
请注意,etcd 的权限管理可能会因版本而异,因此确保查阅你使用的 etcd 版本的文档以获取准确的信息。此外,etcd 也支持 TLS 认证,可以进一步加强安全性。
更多推荐
所有评论(0)