• 华为云云耀云服务器L实例评测|华为云上安装etcd


    华为云云耀云服务器L实例评测|华为云上安装etcd

    一、什么是etcd

    官网:https://etcd.io/
    github:https://github.com/etcd-io/etcd

    etcd 是一个分布式键值对存储系统,由coreos 开发,内部采用raft 协议作为一致性算法,用于可靠、快速地保存关键数据,并提供访问。通过分布式锁、leader选举和写屏障(write barriers),来实现可靠的分布式协作

    任何应用(从简单的 Web 应用到 Kubernetes 等高度复杂的容器编排引擎)都可以使用标准的 HTTP/JSON 工具在 etcd 中读写数据。

    官方硬件建议

    官方硬件推荐:https://etcd.io/docs/v3.5/op-guide/hardware/

    etcd 通常在用于开发或测试目的的资源有限的情况下运行良好;在笔记本电脑或廉价的云机器上使用 etcd 进行开发是很常见的。但是,在生产中运行 etcd 集群时,一些硬件指南对于正确管理很有用。

    在这里插入图片描述如上图,一个小集群,2C8G 够用了。

    CPU:
    很少有 etcd 部署需要大量 CPU。 典型的集群需要两到四个核心才能平稳运行。负载较重的 etcd 部署(每秒服务数千个客户端或数万个请求)往往会受到 CPU 限制,因为 etcd 可以服务于内存中的请求。如此繁重的部署通常需要八到十六个核心。

    内存:
    etcd 的内存占用相对较小,但其性能仍然取决于是否有足够的内存。etcd 服务器将积极缓存键值数据,并花费大部分剩余内存来跟踪观察者。通常 8GB 就足够了。对于具有数千个观察者和数百万个密钥的重型部署,请相应地分配 16GB 到 64GB 内存。

    硬盘:
    快速磁盘是 etcd 部署性能和稳定性的最关键因素。

    缓慢的磁盘会增加 etcd 请求延迟并可能损害集群稳定性。由于 etcd 的共识协议依赖于将元数据持久存储到日志中,因此大多数 etcd 集群成员必须将每个请求写入磁盘。此外,etcd 还将增量地将其状态检查点到磁盘,以便它可以截断此日志。如果这些写入花费的时间太长,心跳可能会超时并触发选举,从而破坏集群的稳定性。一般来说,要判断磁盘对于 etcd 来说是否足够快,可以使用fio等基准测试工具。请阅读此处的示例。

    二、华为云主机准备

    1. 购买华为云主机,本次评测系统如下:
      在这里插入图片描述注意:本文我们采用2C4G环境测试,非2C2G~

    2. 创建新的安全组,开发所有端口方便测试
      在这里插入图片描述
      更改安全组,如下,选择我们的开发所有端口的这个安全组:
      在这里插入图片描述

    3. 开发所有端口后,我们ssh登录上华为云主机即可~

    三、etcd安装

    官方安装文档:https://etcd.io/docs/v3.5/install/
    官方快速开始文档:

    https://etcd.io/docs/v3.5/quickstart/

    etcd在生产环境中一般推荐集群方式部署,三节点集群可以实现高可用,单节点存在宕机风险。本文定位为入门,华为云云耀云服务器L实例测试验证安装,主要讲讲单节点安装和基本使用。

    1. 安装预构建的二进制文件

    安装 etcd 最简单的方法是使用预构建的二进制文件:

    1. 从Releases下载适合您平台的压缩存档文件,选择版本v3.5.0或更高版本。

    解压缩存档文件。这会产生一个包含二进制文件的目录。

    将可执行二进制文件添加到您的路径中。例如,将二进制文件重命名和/或移动到您的路径中的目录(如/usr/local/bin),或者将上一步创建的目录添加到您的路径中。

    mkdir -p etcd-download
    cd etcd-download
    
    ETCD_VER=v3.5.0
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    # 改完自己的安装目录
    export INSTALL_PATH="/opt/lighthouse/server/env/"
    mkdir -p $INSTALL_PATH
    tar xzvf etcd-${ETCD_VER}-linux-amd64.tar.gz  -C $INSTALL_PATH/
    mv $INSTALL_PATH/etcd-* $INSTALL_PATH/etcd
    
    
    $INSTALL_PATH/etcd/etcd --version
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    2. 从源代码构建

    如果您有Go 版本 1.16+,您可以按照以下步骤从源代码构建 etcd:

    将 etcd 存储库下载为 zip 文件并解压缩,或使用以下命令克隆存储库。

    $ git clone -b v3.5.0 https://github.com/etcd-io/etcd.git
    
    • 1

    要从 构建main@HEAD,请省略该-b v3.5.0标志。

    更改目录:

    $ cd etcd
    
    • 1

    运行构建脚本:

    $ ./build.sh
    
    • 1

    二进制文件位于该bin目录下。

    将目录的完整路径添加bin到您的路径中,例如:

    $ export PATH="$PATH:`pwd`/bin"
    
    • 1

    测试etcd您的路径中的内容:

    $ etcd --version
    
    • 1

    四、etcd服务注册与发现

    etcd 基于Go语言实现,主要用于共享配置,服务发现,集群监控,leader选举,分布式锁等场景。

    etcd是一个高可用、分布式的键值存储系统,可以用来实现服务注册与发现。

    本文我们重点讲解服务注册与发现~

    服务注册与发现是指将服务实例注册到服务注册中心,使得其他服务能够发现并使用该服务。etcd可以作为一个服务注册中心,用来存储服务实例的地址和其他相关信息。

    服务提供者在启动时,将自己的服务实例信息(例如IP地址、端口号、服务名称、健康状态等)写入到etcd中,同时指定一个TTL(Time To Live)过期时间。etcd会自动维护这些服务实例的心跳信息,如果一个服务实例的心跳超时,则etcd会将其从注册中心中删除。

    服务消费者在启动时,可以通过etcd中的API查询对应服务的实例信息。消费者可以使用该信息调用服务提供者,而不需要硬编码服务地址。

    1. 配置etcd

    1. etcd 配置项解释
      https://etcd.io/docs/v3.5/op-guide/configuration/
      这篇文档详细解释了 etcd 的各种配置参数。
    2. etcd 生产部署建议
      https://etcd.io/docs/v3.5/op-guide/production/
      介绍了在生产环境部署 etcd 需要注意的安全、性能等方面的设置。
    3. etcd集群设置示例
      https://etcd.io/docs/v3.5/dev-guide/clusters/
      提供了不同场景下 etcd 集群配置的示例。

    在终端中输入以下命令启动etcd服务:

    etcd
    
    • 1

    如果需要自定义配置,可以使用etcd命令行参数,例如:

    etcd --name my-etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379
    
    • 1
    • –name my-etcd:指定etcd节点的名称,在集群中应该是唯一的。
    • –listen-client-urls http://0.0.0.0:2379:客户端访问的监听地址,0.0.0.0表示所有地址,2379是默认的etcd客户端端口。
    • –advertise-client-urls http://0.0.0.0:2379:对外公告的客户端地址,用于访问该etcd节点。

    需要注意的是,这个只是单个etcd节点的最小配置,要构建集群还需要配置其他节点和初期集群信息。但命令包含了etcd节点的基本网络和识别配置。

    当然,etcd支持使用配置文件来管理服务配置。命令行参数指定配置文件,在启动etcd时,使用–config-file参数指定配置文件:

    etcd --config-file=/etc/etcd/etcd.conf.yml
    
    • 1

    这里给出单节点,配置demo:

    # 节点名称
    name: 'etcd-node1'
    
    # 数据目录
    data-dir: /opt/lighthouse/server/env/etcd/etcd-data
    
    # 快照设置
    snapshot-count: 10000
    
    # 心跳间隔
    heartbeat-interval: 100
    
    # 通讯和客户端监听地址
    listen-peer-urls: http://0.0.0.0:2380
    listen-client-urls: http://0.0.0.0:2379
    
    # 初始集群配置
    initial-advertise-peer-urls: http://0.0.0.0:2380
    initial-cluster: etcd-node1=http://0.0.0.0:2380
    initial-cluster-token: etcd-cluster-1
    initial-cluster-state: new
    
    # 启用详细日志
    log-level: debug
    log-dir: /opt/lighthouse/server/logs/etcd
    log-file: etcd.log
    log-max-size: 100
    log-backups: 3
    log-format: text
    
    # 压缩设置
    auto-compaction-mode: periodic
    auto-compaction-retention: "1"
    
    # 安全传输
    #client-transport-security:
    #  trusted-ca-file: /path/to/ca.crt
    #  cert-file: /path/to/etcd.crt
    #  key-file: /path/to/etcd.key
    #
    #peer-transport-security:
    #  trusted-ca-file: /path/to/ca.crt
    #  cert-file: /path/to/etcd.crt
    #  key-file: /path/to/etcd.key
    
    • 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
    • 40
    • 41
    • 42
    • 43
    • 44

    2. 使用systemctl 管理启动etcd服务

    [Unit]
    Description=etcd key-value store
    Documentation=https://etcd.io/docs/
    After=network.target
    
    [Service]
    CPUAccounting=true
    MemoryAccounting=true
    CPUQuota=200%
    MemoryLimit=2G
    Type=notify
    ExecStart=/opt/lighthouse/server/env/etcd/etcd  --config-file=/opt/lighthouse/server/conf/etcd/etcd.conf.yml
    Restart=on-failure
    LimitNOFILE=65536
    
    [Install]
    WantedBy=multi-user.target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    使用:–config-file= 指定启动用的配置文件即可`

    配置为systemd服务:

    # etcd 数据目录 $ETCD_DIR/etcd-data
    sudo mkdir -p $ETCD_DIR/etcd-data
    
    
    sudo rm -rf /etc/systemd/system/etcd.service
    sudo cp $SERVER_CONF_PATH/etcd.service /etc/systemd/system/etcd.service
    
    sudo systemctl daemon-reload
    sudo systemctl enable etcd
    sudo systemctl restart etcd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3. 注册服务

    服务提供者在启动时,需要将自己的服务实例信息写入到etcd中。可以使用etcdctl命令行工具。

    etcdctl put /services/my-service/1 '{"host":"192.168.0.1","port":8080}'
    
    • 1

    上述命令将一个名为my-service的服务实例注册到etcd中,其IP地址为192.168.0.1,端口号为8080。

    etcd支持多种编程语言的客户端库,例如Go、Java、Python等。使用客户端库可以更加方便地进行服务注册和发现。

    4. 发现服务

    服务消费者在启动时,可以从etcd中查询服务实例信息。

    ./etcdctl get /services/my-service --prefix
    
    • 1

    上述命令将查询所有名为my-service的服务实例信息。可以通过etcdctl的–watch参数实现自动监听服务实例的变化。

    五、其他参考

    etcd服务注册与发现
    参考URL: https://zhuanlan.zhihu.com/p/625634172

  • 相关阅读:
    VScode 调试 linux内核
    个人简介网页设计作业 静态HTML个人介绍网页作业 DW个人网站模板下载 WEB静态大学生简单网页 个人网页作品代码 个人网页制作 学生个人网页
    sql行转列三个方法
    拉电流、灌电流和漏电流
    appendChild也是异步函数(给dom添加子节点后,第一次修改dom样式不生效)
    vsomeip环境搭建及helloworld测试例跑通
    数据结构与算法之LeetCode-652. 寻找重复的子树
    OpenCV图像处理——矩形(Rect)类的常用操作
    Linux—vmstat命令详解
    MEIS —— 前端部分基本配置
  • 原文地址:https://blog.csdn.net/inthat/article/details/133220491