etcd自动化安装配置教程

文章目录

  • 前言
  • 一、简介
    • 1. 简介
    • 2. 特点
    • 3. 端口介绍
  • 二、etcd安装教程(单机版)
    • 1. 复制脚本
    • 2. 增加执行权限
    • 3. 执行脚本
    • 4. 查看启动状态
    • 5. 卸载etcd
  • 三、etcd安装教程(集群版)
    • 1. 复制脚本
    • 2. 增加执行权限
    • 3. 分发脚本
    • 4. 执行脚本
    • 5. 启动etcd新集群
      • 5.1 复制脚本
      • 5.2 增加执行权限
      • 5.3 执行脚本
      • 5.4 查看启动状态
    • 6. 启动已存在的etcd集群
      • 6.1 复制脚本
      • 6.2 增加执行权限
      • 6.3 执行脚本
    • 7. 停止集群
    • 8. 卸载etcd
  • 四、etcd客户端命令
    • 1. 语法
    • 2. 命令
      • 2.1 成员命令
        • 2.1.1 查看成员列表
        • 2.1.2 更新成员
        • 2.1.3 删除成员
        • 2.1.4 添加成员
        • 2.1.5 添加成员为学习者
      • 2.2 警报命令
      • 2.3 认证命令
      • 2.4 检查命令
      • 2.5 节点检查命令
        • 2.5.1 查看当前节点的健康状况
        • 2.5.2 查看指定节点的健康状况
        • 2.5.3 查看指定节点的状态信息
      • 2.6 租赁命令
      • 2.7 角色命令
      • 2.8 快照命令
      • 2.9 用户命令
      • 2.10 其他命令
    • 3. 选项
  • 五、etcd调优
    • 1. 时间参数调优
    • 2. 快照调优
    • 3. 磁盘调优
    • 4. 网络调优
    • 5. CPU调优
  • 总结


前言

本文介绍了etcd的基本概念、特点和端口介绍。然后提供了etcd安装教程,包括单机版和集群版的安装步骤。对于集群版,还详细说明了如何添加成员、删除成员以及启动已存在的etcd集群等操作。接下来列举了一些常用的etcd客户端命令,并给出了选项说明。

最后,针对性能调优方面,提供了时间参数调优、快照调优、磁盘调优、网络调优和中央处理器设置等建议。

希望这篇文章能够帮助您理解并使用etcd分布式键值存储系统。


一、简介

1. 简介

etcd是一个分布式键值存储系统,用于存储分布式系统中最关键的数据,由CoreOS开发并作为开源项目进行维护。它使用Raft一致性算法来实现高可用性和数据一致性,并提供了简单的HTTP
API用于读取、写入和观察存储在其上的键值对。

2. 特点

  1. 分布式:etcd被设计为一个分布式系统,可以运行在多台机器上组成集群。通过将数据复制到不同节点上,并使用Raft协议确保数据副本之间的强一致性,从而实现高可靠性和容错能力。

  2. 键值存储:etcd以类似字典(key-value)形式保存数据。每个key都与一个value相关联,并且可以根据key进行读取、写入或删除操作。

  3. 强一致性:通过Raft算法提供强一致性保证,在集群中所有节点之间达成共识以确保数据副本之间始终保持同步状态。

  4. 高可用:由于采用了分布式架构,当某些节点失效时,其他健康节点仍然能够正常工作并提供服务。这使得应用程序能够持续访问和更新存储在etcd中的信息。

  5. 监视功能:除了基本CRUD操作外,etcd还提供了监视功能,允许应用程序监听特定键的更改事件。这使得应用程序能够实时感知数据变化并做出相应的响应。

  6. 安全性:etcd支持基于TLS(传输层安全)的加密通信,并提供身份验证和授权机制来保护数据的安全性。

3. 端口介绍

  1. 端口 2379 是 etcd 的客户端监听端口。当你想要与 etcd 进行交互时(例如读取或写入键值对),需要使用这个端口来连接到 etcd 实例。
  2. 端口 2380 是 etcd 的对等节点通信监听端口。etcd 集群中的各个节点之间通过这个端口进行通信和同步数据。

二、etcd安装教程(单机版)

开始安装之前检查节点是否可以访问到github,若不能访问,解决方法如下:

  • Windows和Linux访问不了GitHub的解决方法

此shell脚本执行后会自动安装并启动 etcd。

1. 复制脚本

首先,将以下脚本内容复制并保存为/tmp/install_etcd.sh文件。

#!/bin/bash

ETCD_VERSION='3.5.4'
ETCD_INSTALLDIR='/opt/module/etcd'

install_etcd() {
  local etcd_name="etcd-v${1}-linux-amd64"
  local etcd_url="https://github.com/etcd-io/etcd/releases/download/v${1}/etcd-v${1}-linux-amd64.tar.gz"
  if [ -z "$(command -v etcd)" ]; then
    if [ ! -d "${2}" ]; then
      mkdir -p "${2}"
    fi
    if [ ! -f /tmp/"${etcd_name}".tar.gz ]; then
      wget "$etcd_url" -P /tmp
      if [ $? -ne 0 ]; then
        echo "${etcd_name}.tar.gz下载失败,请重试或手动下载到/tmp目录下再次执行"
        echo "下载地址:$etcd_url"
        exit 1
      fi
    fi
    if [ -d "${2}/${etcd_name}" ]; then
      rm -rf "${2}/${etcd_name}"
    fi
    tar -zxvf /tmp/etcd-v"${1}"-linux-amd64.tar.gz -C "${2}"
    sudo cp -a "${2}"/etcd-v"${1}"-linux-amd64/etcd "${2}"/etcd-v"${1}"-linux-amd64/etcdctl /usr/bin/
    nohup "${2}"/etcd-v"${1}"-linux-amd64/etcd >/tmp/etcd.log 2>&1 &
  fi
}

install_etcd $ETCD_VERSION $ETCD_INSTALLDIR

exit 0

2. 增加执行权限

在终端中执行以下命令,为脚本添加执行权限。

chmod a+x /tmp/install_etcd.sh

3. 执行脚本

执行以下命令,运行脚本开始下载、安装和配置Apisix。

/tmp/install_etcd.sh

请等待安装完成,如有异常会有提示。

4. 查看启动状态

etcdctl member list

返回结果如下所示,started表示已启动。

[root@hadoop103 ~]# etcdctl member list
8e9e05c52164694d, started, default, http://localhost:2380, http://localhost:2379, false

5. 卸载etcd

删除对应文件和目录即可。

rm -rf /root/default.etcd
rm -rf /root/etcd01.etcd
rm -rf /usr/bin/etcd
rm -rf /usr/bin/etcdctl
rm -rf /usr/lib/firewalld/services/etcd-client.xml
rm -rf /usr/lib/firewalld/services/etcd-server.xml
rm -rf /opt/module/etcd

三、etcd安装教程(集群版)

集群版安装之前,先准备好三个节点。并已经设置好集群免密登录。

  • 配置集群免密登录教程

在这里,准备的集群节点为:192.168.145.103192.168.145.104192.168.145.105

1. 复制脚本

首先,在192.168.145.103节点将以下脚本内容复制并保存为/tmp/install_etcd.sh文件。

#!/bin/bash

ETCD_VERSION='3.5.4'
ETCD_INSTALLDIR='/opt/module/etcd'

install_etcd() {
  local etcd_name="etcd-v${1}-linux-amd64"
  local etcd_url="https://github.com/etcd-io/etcd/releases/download/v${1}/etcd-v${1}-linux-amd64.tar.gz"
  if [ -z "$(command -v etcd)" ]; then
    if [ ! -d "${2}" ]; then
      mkdir -p "${2}"
    fi
    if [ ! -f /tmp/"${etcd_name}".tar.gz ]; then
      wget "$etcd_url" -P /tmp
      if [ $? -ne 0 ]; then
        echo "${etcd_name}.tar.gz下载失败,请重试或手动下载到/tmp目录下再次执行"
        echo "下载地址:$etcd_url"
        exit 1
      fi
    fi
    if [ -d "${2}/${etcd_name}" ]; then
      rm -rf "${2}/${etcd_name}"
    fi
    tar -zxvf /tmp/etcd-v"${1}"-linux-amd64.tar.gz -C "${2}"
    sudo cp -a "${2}"/etcd-v"${1}"-linux-amd64/etcd "${2}"/etcd-v"${1}"-linux-amd64/etcdctl /usr/bin/
    # nohup "${2}"/etcd-v"${1}"-linux-amd64/etcd >/tmp/etcd.log 2>&1 &
  fi
}

install_etcd $ETCD_VERSION $ETCD_INSTALLDIR

exit 0

2. 增加执行权限

在终端中执行以下命令,为脚本添加执行权限。

chmod a+x /tmp/install_etcd.sh

3. 分发脚本

使用scp命令把脚本分发到192.168.145.104192.168.145.105节点。

scp /tmp/install_etcd.sh 192.168.145.104:/tmp/
scp /tmp/install_etcd.sh 192.168.145.105:/tmp/

4. 执行脚本

192.168.145.103节点执行以下命令,开始在三个节点分别运行脚本,开始下载和安装etcd。

/tmp/install_etcd.sh
ssh 192.168.145.104 /tmp/install_etcd.sh
ssh 192.168.145.105 /tmp/install_etcd.sh

请等待安装完成,如有异常会有提示。

5. 启动etcd新集群

5.1 复制脚本

将以下脚本内容复制并保存为/tmp/etcd_start_info.sh文件。
需要把etcd集群节点更换为自己的集群节点。

#!/bin/bash

# etcd集群节点
node1=192.168.145.103
node2=192.168.145.104
node3=192.168.145.105

# etcd版本
ETCD_VERSION='3.5.4'
# etcd安装目录
ETCD_INSTALLDIR='/opt/module/etcd'

nodes=($node1 $node2 $node3)

for node in "${nodes[@]}"
do
  echo "复制下面脚本到 $node 执行启动etcd"
  echo "nohup \\
etcd --name etcd$(echo $node | awk -F '.' '{print $NF}') --initial-advertise-peer-urls http://$node:2380 \\
  --listen-peer-urls http://$node:2380 \\
  --listen-client-urls http://$node:2379,http://127.0.0.1:2379 \\
  --advertise-client-urls http://$node:2379 \\
  --data-dir $ETCD_INSTALLDIR/etcd-v$ETCD_VERSION-linux-amd64/data \\
  --initial-cluster-token etcd-cluster-1 \\
  --initial-cluster etcd$(echo $node1 | awk -F '.' '{print $NF}')=http://$node1:2380,etcd$(echo $node2 | awk -F '.' '{print $NF}')=http://$node2:2380,etcd$(echo $node3 | awk -F '.' '{print $NF}')=http://$node3:2380 \\
  --initial-cluster-state new \\
  --auto-tls \\
  --peer-auto-tls \\
  > /tmp/etcd.log 2>&1 &"
  echo "-----------------------------------------------------------------------"
done

exit 0

5.2 增加执行权限

在终端中执行以下命令,为脚本添加执行权限。

chmod a+x /tmp/etcd_start_info.sh

5.3 执行脚本

执行此脚本后会打印集群的启动命令,然后根据打印的启动命令,分别复制到三个节点执行启动etcd集群。

/tmp/etcd_start_info.sh

执行后结果如下图所示:

在这里插入图片描述

5.4 查看启动状态

etcdctl member list

返回结果如下所示,started表示已启动。

[root@hadoop103 ~]# etcdctl member list
d1ba583667016d5, started, etcd103, http://192.168.145.103:2380, http://192.168.145.103:2379, false
1fdc35df8ab0c538, started, etcd105, http://192.168.145.105:2380, http://192.168.145.105:2379, false
68d20b112ee2f6c4, started, etcd104, http://192.168.145.104:2380, http://192.168.145.104:2379, false

6. 启动已存在的etcd集群

6.1 复制脚本

将以下脚本内容复制并保存为/tmp/etcd_start_info.sh文件。
需要把etcd集群节点更换为自己的集群节点。
与上面一个脚本不同的是--initial-cluster-state existing,这里的初始化集群状态是已存在。

#!/bin/bash

# etcd集群节点
node1=192.168.145.103
node2=192.168.145.104
node3=192.168.145.105

# etcd版本
ETCD_VERSION='3.5.4'
# etcd安装目录
ETCD_INSTALLDIR='/opt/module/etcd'

nodes=($node1 $node2 $node3)

for node in "${nodes[@]}"
do
  echo "复制下面脚本到 $node 执行启动etcd"
  echo "nohup \\
etcd --name etcd$(echo $node | awk -F '.' '{print $NF}') --initial-advertise-peer-urls http://$node:2380 \\
  --listen-peer-urls http://$node:2380 \\
  --listen-client-urls http://$node:2379,http://127.0.0.1:2379 \\
  --advertise-client-urls http://$node:2379 \\
  --data-dir $ETCD_INSTALLDIR/etcd-v$ETCD_VERSION-linux-amd64/data \\
  --initial-cluster-token etcd-cluster-1 \\
  --initial-cluster etcd$(echo $node1 | awk -F '.' '{print $NF}')=http://$node1:2380,etcd$(echo $node2 | awk -F '.' '{print $NF}')=http://$node2:2380,etcd$(echo $node3 | awk -F '.' '{print $NF}')=http://$node3:2380 \\
  --initial-cluster-state existing \\
  --auto-tls \\
  --peer-auto-tls \\
  > /tmp/etcd.log 2>&1 &"
  echo "-----------------------------------------------------------------------"
done

exit 0

6.2 增加执行权限

在终端中执行以下命令,为脚本添加执行权限。

chmod a+x /tmp/etcd_start_info.sh

6.3 执行脚本

执行此脚本后会打印集群的启动命令,然后根据打印的启动命令,分别复制到三个节点执行启动etcd集群。

/tmp/etcd_start_info.sh

7. 停止集群

可以通过杀死集群节点对应的进程来停止。

kill -9 $(ps -ef | grep etcd | awk 'NR==1 {print $2}')

8. 卸载etcd

删除对应文件和目录即可。

rm -rf /root/default.etcd
rm -rf /root/etcd01.etcd
rm -rf /usr/bin/etcd
rm -rf /usr/bin/etcdctl
rm -rf /usr/lib/firewalld/services/etcd-client.xml
rm -rf /usr/lib/firewalld/services/etcd-server.xml
rm -rf /opt/module/etcd

四、etcd客户端命令

1. 语法

etcdctl [flags]

2. 命令

2.1 成员命令

作用命令
在目标etcd集群上创建镜像etcdctl make-mirror
向集群中添加成员etcdctl member add
列出集群中的所有成员etcdctl member list
提升集群中无投票权的成员etcdctl member promote
从集群中移除成员etcdctl member remove
更新集群中的成员etcdctl member update
2.1.1 查看成员列表
etcdctl member list

返回结果如下:
依次解释:成员ID、成员状态、成员名称、成员的节点通信端口、成员的客户端监听端口、是否是学习者(是否有投票权,学习者无投票权)。

[root@hadoop101 ~]# etcdctl member list
d1ba583667016d5, started, etcd01, http://192.168.145.103:2380, http://192.168.145.103:2379, false
1fdc35df8ab0c538, started, etcd03, http://192.168.145.105:2380, http://192.168.145.105:2379, false
68d20b112ee2f6c4, started, etcd02, http://192.168.145.104:2380, http://192.168.145.104:2379, false
2.1.2 更新成员
etcdctl member update <memberID> [options] [flags]

示例:修改成员ID为 d1ba583667016d5 的 peerURLs 值

etcdctl member update d1ba583667016d5 --peer-urls=http://hadoop101:2380
2.1.3 删除成员

删除成员后,目标成员将自动停止。删除领导者是安全的,但是在选举新领导者时,集群将处于非活动状态。此持续时间通常是选举超时时间加上投票过程时间。

etcdctl member remove <memberID> [flags]

示例:删除ID为 1fdc35df8ab0c538 的成员

etcdctl member remove 1fdc35df8ab0c538
2.1.4 添加成员

添加的成员默认是未启动状态。如果添加多个成员,最佳做法是一次配置一个成员,并在添加更多新成员之前验证它是否正确启动。

etcdctl member add <memberName> [options] [flags]

示例:将192.168.145.105添加为成员

etcdctl member add etcd03 --peer-urls=http://192.168.145.105:2380

返回结果如下,添加之后,etcdctl会将新成员通知集群,并打印出成功启动该成员所需的环境变量。

[root@hadoop101 ~]# etcdctl member add etcd03 --peer-urls=http://192.168.145.105:2380
Member 5c48c1ac9bc63420 added to cluster a479f5112595b52a

ETCD_NAME="etcd03"
ETCD_INITIAL_CLUSTER="etcd01=http://192.168.145.103:2380,etcd03=http://192.168.145.105:2380,etcd02=http://192.168.145.104:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.145.105:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"

然后使用提示的环境变量来启动成员。etcd默认的数据目录是 /var/lib/etcd。

export ETCD_NAME="etcd03"
export ETCD_INITIAL_CLUSTER="etcd01=http://192.168.145.103:2380,etcd03=http://192.168.145.105:2380,etcd02=http://192.168.145.104:2380"
export ETCD_INITIAL_CLUSTER_STATE="existing"
etcd --listen-client-urls http://192.168.145.105:2379 --advertise-client-urls http://192.168.145.105:2379 --listen-peer-urls http://192.168.145.105:2380 --initial-advertise-peer-urls http://192.168.145.105:2380 --data-dir /opt/module/etcd/etcd-v3.5.4-linux-amd64/data
2.1.5 添加成员为学习者

示例:将192.168.145.105添加为学习者(无投票权)

etcdctl member add etcd03 --peer-urls=http://192.168.145.105:2380 --learner

返回结果如下:

[root@hadoop101 ~]# etcdctl member add etcd03 --peer-urls=http://192.168.145.105:2380 --learner
Member ee78e1bfdc50b692 added to cluster a479f5112595b52a

ETCD_NAME="etcd03"
ETCD_INITIAL_CLUSTER="etcd01=http://192.168.145.103:2380,etcd02=http://192.168.145.104:2380,etcd03=http://192.168.145.105:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.145.105:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"

然后使用提示的环境变量来启动成员。

export ETCD_NAME="etcd03"
export ETCD_INITIAL_CLUSTER="etcd01=http://192.168.145.103:2380,etcd03=http://192.168.145.105:2380,etcd02=http://192.168.145.104:2380"
export ETCD_INITIAL_CLUSTER_STATE="existing"
etcd --listen-client-urls http://192.168.145.105:2379 --advertise-client-urls http://192.168.145.105:2379 --listen-peer-urls http://192.168.145.105:2380 --initial-advertise-peer-urls http://192.168.145.105:2380 --data-dir /opt/module/etcd/etcd-v3.5.4-linux-amd64/data

将学习者提升为投票成员。

etcdctl member promote 1c9175de16617613

2.2 警报命令

作用命令
解除所有警报etcdctl alarm disarm
列出所有告警etcdctl alarm list

2.3 认证命令

作用命令
禁用验证etcdctl auth disable
支持身份验证etcdctl auth enable
返回认证状态etcdctl auth status

2.4 检查命令

作用命令
检查给定服务器端点上不同工作负载保存数据的内存使用情况etcdctl check datascale
检查etcd集群性能etcdctl check perf

2.5 节点检查命令

作用命令
打印–endpoints中每个端点的KV历史散列etcdctl endpoint hashkv
检查`–endpoint`标志中指定的端点的健康状况etcdctl endpoint health
输出`–endpoint`标志中指定的端点的状态etcdctl endpoint status
2.5.1 查看当前节点的健康状况
etcdctl endpoint health

返回结果如下:

[root@hadoop103 ~]# etcdctl endpoint health
127.0.0.1:2379 is healthy: successfully committed proposal: took = 9.168536ms
2.5.2 查看指定节点的健康状况
etcdctl --endpoints=192.168.145.103:2379 endpoint health

etcdctl --endpoints=192.168.145.103:2379,192.168.145.104:2379,192.168.145.105:2379 endpoint health

返回结果如下:

[root@hadoop103 ~]# etcdctl --endpoints=192.168.145.103:2379 endpoint health
192.168.145.103:2379 is healthy: successfully committed proposal: took = 6.77289ms
[root@hadoop103 ~]# etcdctl --endpoints=192.168.145.103:2379,192.168.145.104:2379,192.168.145.105:2379 endpoint health
192.168.145.103:2379 is healthy: successfully committed proposal: took = 14.523788ms
192.168.145.105:2379 is healthy: successfully committed proposal: took = 14.921994ms
192.168.145.104:2379 is healthy: successfully committed proposal: took = 23.501004ms
2.5.3 查看指定节点的状态信息
etcdctl --endpoints=192.168.145.103:2379 endpoint status

返回结果如下:

[root@hadoop103 ~]# etcdctl --endpoints=192.168.145.103:2379 endpoint status
192.168.145.103:2379, d1ba583667016d5, 3.5.4, 78 kB, false, false, 17, 269, 269, 

2.6 租赁命令

作用命令
创建租赁etcdctl lease grant
保持租约有效(续期)etcdctl lease keep-alive
列出所有有效租约etcdctl lease list
撤销租赁etcdctl lease revoke
获取租赁信息etcdctl lease timetolive

2.7 角色命令

作用命令
添加新角色etcdctl role add
删除角色etcdctl role delete
获取角色的详细信息etcdctl role get
向角色授予密钥etcdctl role grant-permission
列出所有角色etcdctl role list
从角色中撤销密钥etcdctl role revoke-permission

2.8 快照命令

作用命令
将etcd成员快照恢复到etcd目录etcdctl snapshot restore
将etcd节点后端快照存储到给定文件etcdctl snapshot save
获取给定文件的后端快照状态etcdctl snapshot status

2.9 用户命令

作用命令
添加新用户etcdctl user add
删除用户etcdctl user delete
获取用户的详细信息etcdctl user get
将角色授予用户etcdctl user grant-role
列出所有用户etcdctl user list
修改用户密码etcdctl user passwd
从用户中撤销角色etcdctl user revoke-role

2.10 其他命令

作用命令
在etc中压缩事件历史etcdctl compaction
对具有给定端点的etcd成员的存储进行碎片整理etcdctl defrag
删除指定的键或键的范围[key, range_end]etcdctl del
观察并参与领导选举etcdctl elect
获取键或键的范围etcdctl get
关于任何命令的帮助etcdctl help
获取命名锁etcdctl lock
将领导权转移到另一个etcd集群成员。etcdctl move-leader
将给定的键放入存储中etcdctl put
Txn在一个事务中处理所有请求etcdctl txn
打印etcdctl的版本etcdctl version
监视键或前缀上的事件流etcdctl watch

3. 选项

作用选项
使用此CA包验证启用tls的安全服务器的证书–cacert=“”
使用此TLS证书文件识别安全客户端–cert=“”
短命令超时(不包括拨号超时)–command-timeout=5s
启用客户端调试日志–debug[=false]
为客户端连接拨超时–dial-timeout=2s
查询描述集群端点的SRV记录-d, --discovery-srv=“”
使用DNS发现时要查询的服务名称–discovery-srv-name=“”
gRPC端点–endpoints=[127.0.0.1:2379]
帮助etcdctl-h, --help[=false]
将字节字符串打印为十六进制编码字符串–hex[=false]
接受描述集群端点的不安全SRV记录–insecure-discovery[=true]
跳过服务器证书验证(注意:此选项应仅用于测试目的)–insecure-skip-tls-verify[=false]
禁用客户端连接的传输安全性–insecure-transport[=true]
客户端连接的保持连接时间–keepalive-time=2s
客户端连接的Keepalive超时–keepalive-timeout=6s
使用此TLS密钥文件识别安全客户端–key=“”
身份验证的密码(如果使用了这个选项,——user选项不应该包含Password)–password=“”
用户名[:密码]用于身份验证(如果未提供密码则提示)–user=“”
设置输出格式(fields, json, protobuf, simple, table)-w, --write-out=“simple”

五、etcd调优

1. 时间参数调优

etcd依赖于两个独立的时间参数,分别是心跳间隔(heartbeat-interval,默认100ms)和选举超时时间(
election-timeout,默认1000ms)。 对于一个集群,心跳间隔和选举超时值应相同。为 etcd 成员设置不同的值可能会破坏集群稳定性。

etcd --heartbeat-interval=100 --election-timeout=500

ETCD_HEARTBEAT_INTERVAL=100 ETCD_ELECTION_TIMEOUT=500 etcd

2. 快照调优

etcd 会将所有关键更改附加到日志文件中。日志将会无限增长,并且是对密钥所做的每次更改的完整线性历史记录。完整的历史记录适用于使用较少的集群,但使用频繁的集群会携带大量日志。
为了避免产生大量的日志,etcd 会定期制作快照。这些快照为 etcd 提供了一种通过保存系统当前状态和删除旧日志来压缩日志的方法。
snapshot-count:更改次数,默认10000次。 如果 etcd 的内存使用率和磁盘使用率过高,可以通过设置snapshot-count参数来降低快照阈值:

etcd --snapshot-count=5000

ETCD_SNAPSHOT_COUNT=5000 etcd

3. 磁盘调优

etcd 集群对磁盘延迟非常敏感,可以对etcd设置线程高优先级。

sudo ionice -c2 -n0 -p `pgrep etcd`

4. 网络调优

如果 etcd leader 处理大量并发客户端请求,可能会因网络拥塞而延迟处理 follower peer 请求。这表现为在从属节点上发送缓冲区错误消息:

dropped MsgProp to 247ae21ff9436b2d since streamMsg's sending buffer is full
dropped MsgAppResp to 247ae21ff9436b2d since streamMsg's sending buffer is full

这些错误可以通过将 etcd 的对等流量优先于其客户端流量来解决。使用流量控制机制对对等流量进行优先级排序:

tc qdisc add dev eth0 root handle 1: prio bands 3
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip sport 2380 0xffff flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport 2380 0xffff flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip sport 2379 0xffff flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip dport 2379 0xffff flowid 1:1

要取消 ,请执行:

tc qdisc del dev eth0 root

5. CPU调优

由于 etcd 对延迟非常敏感,因此可以通过将 CPU 调控器设置为性能或保守模式来进一步优化 Linux 系统的性能。

echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

总结

在本文中我们学习到:

  • etcd是一个分布式键值存储系统,具有高可用性和数据一致性。
  • etcd支持通过Raft算法实现强一致性保证。
  • etcd具有分布式架构,在节点失效时仍然可以正常工作并提供服务。
  • etchd除基本CRUD操作外还支持监视功能来实时感知数据变化。
  • 安全方面,etchd支持加密通信,并提供身份验证和授权机制保护数据安全。

同时我们也学习到如何在单机环境或者多节点环境下安装etcd,并了解了一些常用的etcd客户端命令和选项。

最后,我们还提供了一些性能调优建议,包括时间参数调优、快照调优、磁盘调优、网络调优和中央处理器设置等方面的建议。

希望本教程对您有所帮助!如有任何疑问或问题,请随时在评论区留言。感谢阅读!

参考链接:

  • etcd集群部署
  • etcd配置选项
  • etcd官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/362610.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】yum与vim命令详解

&#x1f497;个人主页&#x1f497; ⭐个人专栏——Linux学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读1. yum命令1.1 基本使用1.2 注意事项1.3 lrzsz软件包示例 2. vim命令2.1 vim的基本概念2.2 vim配置2.3 vim的基本操作2.3…

归并排序+非比较排序

Hello everyone&#xff01;欢迎来到排序章节目前的“终章”——归并排序&#xff0c;经过了前面三种排序的敲打&#xff0c;尤其是快速排序&#xff0c;相信你一定可以闯过这最后一关&#xff01; 归并排序 基本思想&#xff1a; 归并排序&#xff08;MERGE-SORT&#xff09;…

Idea编写mapper.xml文件提示表名和字段

一、连接database 二、setting- > language -> sql Dialects中 的选项设为 mysql就可以了 三、测试

CS144--Chapter0--wsl2+docker环境搭建

我的笔记本配置 荣耀magicbook16&#xff0c;容量是500G&#xff0c;芯片是R7-5800 由于笔记本容量较小&#xff0c;因此考虑这个方案&#xff0c;对于台式机用户&#xff0c;建议可以直接用虚拟机或者双系统。 前言 斯坦福官网给出的方法是用他们的镜像&#xff08;基于Ubu…

Android 12 系统开机动画

修改Android开机动画有两种方式 方式一、通过adb 命令来修改&#xff1a; 进入/system/media目录&#xff0c;将里面的 bootanimation.zip 文件pull出来&#xff0c;然后解压&#xff0c;替换part0和part1中的图片&#xff0c;并且根据图片大小修改文件 desc.txt 中的内容&…

跳跃表解决01背包问题

跳跃表解决01背包问题 挺有意思的题目 看算法设计与分析有跳跃点实现&#xff0c;解决空间复杂度&#xff0c;感觉好烧脑&#xff0c;就实现了一下 结果 代码 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices.C…

第十篇【传奇开心果短博文系列】鸿蒙开发技术点案例示例:深度解读鸿蒙全场景适配

传奇开心果短博文系列 系列短博文目录鸿蒙开发技术点案例示例系列 短博文目录前言一、鸿蒙全场景适配实现介绍二、统一核心示例代码三、设备驱动框架示例代码四、统一界面框架示例代码五、自适应布局示例代码六、分布式能力示例代码七、跨平台开发示例代码八、设备能力开放示例…

AP6317 同步3A锂电充电IC 带散热 便携式设备 充电器

概述是一款面向5V交流适配器的3A锂离子电池充电器。它是采用800KHz固定频率的同步降压型转换器&#xff0c;因此具有高达92%以上的充电效率&#xff0c;自身发热量极小。包括完整的充电终止电路、自动再充电和一个度达1%的4.2V预设充电电压&#xff0c;内部集成了防反灌保护、输…

使用ChatGPT学习大象机器人六轴协作机械臂mechArm

引言 我是一名机器人方向的大学生&#xff0c;近期学校安排自主做一个机器人方面相关的项目。学校给我们提供了一个小型的六轴机械臂&#xff0c;mechArm 270M5Stack&#xff0c;我打算使用ChatGPT让它来辅助我学习如何使用这个机械臂并且做一个demo。 本篇文章将记录我是如何使…

jsp 产品维修管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 产品维修管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.…

【51单片机系列】应用设计——8路抢答器的设计

51单片机应用——8路抢答器设计 文章设计文件及代码&#xff1a;资源链接。 文章目录 要求&#xff1a;设计思路软件设计仿真结果 要求&#xff1a; &#xff08;1&#xff09; 按下”开始“按键后才开始抢答&#xff0c;且抢答允许指示灯亮&#xff1b; &#xff08;2&…

2024年第七届亚洲能源与电气工程会议 (ACEEE 2024)

2024年第七届亚洲能源与电气工程会议 (ACEEE 2024)将于2024年7月20-22日在中国成都举行。本次会议由电子科技大学主办&#xff0c;电子科技大学机械与电气工程学院承办。ACEEE 2024旨在为推动能源与电气工程领域科学研究的发展&#xff0c;增进各国学者之间的学术交流&#xff…

备战蓝桥杯---数据结构与STL应用(进阶1)

让我们先来看一看map的基础应用吧&#xff1a; 下面是实现代码&#xff1a; #include<bits/stdc.h> using namespace std; typedef map<int,multiset<int> > line; map<int,multiset<int> >mx; map<int,multiset<int> >my; int n,m…

《Docker技术革命:从虚拟机到容器化,全面解析Docker的原理与应用-上篇》

文章目录 Docker为什么会出现总结 Docker的思想Docker历史总结 Docker能干嘛虚拟机技术虚拟机技术的缺点 容器化技术Docker和虚拟机技术的区别 Docker概念Docker的基本组成镜像&#xff08;image)容器&#xff08;container&#xff09;仓科&#xff08;repository&#xff09;…

Vulnhub靶机:hackme2-DHCP

一、介绍 运行环境&#xff1a;Virtualbox(攻击机)和VMware(靶机) 攻击机&#xff1a;kali&#xff08;192.168.56.106&#xff09; 靶机&#xff1a;hackme2-DHCP&#xff08;192.168.56.107&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1…

【lesson31】MySQL视图

文章目录 视图介绍基本使用创建视图案例删除视图 视图规则和限制 视图介绍 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图。 基本使用…

GitLab16.8配置webhooks、Jenkins2.4配置GitLab插件实现持续集成、配置宝塔面板实现持续部署(其三)

看本篇文章的前提是已经部署完GItlab和Jenkins服务器&#xff0c;已经可以手动构建成功&#xff0c;并且经过了很多次实践&#xff0c;对这两款软件基本熟悉。 建议大家按以下顺序看 前端自动化&#xff08;其一&#xff09;部署gitlab 前端自动化&#xff08;其二&#xff0…

百无聊赖之JavaEE从入门到放弃(十四)异常

目录 一.异常机制 二.异常分类 三.异常的处理方式 1.捕获异常(try-catch-finally) 2.声明异常&#xff08;throws 子句&#xff09; 四.try-with-resource 五.自定义异常 六.IDEA 调试 debug 一.异常机制 工作中&#xff0c;程序遇到的情况不可能完美。比如&#xff1a…

Zabbix数据库分离与邮件报警

基础环境&#xff1a;要有zabbix服务端与被监控端实验目标&#xff1a;源数据库与服务端存放在一台服务器上&#xff0c;分离后源数据库单独在一台服务器上&#xff0c;zabbix服务端上不再有数据库。环境拓扑图&#xff1a; 实验步骤&#xff1a; 1.在8.7服务器上安装相同版本…

单片机驱动多个ds18b20

目录 1设计内容 2ds18b20介绍 2.1传感器引脚及原理图 2.2寄存器配置 3程序实现 3.1配置初始化 3.2配置寄存器 3.3ROM读取 3.4温度读取 1设计内容 通过51单片机&#xff0c;读取总线上挂载的多个ds18b20的温度信息。 如下图&#xff0c;成功读取到3路温度数据。 2ds18…