|
1 | 1 | [[hardware]]
|
2 | 2 | === 硬件
|
3 | 3 |
|
4 |
| -按照正常的流程,你可能已经((("deployment", "hardware")))((("hardware")))在自己的笔记本电脑或集群上使用了 Elasticsearch。 |
| 4 | +按照正常的流程,你可能已经 ((("deployment", "hardware")))((("hardware"))) 在自己的笔记本电脑或集群上使用了 Elasticsearch 。 |
5 | 5 | 但是当要部署 Elasticsearch 到生产环境时,有一些建议是你需要考虑的。这里没有什么必须要遵守的准则,Elasticsearch 被用于在众多的机器上处理各种任务。基于我们在生产环境使用 Elasticsearch 集群的经验,可以为你提供一个好的起点。
|
6 | 6 |
|
7 | 7 | ==== 内存
|
8 | 8 |
|
9 |
| -如果有一种资源是最先被耗尽的,它可能是内存。((("hardware", "memory")))((("memory"))) |
10 |
| -排序和聚合都很耗内存,所以有足够的堆空间来应付它们是很重要的。((("heap"))) 即使堆空间是比较小的时候, |
11 |
| -也能为操作系统文件缓存提供额外的内存。因为Lucene使用的许多数据结构是基于磁盘的格式,Elasticsearch 利用操作系统缓存能产生很大效果。 |
| 9 | +如果有一种资源是最先被耗尽的,它可能是内存。 ((("hardware", "memory")))((("memory"))) |
| 10 | +排序和聚合都很耗内存,所以有足够的堆空间来应付它们是很重要的。 ((("heap"))) 即使堆空间是比较小的时候, |
| 11 | +也能为操作系统文件缓存提供额外的内存。因为 Lucene 使用的许多数据结构是基于磁盘的格式, Elasticsearch 利用操作系统缓存能产生很大效果。 |
12 | 12 |
|
13 |
| -64 GB内存的机器是非常理想的, 但是32 GB 和 16 GB 机器也是很常见的。少于8 GB 会适得其反 (你最终需要很多很多的小机器), 大于64 GB的机器也会有问题, |
14 |
| -我们将在<<heap-sizing>>中讨论。 |
| 13 | +64 GB 内存的机器是非常理想的, 但是32 GB 和16 GB 机器也是很常见的。少于8 GB 会适得其反 (你最终需要很多很多的小机器), 大于64 GB的机器也会有问题, |
| 14 | +我们将在 <<heap-sizing>> 中讨论。 |
15 | 15 |
|
16 | 16 | ==== CPUs
|
17 | 17 |
|
18 |
| -大多数 Elasticsearch 部署往往对CPU要求很小。因此,((("CPUs (central processing units)")))((("hardware", "CPUs"))) |
| 18 | +大多数 Elasticsearch 部署往往对CPU要求很小。因此, ((("CPUs (central processing units)")))((("hardware", "CPUs"))) |
19 | 19 | 确切的处理器安装事项少于其他资源。你应该选择具有多个内核的现代处理器,常见的集群使用两到八个核的机器。
|
20 | 20 |
|
21 |
| -如果你要在更快的CUPs和更多的核心之间选择,选择更多的核心更好。多个内核提供的额外并发将远远超过稍微快点的CPU速度。 |
| 21 | +如果你要在更快的CPUs和更多的核心之间选择,选择更多的核心更好。多个内核提供的额外并发远胜过稍微快一点点的时钟频率。 |
22 | 22 |
|
23 | 23 | ==== 硬盘
|
24 | 24 |
|
25 |
| -硬盘对所有的集群都很重要,((("disks")))((("hardware", "disks"))) 对高度索引的集群更是加倍重要 |
26 |
| -(例如那些存储日志数据的)。硬盘是服务器上最慢的子系统,这意味着那些写入量很大的集群很容易让硬盘饱和,,使得它成为集群的瓶颈。 |
| 25 | +硬盘对所有的集群都很重要, ((("disks")))((("hardware", "disks"))) 对高度索引的集群更是加倍重要 |
| 26 | +(例如那些存储日志数据的)。硬盘是服务器上最慢的子系统,这意味着那些写入量很大的集群很容易让硬盘饱和,使得它成为集群的瓶颈。 |
27 | 27 |
|
28 |
| -如果你负担得起SSD,它将远远超出任何旋转媒介(注:机械硬盘,磁带等)。 基于SSD 的节点,查询和索引性能都有提升。如果你负担得起,SSD是一个好的选择。 |
| 28 | +如果你负担得起 SSD ,它将远远超出任何旋转媒介(注:机械硬盘,磁带等)。 基于 SSD 的节点,查询和索引性能都有提升。如果你负担得起, SSD 是一个好的选择。 |
29 | 29 |
|
30 | 30 | .检查你的 I/O 调度程序
|
31 | 31 | ****
|
32 |
| -如果你正在使用SSDs,确保你的系统 I/O 调度程序是((("I/O scheduler"))) 配置正确的。 |
| 32 | +如果你正在使用 SSDs ,确保你的系统 I/O 调度程序是 ((("I/O scheduler"))) 配置正确的。 |
33 | 33 | 当你向硬盘写数据,I/O 调度程序决定何时把数据
|
34 | 34 | _实际_ 发送到硬盘。大多数默认 *nix 发行版下的调度程序都叫做 `cfq` (完全公平队列).
|
35 | 35 |
|
36 | 36 | 调度程序分配 _时间片_ 到每个进程。并且优化这些到硬盘的众多队列的传递。但它是为旋转媒介优化的:
|
37 | 37 | 旋转盘片的固有特性意味着它写入数据到基于物理布局的硬盘会更高效。
|
38 | 38 |
|
39 |
| -这对SSD来说是低效的,然而,尽管这里没有涉及到旋转盘片。但是,`deadline` 或者 `noop` 应该被使用。`deadline`调度程序基于写入等待时间进行优化, |
40 |
| -`noop`只是一个简单的FIFO队列。 |
| 39 | +这对 SSD 来说是低效的,然而,尽管这里没有涉及到旋转盘片。但是,`deadline` 或者 `noop` 应该被使用。`deadline`调度程序基于写入等待时间进行优化, |
| 40 | +`noop`只是一个简单的 FIFO 队列。 |
41 | 41 |
|
42 | 42 | 这个简单的更改可以带来显著的影响。仅仅是使用正确的调度程序,我们看到了500倍的写入能力提升。
|
43 | 43 | ****
|
44 | 44 |
|
45 | 45 | 如果你使用旋转媒介,尝试获取尽可能快的硬盘 (高性能服务器硬盘, 15k RPM 驱动器).
|
46 | 46 |
|
47 |
| -使用RAID 0是提高硬盘速度的有效途径, 对旋转硬盘和SSD来说都是如此。没有必要使用镜像或其它RAID变体,因为高可用已经通过replicas内建于Elasticsearch之中。 |
| 47 | +使用 RAID 0 是提高硬盘速度的有效途径,对旋转硬盘和 SSD 来说都是如此。没有必要使用镜像或其它 RAID 变体,因为高可用已经通过 replicas 内建于 Elasticsearch 之中。 |
48 | 48 |
|
49 |
| -最后,避免使用网络附加存储 (NAS)。人们常声称他们的NAS解决方案比本地驱动器更快更可靠。除却这些声称, |
50 |
| -我们从没看到NAS能配得上它的大肆宣传。NAS常常很慢,显露出更大的延时和更宽的平均延时方差,而且它是单点故障的。 |
| 49 | +最后,避免使用网络附加存储 (NAS)。人们常声称他们的 NAS 解决方案比本地驱动器更快更可靠。除却这些声称, |
| 50 | +我们从没看到NAS能配得上它的大肆宣传。 NAS 常常很慢,显露出更大的延时和更宽的平均延时方差,而且它是单点故障的。 |
51 | 51 |
|
52 | 52 | ==== 网络
|
53 | 53 |
|
54 |
| -快速可靠的网络显然对分布式系统的性能是很重要的((("hardware", "network")))((("network")))。 |
55 |
| -低延时能帮助确保节点间能容易的通讯,大带宽能帮助分片移动和恢复。现代数据中心网络 |
56 |
| -(1 GbE, 10 GbE) 对绝大多数集群都是足够的。 |
| 54 | +快速可靠的网络显然对分布式系统的性能是很重要的 ((("hardware", "network")))((("network"))) 。 |
| 55 | +低延时能帮助确保节点间能容易的通讯,大带宽能帮助分片移动和恢复。现代数据中心网络 (1 GbE, 10 GbE) 对绝大多数集群都是足够的。 |
57 | 56 |
|
58 | 57 | 即使数据中心们近在咫尺,也要避免集群跨越多个数据中心。绝对要避免集群跨越大的地理距离。
|
59 | 58 |
|
60 |
| -Elasticsearch 假定所有节点都是平等的--并不会因为有一半的节点在150ms外的另一数据中心而有所不同。更大的延时会加重分布式系统中的问题而且使得调试和排错更困难。 |
| 59 | +Elasticsearch 假定所有节点都是平等的--并不会因为有一半的节点在150ms 外的另一数据中心而有所不同。更大的延时会加重分布式系统中的问题而且使得调试和排错更困难。 |
61 | 60 |
|
62 |
| -和NAS的争论类似,每个人都声称他们的数据中心间的线路都是健壮和低延时的。这是真的--直到它不是时(网络失败终究是会发生的,你可以相信它)。 |
| 61 | +和 NAS 的争论类似,每个人都声称他们的数据中心间的线路都是健壮和低延时的。这是真的--直到它不是时(网络失败终究是会发生的,你可以相信它)。 |
63 | 62 | 从我们的经验来看,处理跨数据中心集群的麻烦事是根本不值得的。
|
64 | 63 |
|
65 | 64 | ==== 一般注意事项
|
66 | 65 |
|
67 |
| -获取真正的巨型机器在今天是可能的:((("hardware", "general considerations"))) 成百GB的RAM 和 几十个 CPU 核心。 |
| 66 | +获取真正的巨型机器在今天是可能的:((("hardware", "general considerations"))) 成百 GB 的 RAM 和 几十个 CPU 核心。 |
68 | 67 | 反之,在云平台上串联起成千的小虚拟机也是可能的,例如 EC2。哪条道路是最好的?
|
69 | 68 |
|
70 | 69 | 通常,选择中到大型机器更好。避免使用小型机器,
|
71 |
| -因为你不会希望去管理拥有上千个节点的集群,而且在这些小型机器上 运行Elasticsearch的开销也是显著的。 |
| 70 | +因为你不会希望去管理拥有上千个节点的集群,而且在这些小型机器上 运行 Elasticsearch 的开销也是显著的。 |
72 | 71 |
|
73 |
| -与此同时,避免使用真正的巨型机器。它们通常会导致资源使用不均衡(例如,所有的内存都被使用,但CPU没有)而且在单机上运行多个节点时,会增加逻辑复杂度。 |
| 72 | +与此同时,避免使用真正的巨型机器。它们通常会导致资源使用不均衡(例如,所有的内存都被使用,但 CPU 没有)而且在单机上运行多个节点时,会增加逻辑复杂度。 |
0 commit comments