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

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官方文档

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

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

相关文章

【HarmonyOS】鸿蒙开发之HTTP网络请求——第5章

HTTP网络请求封装 network/request.ets import { configInterface } from ./type import http from ohos.net.http import { getToken } from ../utils/storage//网络请求封装 export const request (config:configInterface)>{let httpRequest:http.HttpRequest http.c…

模拟实现哈希表 - HashMap(Java版本)

目录 1. 概念 2. 冲突-概念 3. 冲突-避免 4. 冲突-避免-哈希函数设计 5. 冲突-避免-负载因子调节 ⭐⭐⭐⭐⭐ 6. 冲突-解决 6.1 冲突-解决-闭散列 6.2 冲突-解决-开散列/哈希桶 ⭐⭐⭐⭐⭐ 7. 冲突严重时的解决办法 8. 模拟实现 1. 概念 顺序结构以及平衡树中&#…

代码随想录day16--二叉树的应用4

LeetCode513.找树左下角的值 题目描述&#xff1a; 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7 解题思…

除毛可以用宠物空气净化器吗?猫用空气净化器哪些品牌吸毛好?

作为一位长期养猫的铲屎官&#xff0c;我深刻理解只有养猫人才懂的困扰&#xff0c;那就是家里到处都是猫毛和异味。我发现自从开始养猫之后&#xff0c;家里的空气质量变得不佳。猫毛和皮屑飞扬&#xff0c;而且室内空气中的污染物也越来越多。这种低质量的空气对我们的健康有…

分组密码工作模式

在密码学中&#xff0c;分组密码工作模式可以提供诸如机密性或真实性的信息服务。 基于分组的对称加密算法&#xff08;DES 、AES等&#xff09;只是描述如何根据加密密钥对一段固 定长度&#xff08;块&#xff09;的数据进行加密&#xff0c;对于比较长的数据&#xff0c;分组…

性能测试+Jmeter介绍

文章目录 什么是性能测试?性能测试的目的性能测试分类一般性能测试负载测试压力测试大数据量测试配置测试稳定性测试 性能测试术语虚拟用户并发及并发用户数响应时间每秒事务数吞吐量、吞吐率点击率性能计数器资源利用率 性能测试流程测试计划阶段测试设计阶段测试开发阶段测试…

微服务知识

1、概念 大型单体应用拆分成多个独立部署运行的微服务&#xff08;解决并发问题&#xff09;​​​​​​​ 2、特点 3、技术栈 4、微服务带来的问题 ​​​​​​​ 5、微服务的注册中心 服务注册与发现&#xff1a;微服务实例在启动时会向注册中心注册自己的信息&#xf…

Vmware 无法开启虚拟化解决方法

最近遇到了Vmware无法开启虚拟化的问题,已经解决,记录一下解决经过。 我遇到的情况是BIOS已经开启虚拟化,HV服务也停用了,但是Vmware仍然提示模块“VPMC”启动失败。网上的解决方案千篇一律,基本都是排查BIOS、停用Windows的虚拟化功能、停用HV主机服务、Vmware配置中关闭…

Ubuntu Linux 下安装和卸载cmake 3.28.2版本

一、安装cmake 1.首先&#xff0c;先从cmake官网下载cmake-3.28.2-linux-x86_64.tar.gz 2.用FinalShell 等文件上传工具&#xff0c;将这个压缩包上传到 虚拟机的某个路径去&#xff08;自选&#xff09; 3. cd /usr/local/bin/&#xff0c;然后创建cmake文件夹&#xff0c;…

国外知名的农业机器人公司

从高科技温室到云播种&#xff0c;农业机器人如何帮助农民填补劳动力短缺以及超市货架的短缺。 概要 “高科技农业”并不矛盾。当代农业经营更像是硅谷&#xff0c;而不是美国哥特式&#xff0c;拥有控制灌溉的应用程序、驾驶拖拉机的 GPS 系统和监控牲畜的带有 RFID 芯片的耳…

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏5(附项目源码)

本节最终效果演示 文章目录 本节最终效果演示系列目录前言修改鼠标光标和中心提示图鼠标光标素材修改默认鼠标光标修改中心提示图 拾取提示弹窗简单绘制UI拾取弹窗功能 源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使…

HarmonyOS-UIAbility组件启动模式

UIAbility组件启动模式 UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景&#xff0c;系统提供了三种启动模式&#xff1a; singleton&#xff08;单实例模式&#xff09;multiton&#xff08;多实例模式&#xff09;specified&#xff08;指…