ES7.X写入过程原理及写入优化具体步骤

本文深入解析Elasticsearch写入流程,包括refresh、flush、段合并等关键步骤,并提供写入性能优化策略,如调整刷新间隔、段合并优化、索引缓冲区设置等。
Elasticsearch写入数据原理

首先,客户端接收写入请求,将请求路由到其中的一个node下的一个分片(随机轮询算法)。
一。refresh:数据打入buffer,再打入os cache(此时已经可以访问),再写入一个segmentfile。一个过程称之为refresh。当写入完成buffer清空,默认1s一次。
二。flush:数据不仅打入buffer,也记录在tranlog,但每次buffer数据清空,tranlog不清空。tranlog积攒5秒(默认)后,执行flush。 flush第一步 refreshbuffer。第二步,建立commit point写入磁盘 。第三步。os cache强刷进入磁盘。(有java rest api可以控制flush,也就是控制刷盘操作)。
三。段合并
定期段合并 将每个refresh产生的segmentfile合并,将合并后segment file写入磁盘,也写入一个commit point。将之前segment file标记del之后物理删除。
四。注意:tranlog写入os cache那5秒。数据在buffer,tranlog os cache,以及buffer refresh写入的segment file里。并未持久化,所以此时宕机会导致5秒的数据丢失。

ES集群写入优化原理

一。加大tranlog的flush间隔,降低iops和写阻塞:

   默认index.translog.durability: request
  修改为index.translog.durability: async
  同时设置index.translog.sync_interval: 20s
  也就是刷盘周期。默认刷盘周期5s。不可设置低于100毫秒。
  同时因为加大了flush时间,导致tranlog增大,则应该增加
  tranlog阈值。
  index.translog.flush_threshold_size: 1024mb
  最大1024默认512,不可超越1024,因为会导致refresh从
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ > IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! > Someone could be eavesdropping on you right now (man-in-the-middle attack)! > It is also possible that a host key has just been changed. > The fingerprint for the ED25519 key sent by the remote host is > SHA256:yswdgtshuc+hy/m0jR576i7Nu0Es7lZ71jIrFKXnkE0. > Please contact your system administrator. > Add correct host key in C:\\Users\\ASUS/.ssh/known_hosts to get rid of this mess > age. > Offending ECDSA key in C:\\Users\\ASUS/.ssh/known_hosts:11 > Host key for [connect.nmb1.seetacloud.com]:31449 has changed and you have reques > ted strict checking. > Host key verification failed. > 过程试图写入的管道不存在。 [23:24:39.607] "install" terminal command done [23:24:39.608] Install terminal quit with output: 过程试图写入的管道不存在。 [23:24:39.608] Received install output: 过程试图写入的管道不存在。 [23:24:39.608] WARN: $PLATFORM is undefined in installation script output. Errors may be dropped. [23:24:39.609] Failed to parse remote port from server output [23:24:39.610] Resolver error: Error at y.Create (c:\Users\ASUS\.vscode\extensions\ms-vscode-remote.remote-ssh-0.120.0\out\extension.js:2:744751) at t.handleInstallOutput (c:\Users\ASUS\.vscode\extensions\ms-vscode-remote.remote-ssh-0.120.0\out\extension.js:2:742832) at t.tryInstall (c:\Users\ASUS\.vscode\extensions\ms-vscode-remote.remote-ssh-0.120.0\out\extension.js:2:865534) at async c:\Users\ASUS\.vscode\extensions\ms-vscode-remote.remote-ssh-0.120.0\out\extension.js:2:824246 at async t.withShowDetailsEvent (c:\Users\ASUS\.vscode\extensions\ms-vscode-remote.remote-ssh-0.120.0\out\extension.js:2:827501) at async A (c:\Users\ASUS\.vscode\extensions\ms-vscode-remote.remote-ssh-0.120.0\out\extension.js:2:820760) at async t.resolve (c:\Users\ASUS\.vscode\extensions\ms-vscode-remote.remote-ssh-0.120.0\out\extension.js:2:824898) at async c:\Users\ASUS\.vscode\extensions\ms-vscode-remote.remote-ssh-0.120.0\out\extension.js:2:1113660 [23:24:39.615] ------ [23:24:39.616] No hints found in the recent session.
最新发布
07-02
<think>我们正在处理SSH连接时出现的两个错误:1.Host keyverification failed(主机密钥验证失败)2.过程试图写入的管道不存在(这通常与SSH连接建立过程中的通信问题有关)根据提供的引用,我们可以分析原因并给出解决方法。第一个错误(Host keyverification failed)的原因:-目标主机的公钥未被信任(首次连接时未确认指纹)- known_hosts文件中存在冲突的密钥记录(目标主机密钥已更改)-权限问题:.ssh目录或known_hosts文件的权限设置不当第二个错误(过程试图写入的管道不存在)可能的原因:-根据引用[3],可能是由于known_hosts文件中存在相同IP地址的多个密钥记录,导致认证失败。-另外,也可能是SSH连接过程中网络中断或服务端问题。解决方法:针对第一个错误(Hostkey verificationfailed):✅方法一:手动清除特定主机的密钥记录(编辑~/.ssh/known_hosts文件,删除对应主机的行)使用命令:`ssh-keygen -R目标主机IP或域名`或者手动编辑known_hosts文件:`vi~/.ssh/known_hosts`,找到对应行并删除。✅方法二:检查并修复权限问题确保.ssh目录权限为700,known_hosts文件权限为600。命令:chmod700~/.sshchmod600 ~/.ssh/known_hosts针对第二个错误(过程试图写入的管道不存在):-根据引用[3],同样可能是known_hosts文件中存在重复或冲突的密钥记录。因此,我们可以尝试删除该主机的所有记录(使用上述方法一)。-另外,检查网络连接和SSH服务状态。综合两个错误,我们可以采取以下步骤:步骤1:清除known_hosts文件中冲突的记录使用命令:`ssh-keygen -R目标主机IP`例如:`ssh-keygen -R192.168.1.100`步骤2:检查权限确保.ssh目录和known_hosts文件的权限正确。步骤3:重新连接重新连接时,SSH会提示你确认新的主机密钥,输入`yes`确认。步骤4:如果问题仍然存在,考虑重新生成密钥对(在客户端和服务器端)在客户端重新生成密钥对(如果之前有权限问题):ssh-keygen -t rsa -b2048#生成新的密钥然后将新的公钥上传到服务器(如果使用的是公钥认证):ssh-copy-id user@hostname在服务器端,检查/etc/ssh/sshd_config配置,确保允许公钥认证,并且重启SSH服务。步骤5:检查网络和服务器状态确保服务器SSH服务正在运行,并且网络可达。注意:第二个错误(管道不存在)也可能是由于VSCode的SSH连接问题,可以尝试更新VSCode和SSH扩展,或者使用命令行SSH测试。根据引用[2],如果希望以后不输入密码,可以配置SSH免密登录(使用公钥认证)。但需要确保公钥正确添加到服务器的authorized_keys文件中。总结:两个错误可能都与known_hosts文件有关,首先尝试清除该文件中的相关记录,然后重新连接。同时检查权限和网络。如果按照上述步骤操作后问题仍然存在,请提供更多信息以便进一步排查。相关问题:1.如何配置SSH免密登录?2. SSH连接时出现“Permissiondenied (publickey)”错误怎么办?3.如何检查SSH服务是否在服务器上运行?4.如何更新known_hosts文件中的主机密钥?5.为什么SSH密钥会改变?如何防止?</think>### SSH连接错误:主机密钥验证失败与管道不存在 针对您遇到的 **Host key verification failed** 和 **过程试图写入的管道不存在** 错误,以下是系统化的解决方案: --- ### **错误原因分析** 1. **主机密钥验证失败** - 首次连接时未验证主机指纹(公钥未信任) - `known_hosts` 文件中存在冲突的密钥记录(如主机重装系统后密钥变更)[^1][^3] - `.ssh` 目录或 `known_hosts` 文件权限问题(需 `700` 和 `600` 权限) 2. **管道不存在错误** - `known_hosts` 文件中存在同一 IP 的多个冲突密钥 [^3] - SSH 连接建立过程中网络中断或服务端异常终止 - VSCode 等工具的 SSH 扩展缓存冲突 --- ### **解决方案** #### ✅ 步骤 1:清除冲突的主机密钥 ```bash # 删除目标 IP 的所有密钥记录(例如 IP: 192.168.1.100) ssh-keygen -R 192.168.1.100 # 或手动编辑 known_hosts 文件 vi ~/.ssh/known_hosts # 删除目标 IP 对应的所有行 ``` #### ✅ 步骤 2:修复文件权限 ```bash chmod 700 ~/.ssh # 目录权限 chmod 600 ~/.ssh/* # 文件权限(包括 known_hosts) ``` #### ✅ 步骤 3:重新建立连接 ```bash ssh user@host_ip # 首次连接时输入 yes 接受新密钥 ``` #### ✅ 步骤 4:处理管道错误(VSCode 用户) - 关闭所有 VSCode 窗口,删除本地缓存: ```bash rm -rf ~/.vscode-server # Linux/macOS rm -rf ~/.vscode-remote # Windows ``` - 重启 VSCode 并重新连接 --- ### **预防措施** 1. **密钥管理** - 服务器更换 SSH 密钥前,通知所有用户清除旧记录 - 使用 `ssh-keyscan` 预加载可信主机密钥: ```bash ssh-keyscan host_ip >> ~/.ssh/known_hosts ``` 2. **免密登录配置** 配置 SSH 公钥认证避免重复验证: ```bash ssh-keygen -t ed25519 # 生成密钥 ssh-copy-id user@host_ip # 上传公钥 ``` [详细步骤参考](https://blog.csdn.net/ouyang_peng/article/details/77334215)[^2] --- ### **相关问题** 1. 如何验证 SSH 主机指纹的真实性? 2. 配置 SSH 免密登录后仍提示密码输入的可能原因? 3. 服务器重装系统后如何批量更新所有客户端的 `known_hosts` 记录? 4. VSCode 远程开发时如何彻底清除 SSH 缓存? 5. `known_hosts` 文件中不同加密算法(RSA/ECDSA/Ed25519)记录的区别? > 提示:若问题持续,检查服务端 `sshd` 配置(`/etc/ssh/sshd_config`)中的 `HostKeyAlgorithms` 是否与客户端兼容。 [^1]: 目标主机公钥未信任或密钥变更导致验证失败 [^2]: SSH 密钥生成与免密登录配置方法 [^3]: 同一 IP 的多条密钥记录引发认证冲突
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值