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/bashETCD_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)" ]; thenif [ ! -d "${2}" ]; thenmkdir -p "${2}"fiif [ ! -f /tmp/"${etcd_name}".tar.gz ]; thenwget "$etcd_url" -P /tmpif [ $? -ne 0 ]; thenecho "${etcd_name}.tar.gz下载失败,请重试或手动下载到/tmp目录下再次执行"echo "下载地址:$etcd_url"exit 1fifiif [ -d "${2}/${etcd_name}" ]; thenrm -rf "${2}/${etcd_name}"fitar -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_INSTALLDIRexit 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/bashETCD_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)" ]; thenif [ ! -d "${2}" ]; thenmkdir -p "${2}"fiif [ ! -f /tmp/"${etcd_name}".tar.gz ]; thenwget "$etcd_url" -P /tmpif [ $? -ne 0 ]; thenecho "${etcd_name}.tar.gz下载失败,请重试或手动下载到/tmp目录下再次执行"echo "下载地址:$etcd_url"exit 1fifiif [ -d "${2}/${etcd_name}" ]; thenrm -rf "${2}/${etcd_name}"fitar -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_INSTALLDIRexit 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[@]}"
doecho "复制下面脚本到 $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 "-----------------------------------------------------------------------"
doneexit 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[@]}"
doecho "复制下面脚本到 $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 "-----------------------------------------------------------------------"
doneexit 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 a479f5112595b52aETCD_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 a479f5112595b52aETCD_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

返回结果如下:

[root@hadoop103 ~]# etcdctl --endpoints=192.168.145.103:2379 endpoint health
192.168.145.103:2379 is healthy: successfully committed proposal: took = 25.982594ms
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官方文档

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中科大计网学习记录笔记(一):Internet | 网络边缘

计算机网络 前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面…

【JavaSE篇】——内部类

目录 &#x1f393;内部类 &#x1f388;内部类的分类 &#x1f6a9;实例内部类 一.如何实例内部类对象 二.实例内部类中为什么不能有静态成员变量 &#xff08;用final解决&#xff09; 三.在实例内部类对象时&#xff0c;如何访问外部类当中相同的成员变量&#xff1f;…

SpringMVC-基本概念

一、引子 我们在上篇文章Spring集成Web中抛出了一个问题&#xff1a;为什么我们一直在自用Java Web阶段使用的Servlet来承接客户端浏览器的请求呢&#xff0c;我们熟知甚至是已经在日常开发中经常使用的Controller又与之有什么关系呢&#xff1f;我们将在本篇文章解答读者的这…

检测CUDA 是否能访问GPU时回应速度慢【笔记】

SUPWEMICRO 418G-Q20X12 维护记录&#xff1a; 两台设备均已安装CUDA与Pytorch&#xff0c;在检测CUDA 是否能访问GPU&#xff0c;执行torch.cuda.is_available()命令时&#xff0c;一台设备速度秒回应True&#xff0c;但另外一台设备回应速度慢&#xff08;1分钟左右&#xff…

node,node-sass,sass-loader之间的版本关系

前言 安装配置node-sass 以及 sass-loader想必是很多前端的噩梦–一不小心又不成功还得装个半天。 下面说一下这个问题。 当然&#xff0c;你肯定遇到过&#xff1a; Node Sass version 9.0.0 is incompatible with ^4.0.0-这样的问题&#xff0c;这个也是因为三者关系对不上…

【PyQt】02-基本UI

文章目录 前言一、首先了解什么是GUI&#xff1f;二、初学程序1.界面展示代码运行结果 2.控件2.1按钮展示代码运行结果 2.2 纯文本和输入框代码运行结果 3、重新设置大小 -resize4、移动窗口-move()5、设置界面在电脑中央5.1 代码运行结果 6、设置窗口图标代码运行结果 7、布局…

Django模型(二)

一、更新数据库表结构 不管是新增模型,还是修改已有模型后,只需要执行行命令即可: 1.1、创建迁移 在项目根目录的cmd中运行: $ python manage.py makemigrations model_app备注 model_app是子应用的名称,如果不指定,那么就是对所有 INSTALLED_APPS 中的应用都进行预备…

开发数据产品+AI产品通关上岸课程

该课程全面解析数据产品和人工智能产品的开发与设计。学员将学习产品规划、数据分析以及AI技术应用&#xff0c;通过案例实践掌握产品开发流程&#xff0c;致力于帮助他们成功进入数据和人工智能产品领域。 课程大小&#xff1a;9.8G 课程下载&#xff1a;https://download.cs…

Java多线程共享变量控制volatile

1. volatile实现可见性&#xff08;jdk 1.5后&#xff09; 1. 可见性 如果一个线程对共享变量值的修改&#xff0c;能够及时的被其他线程看到&#xff0c;叫做共享变量的可见性。如果一个变量同时在多个线程的工作内存中存在副本&#xff0c;那么这个变量就叫共享变量 volati…

如何从零开始开发一个PS5浏览器 | How to develop a PS5 browser

环境&#xff1a;Windows PS5一台 问题&#xff1a;PS5折腾需要使用PKG浏览器访问特定网址&#xff0c;如何自定义网址呢&#xff1f; 解决办法&#xff1a;使用开发套件PS Multi Tools开发一个空应用&#xff0c;利于deeplinkUri 参数访问网页 背景&#xff1a;PS5折腾后&…

dockerpipwork相关测试过程

pipework可以减轻docker实施过程中的工作量&#xff0c;在网上也找了几篇类似的文章&#xff0c;按照相应配置&#xff0c;结果并不相同 如下测试过程记录下&#xff1a; docker run -it --rm --name c1 busybox docker run -it --rm --name c2 busyboxpipework br1 c1 192…

Altium Designer的学习

PCB设计流程 1.新建空白工程&#xff1a; 创建一个新的工程 新建四个文件&#xff0c;并且保存&#xff1a; 每次打开文件时&#xff0c;打开以.PrjPcb结尾的文件 2.元件符号的创建&#xff1a; 在绘制图形的时候设置成10mil,为了在原理图中显得不那么大。 在绘制引脚的时候设…

拦截器,AOP,自定义注解的使用

自定义注解AOP&#xff0c;实现 进入方法打印参数日志 /*** 定义进入方法前打印日志注解* author zy*/ Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface PrintLog {} /*** 定义一个切面&#xff0c;在使用PrintLog注解的方法进…

Hadoop3.x基础(2)- HDFS

来源&#xff1a;B站尚硅谷 目录 HDFS概述HDFS产出背景及定义HDFS优缺点HDFS组成架构HDFS文件块大小&#xff08;面试重点&#xff09; HDFS的Shell操作&#xff08;开发重点&#xff09;基本语法命令大全常用命令实操准备工作上传下载HDFS直接操作 HDFS的API操作HDFS的API案例…

springboot 怎么设置局域网访问

如何配置Spring Boot应用以实现局域网访问 在开发一个Spring Boot应用时&#xff0c;我们通常会通过localhost来访问和测试我们的应用。但是&#xff0c;当我们想要在局域网中分享我们的应用&#xff0c;供其他设备访问时&#xff0c;仅仅使用localhost是不够的。本文将引导你…

Linux系统卸载重装JDK

CentOS 系统是开发者常用的 Linux 操作系统&#xff0c;安装它时会默认安装自带的旧版本的 OpenJDK&#xff0c;但在开发者平时开发 Java 项目时还是需要完整的 JDK&#xff0c;所以我们部署 CentOS 开发环境时&#xff0c;需要先卸载系统自带的 OpenJDK&#xff0c;再重新安装…

汽车销量可视化分析

目录 一.分析的背景、目的、意义 1、背景 2、目的 3、意义 二.数据来源 三.图表分析 1、汽车品牌销量柱状图 2、中国汽车销量柱状图 3、汽车销量前10排行柱状图 4、汽车厂商销量折线图 ​编辑5、汽车销量词云图 6、汽车车型销量 7、汽车价格分布雷达图 8、汽车分…

免费的ChatGPT网站(7个)

还在为找免费的chatGPT网站或者应用而烦恼吗&#xff1f;博主归纳总结了7个国内非常好用&#xff0c;而且免费的chatGPT网站&#xff0c;AI语言大模型&#xff0c;我们都来接触一下吧。 免费&#xff01;免费&#xff01;免费&#xff01;...&#xff0c;建议收藏保存。 1&…

深入浅出HBase:一文理解HBase基础概念(列存储、时间戳、key-value)、架构特点以及适合的使用场景

文章目录 一. HBase 数据模型1. 行存储与列式存储1.1. 行存储1.2. 列存储 2. HBase 数据模型2.1. 模型概览2.2. 列与列族2.3. 时间戳&#xff1a;定义数据版本2.4. HBase的Key-Value 三. HBase架构1. HBase读写流程简述2. HRegionServer内部内部数据流转&#xff1a;HRegion &l…

Web前端入门 - HTML JavaScript Vue

ps&#xff1a;刚开始学习web前端开发&#xff0c;有什么不正确、不标准的内容&#xff0c;欢迎大家指出~ Web简介 90年代初期&#xff0c;Web1.0&#xff0c;静态页面&#xff0c;不和服务器交互&#xff0c;网页三剑客指Dreamweaver、Fireworks、Flash2000年代中期&#xf…