etcd配置详解
1.什么是etcd?
etcd是一个开源的分布式键值存储系统,它用于在集群中的多个节点之间共享数据。etcd最初由CoreOS团队开发,现在由Cloud Native Computing Foundation (CNCF) 维护。etcd通常与Kubernetes一起使用,以存储和同步Kubernetes集群的配置信息和元数据。除了Kubernetes之外,etcd还可以用于其他分布式系统,例如OpenStack、Apache Mesos等。
2.etcd的使用场景
1.Kubernetes集群控制平面的数据存储:etcd存储Kubernetes集群的配置信息、状态和元数据,确保在多个节点之间同步。
2.服务发现和负载均衡:etcd可以存储服务注册表,以便其他服务可以查询可用的服务实例并进行负载均衡。
3.分布式锁:etcd提供了一个基于租约的分布式锁实现,可以防止多个客户端同时修改相同的资源。
4.配置管理:etcd可以存储应用程序的配置信息,并允许应用程序在运行时动态更新这些配置。
5日志聚合:etcd可以用于存储日志收集器的配置和元数据,以便管理和监控日志收集器。
总之,etcd可以作为任何需要共享数据的分布式系统的通用数据存储解决方案。
3.etcd对比redis
tcd和Redis都是基于内存的键值对数据库,但它们有不同的设计目标和使用场景:
相对而言,etcd更加注重数据的一致性和高可用性,并提供了一些特定于分布式环境下的功能,例如基于租约的分布式锁。而Redis则更侧重于快速的读写性能和丰富的数据处理能力。
4.etcd配置
1.安装etcd
2.配置etcd
由于Archlinux安装etcd后生成的etcd.service文件中并没有指定etcd的配置文件,因此我们可以修改/usr/lib/systemd/system/etcd.service文件的配置参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| [Unit] Description=etcd key-value store Documentation=https://github.com/etcd-io/etcd After=network-online.target local-fs.target remote-fs.target time-sync.target Wants=network-online.target local-fs.target remote-fs.target time-sync.target
[Service] User=etcd Type=notify Environment=ETCD_DATA_DIR=/var/lib/etcd Environment=ETCD_NAME=%m ExecStart=/usr/bin/etcd --config-file /etc/etcd/etcd.conf #这里指定配置文件 Restart=always RestartSec=10s LimitNOFILE=40000
[Install] WantedBy=multi-user.target
|
3.编辑etcd配置文件
etcd配置文件以yaml文件语法格式编写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| name: "etcd-node-1"
initial-cluster-state: "new" initial-cluster-token: "etcd-cluster-1" initial-cluster: "etcd-node-1=http://192.168.0.1:2380,etcd-node-2=http://192.168.0.2:2380,etcd-node-3=http://192.168.0.3:2380"
listen-peer-urls: "http://192.168.0.1:2380"
client-transport-security: cert-file: "/path/to/client.crt" key-file: "/path/to/client.key" trusted-ca-file: "/path/to/ca.crt" peer-transport-security: cert-file: "/path/to/peer.crt" key-file: "/path/to/peer.key" trusted-ca-file: "/path/to/ca.crt"
debug: false
log-level: "info" log-outputs: ["stdout"]
data-dir: "/var/lib/etcd"
listen-client-urls: "http://0.0.0.0:2379,http://0.0.0.0:4001"
advertise-client-urls: "http://192.168.0.1:2379,http://192.168.0.1:4001"
|