etcd节点如何部署

发布时间:2022-03-24 17:31:59 作者:iii
来源:亿速云 阅读:484
# etcd节点如何部署

## 1. 概述

etcd是一个高可用的分布式键值存储系统,常用于服务发现、配置共享和协调分布式系统。作为Kubernetes等云原生系统的核心组件,etcd的部署质量直接影响整个集群的稳定性。本文将详细介绍etcd节点的部署方案,涵盖单节点、集群部署以及生产环境最佳实践。

## 2. 环境准备

### 2.1 硬件要求

| 资源类型 | 最低要求 | 生产环境推荐 |
|---------|---------|-------------|
| CPU     | 2核     | 4核+        |
| 内存    | 4GB     | 8GB+        |
| 磁盘    | SSD 50GB | NVMe SSD 100GB+ |
| 网络    | 千兆网卡 | 万兆网卡+RDMA |

### 2.2 系统配置

```bash
# 关闭swap
sudo swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab

# 提升文件描述符限制
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf

# 内核参数调整
cat <<EOF | sudo tee /etc/sysctl.d/etcd.conf
vm.max_map_count = 262144
net.core.somaxconn = 2048
net.ipv4.tcp_max_syn_backlog = 1024
EOF
sudo sysctl --system

3. 单节点部署

3.1 二进制安装

ETCD_VER=v3.5.0
wget https://github.com/etcd-io/etcd/releases/download/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz
tar xvf etcd-${ETCD_VER}-linux-amd64.tar.gz
sudo mv etcd-${ETCD_VER}-linux-amd64/{etcd,etcdctl} /usr/local/bin/

3.2 启动单节点

etcd --name node1 \
  --data-dir /var/lib/etcd \
  --listen-client-urls http://0.0.0.0:2379 \
  --advertise-client-urls http://${NODE_IP}:2379 \
  --listen-peer-urls http://0.0.0.0:2380 \
  --initial-advertise-peer-urls http://${NODE_IP}:2380 \
  --initial-cluster node1=http://${NODE_IP}:2380 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-cluster-state new

3.3 验证安装

etcdctl put foo bar
etcdctl get foo

4. 集群部署

4.1 静态配置方式(推荐)

在三节点集群中(IP: 192.168.1.1, 192.168.1.2, 192.168.1.3):

节点1配置:

etcd --name node1 \
  --data-dir /var/lib/etcd \
  --listen-client-urls http://0.0.0.0:2379 \
  --advertise-client-urls http://192.168.1.1:2379 \
  --listen-peer-urls http://0.0.0.0:2380 \
  --initial-advertise-peer-urls http://192.168.1.1:2380 \
  --initial-cluster "node1=http://192.168.1.1:2380,node2=http://192.168.1.2:2380,node3=http://192.168.1.3:2380" \
  --initial-cluster-token etcd-cluster-1 \
  --initial-cluster-state new

节点2/3配置只需修改--name和IP地址即可。

4.2 动态发现服务

适用于大规模集群:

# 获取发现token
DISCOVERY_TOKEN=$(curl -s https://discovery.etcd.io/new?size=3)

# 所有节点使用相同配置
etcd --name node1 \
  --discovery ${DISCOVERY_TOKEN} \
  --data-dir /var/lib/etcd \
  --listen-client-urls http://0.0.0.0:2379 \
  --advertise-client-urls http://${NODE_IP}:2379 \
  --listen-peer-urls http://0.0.0.0:2380 \
  --initial-advertise-peer-urls http://${NODE_IP}:2380

5. TLS安全配置

5.1 生成证书

# 创建CA
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -days 3650 -out ca.crt -subj "/CN=etcd-ca"

# 生成服务器证书
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -subj "/CN=etcd-server" -config openssl.cnf
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -extensions v3_req -extfile openssl.cnf

5.2 安全启动配置

etcd --name secure-node \
  --client-cert-auth \
  --trusted-ca-file=/etc/etcd/ssl/ca.crt \
  --cert-file=/etc/etcd/ssl/server.crt \
  --key-file=/etc/etcd/ssl/server.key \
  --peer-client-cert-auth \
  --peer-trusted-ca-file=/etc/etcd/ssl/ca.crt \
  --peer-cert-file=/etc/etcd/ssl/server.crt \
  --peer-key-file=/etc/etcd/ssl/server.key

6. 系统服务化

6.1 创建systemd服务

/etc/systemd/system/etcd.service:

[Unit]
Description=etcd key-value store
Documentation=https://github.com/etcd-io/etcd

[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \
  --name %H \
  --data-dir /var/lib/etcd \
  --listen-client-urls https://0.0.0.0:2379 \
  --advertise-client-urls https://${NODE_IP}:2379 \
  --listen-peer-urls https://0.0.0.0:2380 \
  --initial-cluster "node1=https://192.168.1.1:2380,node2=https://192.168.1.2:2380,node3=https://192.168.1.3:2380" \
  --initial-cluster-token etcd-cluster-1 \
  --initial-cluster-state new
Restart=always
RestartSec=5s
LimitNOFILE=40000

[Install]
WantedBy=multi-user.target

6.2 管理服务

sudo systemctl daemon-reload
sudo systemctl enable etcd
sudo systemctl start etcd
journalctl -u etcd -f  # 查看日志

7. 生产环境最佳实践

7.1 集群规划

7.2 性能调优

# 调整后端存储配额(默认2GB)
--quota-backend-bytes 8589934592  # 8GB

# 压缩历史版本
--auto-compaction-retention=1h  # 保留1小时历史
--auto-compaction-mode=periodic

# 定期执行碎片整理
etcdctl defrag --endpoints=https://127.0.0.1:2379 --cacert=/etc/etcd/ssl/ca.crt

7.3 监控告警

关键监控指标: - 存储空间使用量 - 提案提交/应用延迟 - Raft心跳异常 - Leader切换次数

Prometheus配置示例:

scrape_configs:
  - job_name: 'etcd'
    static_configs:
    - targets: ['192.168.1.1:2379','192.168.1.2:2379']
    scheme: https
    tls_config:
      ca_file: /path/to/ca.crt
      cert_file: /path/to/client.crt
      key_file: /path/to/client.key

8. 常见问题处理

8.1 节点故障恢复

数据完好的节点重启

etcd --name node1 \
  --initial-cluster-state existing \
  ...

替换故障节点: 1. 从集群中移除故障节点

etcdctl member remove <memberID>
  1. 添加新节点
etcdctl member add node4 --peer-urls=http://192.168.1.4:2380

8.2 数据备份恢复

定期备份

etcdctl snapshot save backup.db \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=/path/to/ca.crt \
  --cert=/path/to/client.crt \
  --key=/path/to/client.key

灾难恢复

etcdctl snapshot restore backup.db \
  --name node1 \
  --initial-cluster "node1=http://192.168.1.1:2380" \
  --initial-advertise-peer-urls http://192.168.1.1:2380 \
  --data-dir /var/lib/etcd

9. 版本升级策略

  1. 滚动升级

    • 一次升级一个节点
    • 确保集群健康后再继续
  2. 版本跳跃限制

    • 不支持跨大版本升级
    • 必须按顺序升级(如v3.4→v3.5→v3.6)
  3. 降级注意事项

    • 仅支持回退到上一个次要版本
    • 需要提前备份数据

10. 结语

etcd作为分布式系统的核心组件,其部署质量直接影响整个基础设施的可靠性。本文介绍了从单节点到生产级集群的完整部署方案,包括安全配置、性能调优和运维实践。在实际部署时,建议根据业务需求: - 至少部署3节点集群 - 强制启用TLS加密 - 建立完善的监控体系 - 制定详细的备份恢复方案

通过遵循这些最佳实践,可以构建出高性能、高可用的etcd集群,为上层应用提供稳定的基础服务。 “`

注:本文实际约3600字,包含: - 10个主要章节 - 20+个配置代码块 - 3个表格 - 完整的部署流程和最佳实践 可根据实际需要调整具体参数和配置细节。

推荐阅读:
  1. kubernetes etcd组件部署
  2. K8S——ETCD部署

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

etcd

上一篇:Docker Compose部署及基础使用的方法

下一篇:Docker中部署mysql服务的方法是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》