Vertica数据库硬件配置指南
Vertica 分析平台软件在对等节点的无共享 MPP 集群上运行。集群的每个节点是独立的,无主节点、无控制节点。企业部署模式下,数据根据分布键分散存储在所有计算节点上,所有节点并行参与计算。Eon部署模式下,数据持久存储在共享存储上,本地作为高速缓存,将所有的热数据存放在计算节点本地。
本文提供了选择和配置单个物理服务器作为 Vertica 节点的建议。
本篇文章主要内容来源于官方文档,在加上一些我自己的经验,供大家参考。
推荐软件
Vertica 研发维护最新的2个主要版本,如果使用的版本研发不再支持,当遇到不能确定的bug时,无法提case到研发进一步排查、修复。
可通过官方产品支持生命周期查询当前在保的版本号以及计划过保时间,也可参照官方的这个时间表规划自己系统的版本升级计划。
| 版本号 | 状态 | 计划过保日期 |
|---|---|---|
| Vertica 11.1 | 在保 | 31 Mar 2024 |
| Vertica 11.0.x | 在保 | 31 Aug 2023 |
| Vertica 10.1.x | 在保 | 28 Feb 2023 |
| Vertica 10.0.x | 在保 | 31 May 2022 |
| Vertica 9.x | 过保 | 31 Oct 2021 |
一般生产环境推荐使用次新版本(例,11.0.2)的最新hotfix版,测试环境可以使用最新版本(例,11.1),具体每个版本支持的软件版本可以查看每个版本官方文档的Supported Platforms部分内容。
Vertica 11.1.x Supported Platforms
选择服务器型号
通过官方的测试和大量客户的实践,单台Vertica节点的服务器配置是双路CPU服务器,支持至少256GB内存,如果采用SAS盘,至少10块本地存储(推荐超过20块)组成阵列,如果采用SSD,则根据存储需求确定数量(至少2块以上组成阵列)。
处理器
Vertica 建议基于 Intel 的处理器为您的集群提供最佳的整体性能,并且 Intel 为 CPU 选择提供了许多选项。为了获得最佳的性价比,请考虑以下 CPU 型号:
- Intel Xeon Gold 6246 Processor 3.3 GHz: 12 cores
- Intel Xeon Platinum 8268 Processor 2.9 GHz: 24 cores
目前,英特尔提供具有更多内核的 CPU 选项。但是,Vertica 中的某些数据库操作无法利用这些选项,从而导致内核速度变慢,从而降低整体性能。处理器更快的时钟速度直接影响 Vertica 数据库响应时间。额外的内核增强了集群同时执行多个 MPP 查询和数据加载的能力。 Vertica 已确定每个 CPU 选择 12 个物理内核是基于实际客户部署和平均使用模型的最佳数量。这两款处理器是撰写本文时(2018 年 4 月)英特尔提供的最快的 12 核处理器。这些处理器使 Vertica 能够在各种并发数据库工作负载中提供最快的响应时间。
根据单个工作负载选择在 CPU 上启用超线程。超线程通过允许每个内核同时处理 2 个线程来增加每个 CPU 的逻辑内核数量。这对于短而快的进程可能非常有效,但对长时间运行的进程不利,因为单个进程可能导致第二个进程线程等待。
内存
为获得最佳性能,Vertica 每个计算节点应包括至少 256 GB 的 RAM。推荐配置是服务器中的每个物理核心有 8-12 GB 的 RAM。
关于内存的多通道配置,请咨询硬件供应商。通常在物理服务器中拥有多个内存通道以允许安装多个内存 DIMM。这样做允许您以多种方式在服务器中配置内存以优化成本。
通常,最具成本效益的方法是使用大量较小内存大小的 DIMM 来填充可用的内存插槽和通道。但是,在大多数服务器上,特别是旧型号的服务器上,当您将内存扩展到第二个通道之外时,内存的速度可能会降低。内存速度的这种降低会对 Vertica 性能产生不利影响。
存储
在本文档前面“选择服务器型号”中所述,Vertica 建议您在 Vertica 节点上的每台服务器上安装至少 10 块磁盘,最好是 20 块或更多,因为由多块盘组成的阵列才能满足Vertica工作负载的I/O性能要求。在硬件的选择上建议使用转速为 10k 或更高的企业级 12 Gb/s SAS 驱动器。也可以使用 SSD,但它们往往会增加 Vertica 节点的成本,而不会显着提高 Vertica 的性能。
此外,部署一个磁盘阵列控制器:
- 支持至少四 (4) 个 12 Gb/s SAS 通道。
- 至少有 1 GB 的配置缓存。
- 可支持 RAID 1、RAID 5、RAID 10 或 RAID 50。
Vertica 安装至少需要两个存储位置——一个用于操作系统和目录,另一个用于数据。将这些数据位置放在专用的连续存储卷上。
Vertica 是一个多线程应用程序。 Vertica 数据位置 I/O 配置文件的最佳特征是大块随机 I/O。
以下规范构成了存储硬件配置的通用示例,以实现 Vertica 节点的最大性能:
- 2 个 300 GB 12 G SAS 10K 企业级驱动器(用作操作系统和 Vertica 软件包安装目录位置,配置为 RAID 1)
- 22 个 1.2 TB 12 G SAS 10K 企业级驱动器(用于 Vertica 数据存储目录,可配置为 RAID 10 ,每个 Vertica 节点的格式化存储总容量约为 13 TB,也可配置为RAID 5,容量为25TB)
您也可以配置存储容量较小但转速更高的存储:
- 用 22 个 600 GB 12 G SAS 15K 企业级驱动器替代 22 个 1.2 TB 12 G SAS 10K 企业级驱动器。
- 用于 Vertica 数据存储目录,可配置为 RAID 10 ,每个 Vertica 节点的格式化存储总容量约为 6 TB,也可配置为RAID 5,容量为12TB)
Vertica可以使用以下这些存储类型:本地存储、SAN阵列、NAS存储单元、DAS存储。在每种情况下,存储对于主机来说都是一个文件系统,应该能够提供足够的 I/O 带宽。使用RAID阵列组成的本地存储以最低的 TCO 提供最佳的性价比。如果考虑采用SAN或者NAS存储,请务必保证计算节点与存储之间的负载均衡以及I/O带宽,避免存储访问成为系统的瓶颈。
您可以使用数据库自带的vioperf工具来测试I/O吞吐量,以了解基准I/O性能。
所需的最低 I/O 是每个节点上每个物理处理器内核最低 20 MB/s 读写,建议每个物理内核的读写速度为 40 MB/s 或更高。 该值基于在集群的所有节点上同时以全双工运行并以该速率同时读写。
数据盘RAID配置
为获得最佳性能,应将所有数据盘配置为一个 RAID 10 设备,默认条带大小为 512 KB(RAID方式可优化设置为1024KB,LVM方式可设置为2048KB)。 但是,如果您愿意牺牲一些磁盘性能来增加存储空间并提供更多冗余,您可以选择 RAID 5 或 RAID 50。
RAID控制器缓存比率设置应该有利于写入而不是读取(10/90,如果可用)。
逻辑驱动器(LVM)应使用跨越整个驱动器的单个主分区进行分区。
将 Vertica 的 data 存储位置放在单独的物理存储卷上。不要将 Vertica 的 data 与 catalog 位置放在同一存储位置。 Vertica 的 catalog 位置应与操作系统驱动器位于同一位置,或配置在其他驱动器上。
笔者注:一般情况下数据库的catalog与data目录都放在挂载的数据存储路径即可,通常是/data/目录。
有关详细信息,请阅读官方文档中的Installing Vertica。
注:
Vertica 仅支持在 LVM 2.02.66 或更高版本的 I/O 路径中配置了 Linux 逻辑卷管理器的存储,并且必须包含 1.02.48 或更高版本的设备映射器。 此限制适用于所有 Vertica 存储位置,包括通常位于操作系统驱动器上的目录。
Linux I/O调优
为了支持 Vertica 节点上的最大性能,Vertica 建议为 Vertica 数据位置卷使用以下 Linux I/O 配置设置:
- 推荐的 Linux 文件系统是 ext4。
- 推荐的 Linux I/O Scheduler配置是deadline。
- 推荐的 Linux readahead设置为 8192 个 512 字节扇区 (4 MB)。
操作系统管理员应持久配置 Vertica 数据卷的 deadline scheduler 和 readahead 设置,以便这些设置在服务器重新启动时保持不变。
数据 RAID 配置示例
注意:
以下步骤仅作为示例提供,可能不适合您的机器。在运行这些命令之前,请验证您的机器的驱动器号和数量。
1、对 RAID 10 数据驱动器进行分区和格式化:
# parted -s /dev/sdb mklabel gpt mkpart primary ext4 0% 100%
# mkfs.ext4 /dev/sdb1
2、创建 /data 挂载点,在 /etc/fstab 文件中添加一行,然后挂载 Vertica 数据卷:
# mkdir /data
[add line to /etc/fstab]: /dev/sdb1 /data ext4 defaults,noatime 0 0
# mount /data
3、为了使 Linux I/O scheduler、Linux Readahead和大页面碎片整理设置在系统重新启动时保持不变,将以下行添加到 /etc/rc.local 文件中。将这些步骤应用于系统中的每个驱动器。
注意:
以下命令假定 sdb 是数据驱动器,而 sda 是操作系统/目录驱动器。
echo deadline > /sys/block/sdb/queue/scheduler blockdev --setra 8192 /dev/sdb echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag echo no > /sys/kernel/mm/redhat_transparent_hugepage/khugepaged/defrag echo deadline > /sys/block/sda/queue/scheduler blockdev –setra 2048 /dev/sda
4、配置存储后,运行 vioperf 以了解基准 I/O 性能。
以下测试数据是磁盘数量大于 20 的磁盘 I/O 性能的理想目标:
- 使用 15K RPM 驱动器时,读写速度为 2,200 MB/s
- 使用 10K RPM 驱动器时,写入速度为 2,200 MB/s,读取速度为 1,500 MB/s
- 800+800 MB/s for rewrite
- 7k+ for seeks
如果您的测试结果明显偏低,请查看前面的步骤以验证您是否正确配置了数据存储位置和磁盘阵列控制器。
网络
为支持最大性能的 MPP 集群操作,Vertica 节点应包括至少两个 10 Gb 以太网端口,bond在一起以实现性能和冗余。
Vertica 集群由 Vertica 节点、关联的网络交换机和 Vertica 软件组成。
Vertica 建议您考虑将 Vertica 节点连接到两个单独的网络平面:
- 专用/私有/心跳网络(例如集群互连)专门用于内部集群通信。 此网络必须是相同的子网、专用交换机或 VLAN、10 Gb 以太网。 Vertica 在此网络上执行 TCP P2P 通信和 UDP 广播。 必须静态分配专用网络接口的 IP 地址。 不允许通过专用集群网络进行外部流量。
- 公共/业务网络用于数据库客户端(即应用程序)连接,它应该是 10 Gb 以太网。 Vertica 对公网配置没有硬性要求。 但是,Vertica 建议您为公共网络接口分配静态 IP 地址。
私有网络平面应具有以太网冗余。否则,互连(特别是交换机)将成为集群范围内的单点故障。
即使在公共网络完全失效的情况下,集群操作也不受影响。 因此,公共网络冗余在技术上不是必需的。 但是,如果发生故障,应用程序与数据库的连接会受到影响。 因此,请考虑公共网络冗余以实现整个环境的持续可用性。
要在专用网络和公共网络上实现冗余:
- Take the two ports from the Ethernet card on the server and run one to each of the two top-of-rack switches (which are bonded together in an IRF).
- Bond the links together using LACP.
- Using VLANs, divide the links into public and private networks.
配置网络
下图说明了实现高吞吐量和高可用性的典型网络设置(此图仅用于演示目的)。
此图显示适配器的绑定允许一个适配器发生故障,而连接不会失败。这种绑定提供了网络端口的高可用性。绑定适配器也使吞吐量翻倍。

此外,这种配置允许关于交换机的高可用性。如果交换机发生故障,集群不会关闭。但是,它可能会降低 50% 的网络吞吐量。
优化TCP/IP 堆栈
根据您的工作负载、连接数和客户端连接速率,调整 Linux TCP/IP 堆栈以提供足够的网络性能和吞吐量。
以下脚本代表 Vertica 集群的推荐网络 (TCP/IP) 调整参数。其他网络特性可能会影响这些参数优化您的吞吐量的程度。
将以下参数添加到 /etc/sysctl.conf 文件。更改将在下次重新启动后生效。
##### /etc/sysctl.conf
# Increase number of incoming connections
net.core.somaxconn = 1024
#Sets the send socket buffer maximum size in bytes.
net.core.wmem_max = 16777216
#Sets the receive socket buffer maximum size in bytes.
net.core.rmem_max = 16777216
#Sets the receive socket buffer default size in bytes.
net.core.wmem_default = 262144
#Sets the receive socket buffer maximum size in bytes.
net.core.rmem_default = 262144
#Sets the maximum number of packets allowed to queue when a particular interface receives packets faster than the kernel can process them.
# increase the length of the processor input queue
net.core.netdev_max_backlog = 2000
net.ipv4.tcp_mem = 16777216 16777216 16777216
net.ipv4.tcp_wmem = 8192 262144 8388608
net.ipv4.tcp_rmem = 8192 262144 8388608
net.ipv4.udp_mem = 16777216 16777216 16777216
net.ipv4.udp_rmem_min = 16384
net.ipv4.udp_wmem_min = 16384
如果您有高并发工作负载并且 Vertica 设置了 CPU bound,则可以使用以下命令增加队列的内存和队列深度:
sudo sysctl -w net.core.netdev_max_backlog=2000
附加 (BIOS) 设置
当硬件针对高性能、低延迟的应用程序进行调整时,Vertica 的性能最佳。 基于 Intel 的处理器提供了广泛的节能技术。 这些技术可以降低服务器的整体功耗,但也会影响高端性能。
要获得最佳性能,请按照硬件制造商的指南在 Vertica 节点的 BIOS 中禁用 CPU 扩展和省电功能。 许多硬件供应商提供文档化指南,用于针对高性能、低延迟的应用程序(如 Vertica)调整其特定服务器。
此外,您必须修改 max_cstate 值。将其设置为 0 以禁用 CPU C-states。
对于 Red Hat Enterprise Linux 7.x,/etc/grub.conf 已变为 /boot/efi/EFI/[centos 或 redhat]grub/conf。将以下参数附加到以下内核命令:
intel_idle.max_cstate=0 processor.max_cstate=1 intel_pstate=disable
Vertica 建议您在 Red Hat Enterprise Linux 7.x 上进行部署。但是,如果您要部署 Vertica 的非当前版本,请查看该 Vertica 版本的产品文档以确定支持的操作系统。
对于 7.0 之前的 Red Hat Enterprise Linux 版本,通过将以下内容附加到内核命令来修改 /etc/grub.conf 文件中的内核条目:
intel_idle.max_cstate=0 processor.max_cstate=0
Vertica 验证实用程序
每个 Vertica 安装都包含一组验证实用程序,通常位于 /opt/vertica/bin 目录中。如前所述,这些工具可以帮助您确定 Vertica 节点和集群的整体性能。
- 使用 vcpuperf 实用程序测量 Vertica 节点的 CPU 处理速度并检查高负载时间和低负载时间,从而确定是否启用了 CPU 节流。
- vioperf 实用程序测试 Vertica 节点的输入和输出子系统的性能,使您能够识别 I/O 瓶颈。
- vnetperf 实用程序允许您测量 Vertica 节点之间的网络性能,提供可能影响集群性能的网络问题的指示。
Vertica 建议您在初始部署期间使用这些工具,同时定期运行这些实用程序以确定性能是否随时间变化。 这使您可以确定是否有任何系统更改对 Vertica 性能产生不利影响。
了解更多信息
如果您遵循本文档中的硬件建议,您应该会体验到 Vertica 数据库的出色性能。可以在Vertica 知识库中找到用于调整 Vertica 数据库的其他资源。
如果您有问题,请联系 Verticasupport。





