etcd自动化安装配置教程

news2024/11/16 11:31:46

文章目录

  • 前言
  • 一、简介
    • 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

返回结果如下:

[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.coloradmin.cn/o/1423778.html

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

相关文章

Facebook的社交影响力:用户行为解析与趋势

在当今数字时代&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分&#xff0c;而Facebook作为全球最大的社交平台之一&#xff0c;其社交影响力愈发显著。本文将深入分析Facebook的社交影响力&#xff0c;解析用户行为&#xff0c;同时探讨当前和未来的社交趋势。 社…

如何快速将 HTML 文件转换为 PDF

HTML表格是一种在网页上显示数据的通用且强大的方式。它们可用于创建简单的表&#xff08;例如日历&#xff09;或更复杂的表&#xff08;例如数据网格&#xff09;。在这篇博文中&#xff0c;我们将逐步学习如何在 C# 中创建 HTML 表格。本指南将为您提供在 C# 中有效创建 HTM…

MySQL运维实战(5.3) MySQL数据乱码的一些情况

作者&#xff1a;俊达 表数据乱码 表数据出现乱码的情况通常是由于数据的真实编码与相关参数不一致引起的&#xff0c;其中包括常见的参数如character_set_client、character_set_results、字段编码以及终端编码等。确保这些参数保持一致&#xff0c;可以有效预防和解决乱码问…

前端封装websocket类,实现消息注册和全局回调

实现消息注册和回调函数&#xff0c;实现全局使用同一个webscoket对象&#xff0c;并实现断线重连和心跳连接等功能&#xff0c;可以实现全局使用唯一实例&#xff0c;可以另外进行拓展配置 // WebSocket类对象 class WebSocketCli {// 构造函数constructor(url: string, opts…

如何更改Outlook阅读邮件时的默认字体?

如果收到的邮件中未指定字体&#xff0c;outlook默认使用宋体显示。 如果觉得不好看&#xff0c;可以进行更改。但不是在outlook中更改&#xff0c;outlook中只是修改编辑器中的字体&#xff0c;和纯文本邮件浏览的字体&#xff0c;不能更改未指定字体的HTML邮件的显示字体。 …

如何确保 Redis 集群的数据一致性?

当我们谈论Redis集群的数据一致性问题时&#xff0c;实际上我们是在探讨一个复杂且多维度的主题。 Redis作为一个高性能的键值存储数据库&#xff0c;在分布式环境下如何保证数据的一致性&#xff0c;是设计和使用Redis集群时需要重点考虑的问题。 下面&#xff0c;我将从多个角…

福禄克万用表使用注意事项

所需设备&#xff1a; 1、Fluke ADPT连接器&#xff1b; 2、Fluke 15B / 17B / 18B&#xff1b; 虽然福禄克万用表非常耐用&#xff0c;但是一旦电池漏液是非常糟糕的&#xff01; 定期查看电池是否漏液&#xff01; 定期查看电池是否漏液&#xff01; 定期查看电池是否…

SOLIDWORKS Simulation 2024增强新功能

SOLIDWORKS 2024 新功能前瞻| SOLIDWORKS Simulation 功能增强 • 性能增强功能 • 壳体的接合交互 • 网格性能 • 欠约束实体检测 • 增强型轴承接头 • 收敛检查图解 • 去耦合混合自由体模式 • 复制算例时排除网格和结果 • 新增在网格化后及分析完成后自动保存模…

推荐系统|召回_Swing召回通道

召回_Swing 模型 swing模型是ItemCF的一种改造 ItemCF的原理 举个例子。 ItemCF的存在的问题 有可能两篇不同类型的物品/笔记被分享到同一个微信群&#xff0c;从而提高了两个不同类型的视频被同一组人打开的概率。 而这只能说明这两个物品/笔记具有相同的受众&#xff0c;…

数据分析基础之《pandas(2)—基本数据操作》

一、读取一个真实的股票数据 1、读取数据 # 基本数据操作 data pd.read_csv("./stock_day.csv")data# 删除一些列&#xff0c;使数据简洁点 data data.drop([ma5,ma10,ma20,v_ma5,v_ma10,v_ma20], axis1)data 二、索引操作 1、numpy当中我们已经讲过使用索引选取…

幻兽帕鲁服务器Palworld游戏怎么更新?

自建幻兽帕鲁服务器进入Palworld游戏提示“您正尝试加入的比赛正在运行不兼容的游戏版本&#xff0c;请尝试升级游戏版本”什么原因&#xff1f;这是由于你的客户端和幻兽帕鲁服务器版本不匹配&#xff0c;如何解决&#xff1f;更新幻兽帕鲁服务器即可解决。阿里云百科aliyunba…

《Is dataset condensation a silver bullet for healthcare data sharing?》

一篇数据浓缩在医疗数据集应用中的论文。 其实就是在医疗数据集上使用了data condensation的方法&#xff0c;这里使用了DM的方式&#xff0c;并且新增了浓缩时候使用不同的网络。 1. 方法 数据浓缩DC的目的是&#xff1a; E x ∼ P D [ L ( φ θ O ( x ) , y ) ] ≃ E x ∼…

C#中的WebApi响应Accept头,自动返回xml或者json

Global.asax.cs中的Application_Start方法添加 GlobalConfiguration.Configuration.Formatters.Clear(); GlobalConfiguration.Configuration.Formatters.Add(new XmlMediaTypeFormatter()); GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter())…

Kerberos 安全认证

什么是Kerberos Kerberos是一种计算机网络授权协议&#xff0c;用来在非安全网络中&#xff0c;对个人通信以安全的手段进行身份认证。密码不在网络上传输&#xff0c;提高安全性。 简写名词 AS&#xff08;Authentication Server&#xff09; 认证服务器KDC&#xff08;Key…

Swagger学习使用

swagger升级导致访问ui页面地址不一样 方式一 依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.3.RELEASE</version></parent> <dependenc…

云打印机怎么连接手机?

现在越来越多的人使用手机来办公或学习。而当我们需要打印文件时,如何用云打印机连接手机就非常重要了。易绘创云打印服务非常实用&#xff0c;那么易绘创云打印机又该怎么连接手机&#xff1f;下面就让我们一起来了解吧。 云打印机怎么连接手机&#xff1f; 当下云打印机连接…

adb 无线连接 操作Android设备

最近集五福活动比较热门 可以用这个工具 用自己擅长的语言写一个循环程序 运行起来就可以 自动帮我们 看视频得福卡了 很方便 while (true) {sleep(mt_rand(15, 25));system(adb shell input swipe 500 2000 500 1000 100); } 1. 首先下载 安卓开发工具 adb adb网盘链接 链接…

第17次修改了可删除可持久保存的前端html备忘录:增加年月日星期,增加倒计时,更改保存区名称可以多个备忘录保存不一样的信息,匹配背景主题:现代深色

第17次修改了可删除可持久保存的前端html备忘录&#xff1a;增加年月日星期&#xff0c;增加倒计时&#xff0c;更改保存区名称可以多个备忘录保存不一样的信息&#xff0c;匹配背景主题&#xff1a;现代深色 备忘录代码&#xff1a; <!DOCTYPE html> <html lang&quo…

C#用正则表达式判断字符串是否纯数字vs用Char.IsDigit 方法遍历字符数组是否纯数字

目录 一、使用的方法 1.正则表达式 2.Char.IsDigit 方法 二、源码 1.源代码 2.生成效果 一、使用的方法 1.正则表达式 在程序运行过程中&#xff0c;经常需要用户输入数字信息&#xff0c;如输入员工年龄、工资等。使用正则表达式Regex类的IsMatch方法&#xff0c;可以有…

配置IPv6静态路由

1、静态路由简介 静态路由是一种需要管理员手工配置的特殊路由。 静态路由在不同网络环境中有不同的目的&#xff1a; 当网络结构比较简单时&#xff0c;只需配置静态路由就可以使网络正常工作。 在复杂网络环境中&#xff0c;配置静态路由可以改进网络的性能&#xff0c;并…