VOLTDB管理员手册.

本书解释了如何管理VoltDB数据库和托管数据库的集群。它面向数据库管理员和操作人员,涉及数据库基础设施的持续管理和维护。
本书包括7个章节和两个附录
第一章,管理VoltDB数据库
第二章,准备服务器
第三章,启动和停止数据库
第四章,维护和升级
第五章,监控VoltDB数据库
第六章,记录和分析VoltDB数据库中的活动
第七章,当问题出现时该怎么做
附录A,服务器配置选项
附录B,快照实用程序
本书没有描述如何设计或开发VoltDB数据库。有关VoltDB的开发过程及其所有特性的完整描述,请参阅Using VoltDB。

展开查看详情

1. 目录 前言 2 1.本书结构 2 2.相关文档 2 1. 管理VOLTDB数据库 3 1.1. 开始之前 3 1.2. 理解voltdb 5 1.3. 管理任务 6 2. 环境准备 7 2.1. 检查项 7 2.2. 安装要求 8 2.3. 内存设置 9 2.3.1. 禁用Swapping 9 2.3.2. 禁用透明大页面 10 2.3.3. 启用虚拟内存映射和Overcommit 11 2.4. 关闭TCP segmentation 12 2.5. 配置NTP 13 2.6. 配置网络 14 2.7. 分配网络端口 14 3. 启动和停止数据库 15 3.1. 配置数据库和集群环境 15 3.2. 初始化数据库 17 3.3. 启动数据库 18 3.4. 加载数据库定义 19 3.5. 停止数据库 20 3.6. 重新启动数据 21 3.7. 启动和停止单个数据库 21 4. 维护和升级 22 4.1. 数据库备份 23 4.2. 更新数据库对象 24 4.2.1. 在线更新 25 4.2.2. 离线更新 25 4.3. 集群升级 27 4.3.1. 单服务器升级 27 4.3.2. 在K-safe集群中滚动升级 28 4.3.3. 集群弹性伸缩 29 4.3.4. 集群配置更新 30 4.4. VoltDB软件升级 31 4.4.1. 使用Save和Restore升级VoltDB 32 4.4.2. 手动升级老版本的VoltDB 32 4.4.3. 使用DR副本升级VoltDB33 4.4.4. 使用XDCR集群执行在线升级 37 4.4.5. 使用有限的硬件执行在线升级 39 4.4.6. 降级或回退VoltDB 43 5. 数据库监控 44 5.1. 监控数据库运行 44 5.1.1. VoltDB Management Center 44 5.1.2. 系统存储过程 45 5.1.3. SNMP 警告 48 5.2. 资源超限设置 51 5.2.1. 监视内存使用率 53 5.2.2. 监视磁盘使用率 54 5.3. 接入监测系统 56

2. 5.3.1. 接入Nagios 56 5.3.2. 接入New Relic 57 6. 日志记录定义 58 6.1. 日志介绍 59 6.2. 创建日志配置文件 59 6.3. 修改Log记录中的时区 63 6.4. 在运行时修改Logging配置 64 7. 数据库故障 64 7.1. 故障分析 64 7.2. 处理数据库恢复错误 65 7.2.1. 记录违反约束的行为 66 7.2.2. 在安全模式下恢复数据 67 7.3. 收集日志文件 68 附录A 服务器配置选项 69 A.1 服务器配置 69 A.1.1 网络配置(DNS) 70 A.1.2 时间配置 70 A.2 进程配置 71 A.2.1 最大堆大小 71 A.2.2 其他java选项(VOLTDB_OPTS) 72 A.3数据库配置 72 A.3.1 Sites per Host 73 A.3.2 K-Safety 73 A.3.3 网络分区保护 73 A.3.4 自动快照 74 A.3.5 数据导入导出 74 A.3.6 Command logging 74 A.3.7 心跳检测 75 A.3.8 临时表大小 75 A.3.9 查询超时 76 A.3.10 慢进程告警 77 A.4 路径配置 78 A.4.1 VoltDB根 78 A.4.2 快照路径 78 A4.3 导出溢出路径 79 A4.4 Command Log路径 79 A4.5 Command Log Snapshots 路径 79 A.5网络端口 80 A5.1 客户端端口 81 A5.2 管理端口 81 A.5.3 Web端口(httpd) 82 A.5.4 JSON接口 83 A.5.5 Internal Server 端口 83 A.5.6 复制端口 84 A.5.7 Zookeeper 端口 85 A.5.8 TLS/SSL 加密 85 附录B Snapshot 87

3. 前言 本书解释了如何管理VoltDB数据库和托管数据库的集群。它面向数据库管理员和操作 人员,涉及数据库基础设施的持续管理和维护。 1.本书结构 本书包括7个章节和两个附录 第一章,管理VoltDB数据库 第二章,准备服务器 第三章,启动和停止数据库 第四章,维护和升级 第五章,监控VoltDB数据库 第六章,记录和分析VoltDB数据库中的活动 第七章,当问题出现时该怎么做 附录A,服务器配置选项 附录B,快照实用程序 2.相关文档 本书没有描述如何设计或开发VoltDB数据库。有关VoltDB的开发过程及其所有特性的 完整描述,请参阅附带的Using VoltDB。对于新用户,请参阅VoltDB Tutorial。这些和其 他描述VoltDB的书籍可以在web上从http://docs.voltdb.com/获得。 1. 管理VOLTDB数据库 VoltDB是一个分布式内存数据库,引入全新的设计,以便在普通服务器上最大化吞吐 量性能。与传统数据库产品相比,VoltDB架构提供了许多优点,同时避免了NoSQL解决方 案的缺陷: ● 通过对数据和存储过程进行分区,VoltDB可以并行处理多个查询,而不会牺牲数据库 的一致性或持久性,符合ACID原则。 ● 通过为每个分区使用一个线程管理内存中的所有数据,VoltDB避免了传统基于磁盘的 数据库中固有的lock、latching和设备争用等开销。 ● 只需向集群添加更多节点,VoltDB数据库就可以扩展以满足新的容量或性能需求。 ● 分区是自动的,基于数据对象定义的,所以不需要手动切分或重新划分 ● 最后,VoltDB Enterprise Edition提供了一些特性,通过命令日志记录、本地复制分区 (K-safety)和广域数据库复制来确保持久性和高可用性。

4. 在Using VoltDB这本书中详细描述了这些特性。本书从数据库管理员的角度解释了如 何使用这些和其他特性来管理和维护VoltDB数据库集群。 1.1. 开始之前 在将VoltDB设置为生产环境中使用之前,需要做四个决定 ● 要使用哪些数据库特性--可以在配置文件中定义所需要的特性,并使用voltdb init命令 进行数据库初始化。 ● 集群的物理结构--集群中节点的数量和地址,在使用voltdb start命令启动集群时指定。 ● 数据库的逻辑结构--数据库表和视图的逻辑结构,也称为模式,在标准SQL语句中定 义,使用sqlcmd命令行执行标准的DDL语句。 ● 存储过程--通过DDL语句声明存储过程。存储过程中的逻辑视为一个事务,满足原子 性要求,存储过程可以使用Java语言来编写,编译并打包成jar文件。最终使用sql命令 将JAR文件加载到数据库中。 要初始化一个VoltDB数据库集群,需要一个配置文件。配置文件允许您启用和配置各 种数据库选项,包括可用性、持久性和安全性。配置文件还定义了当前服务器上数据库的 某些属性,特别是数据库创建的基于磁盘的文件的路径,如命令日志和快照。当集群中的 所有节点使用voltdb init命令初始化数据库根目录时,必须指定相同的集群配置文件。 在实际启动数据库集群时,通过在voltdb start 命令中添加集群数量和集群节点机器名 或ip地址的方式来定义集群规模。VoltDB选择指定的节点之一作为协调启动的“leader”。 在使用VoltDB 企业版时,还需要一个许可证文件,通常称为license.xml。 VoltDB自动在用户当前工作目录、主目录或产品安装目录下的VoltDB /子文件夹中查 找许可文件。如果您将许可证文件保存在不同的目录中或以不同的名称保存,您可以在 voltdb start命令上添加 -license参数来指定许可证文件的位置。 最后,要为特定的应用程序准备数据库,需要数据库模式,包括描述数据库逻辑结构 的DDL语句,以及包含存储过程的JAR文件。通常,数据库模式和存储过程是作为数据库 开发过程的一部分生成的,使用VoltDB手册对此进行了描述。 本书假设已经创建了模式和存储过程。另一方面,配置文件定义集群的运行时配置。 为配置文件建立正确的设置并对数据库集群进行物理管理是数据库管理员的职责。本书是 为数据库管理员编写的,涵盖了与数据库管理相关的标准过程。 1.2. 理解voltdb VoltDB提供了几个命令行实用程序,每个命令行都具有不同的功能。熟悉这些实用程 序及其用法可以使管理VoltDB数据库变得更容易。用于创建、管理和测试VoltDB数据库的 三个主要命令行工具是: 启动VoltDB数据库进程。voltdb命令还可以收集日志文件来分析可 voldb 能的系统错误(详细信息请参阅第7.3节“收集日志文件”)。 voltdb命令在本地运行,不需要运行数据库。 向正在运行的VoltDB数据库发出管理命令。您可以使用voltadmin 保存和恢复快照、暂停和恢复管理模式,以及关闭数据库等任务。 voltadmin voltadmin命令可以远程运行,执行集群范围的操作,并且需要连 接到正在运行的数据库。 允许您交互式地发出SQL查询和调用存储过程。sqlcmd命令对于 sqlcmd 测试数据库访问非常方便,而不需要编写客户机应用程序。 sqlcmd命令可以远程运行,并且需要连接到正在运行的数据库。 除了上述通用工具外,VoltDB还为特定任务提供了其他一些工具: csvloader, 这些实用程序将来自外部源的数据加载到现有的VoltDB jdbcloader, 数据库中。 kafkaloader

5. 它们允许您从CSV等基于文本的数据文件、JDBC数据 源或Apache Kafka流中导入数据。这些命令可以远程运行, 并且需要连接到正在运行的数据库。 snapshotconvert 将本机快照文件转换为csv或以指定符合分隔字段值的 文本文件。snapshotconvert命令在将本机格式的快照导出到 文本文件以便导入到另一个数据实用程序时非常有用。 该命令在本地运行,不要求数据库运行。 snapshotverify 验证一组数据快照文件是否完整有效。 该命令在本地运行,不要求数据库运行。 最后,VoltDB包括一个基于浏览器的管理控制台--VoltDB管理中心--用于实时监控数据 库。有关使用管理中心的更多信息,请参见第5.1.1节“VoltDB数据库管理中心”。 1.3. 管理任务 数据库管理职责分为五大类,如表1.1“数据库管理任务”中所述。以下章节按类别进行 组织,并解释如何在VoltDB中执行每个任务。 表1.1“数据库管理任务” 环境准备 在启动数据库之前,必须确保服务器硬件和软件配置正确。 本章提供了启动VoltDB之前要执行的任务清单 基础操作 初始化、启动和停止数据库的基本操作。本章描述处理这些 基本任务所需的过程。 维护和升级 随着时间的推移,数据库本身和集群环境都可能需要维护, 不管是计划的或紧急的。本文中相应章节中解释了执行硬件和软 件维护以及标准维护(如备份数据库和升级硬件、软件和数据库模 式)的过程。 性能监控 许多数据库管理员的另一个重要角色是监视数据库性能。监 测的重要性有以下几个原因: •性能分析 •负载平衡 •故障检测 这个章节描述数据库监控工具 故障报告和分析 如果确实发生了错误,并且部分或全部数据库集群失败,那 么不仅要重新启动和运行数据库,而且要诊断问题的原因并采取 纠正措施。VoltDB生成许多日志文件,可以帮助解决问题。本章 描述可用的不同日志,以及如何使用它们诊断数据库问题。 2. 环境准备 VoltDB被设计用于在普通服务器上运行,大大减少了运行高性能数据库所需的投资。 然而,开箱即用的机器并不一定是专为某款应用定制的,这种情况下无法发挥服务器的最 佳性能,在使用基于云的服务时尤其如此。本章提供了配置服务器的最佳实践,以最大限 度地提高VoltDB安装的性能和稳定性。

6.2.1. 检查项 配置服务器的第一步是确保有足够的内存、计算能力和系统资源(如磁盘空间)来处理 预期的工作负载。VoltDB Planning Guide提供了关于如何调整服务器需求大小的详细信 息。 下一步是配置服务器并为VoltDB任务分配适当的资源。必须为VoltDB配置特定的服务 器功能,以使其性能最佳: ● 安装所需软件 ● 配置内存管理 ● 关闭TCP分段 ● 配置NTP(时间服务) ● 为集群中的所有节点定义网络地址 ● 分配网络端口 2.2. 安装要求 首先,VoltDB需要Linux操作系统的最新版本。运行生产VoltDB数据库的支持操作系 统有: ● CentOS V6.6 or later. Including CentOS 7.0 and later ● Red Hat (RHEL) V6.6 or later, including Red Hat 7.0 and later ● Ubuntu 14.04 and 16.04 也可以在其他版本的Linux上运行VoltDB。另外,Macintosh OS X 10.9及更高版本的 官方发布版是为了开发目的而提供的。然而,之前的操作系统版本是在生产环境中运行 VoltDB的唯一经过充分测试和支持的基础平台。 除了基本的操作系统,VoltDB至少需要以下软件: ● Java 8 ● NTP ● Python 2.6 及以上 (推荐使用2.7) 推荐使用Sun Java SDK 8,但也支持OpenJDK 8。注意,尽管VoltDB服务器需要 Java 8,但是Java客户机也兼容Java 7。 当所有集群节点上的系统时钟同步到100毫秒或更少时,VoltDB工作得最好。如果时 钟相差大于200毫秒,VoltDB将无法启动。建议使用网络时间协议NTP来实现必要的同 步。NTP在许多操作系统上默认安装并启用。然而,配置可能需要调整(详细信息请参阅 2.5节“配置NTP”),并且在虚拟环境中运行托管服务器的云实例中,默认情况下并不总是安 装或启用NTP。 最后,VoltDB通过Python实现其命令行接口。使用VoltDB shell命令需要Python 2.6或 更高版本。 2.3. 内存设置 由于VoltDB是内存数据库,因此正确的内存管理对于VoltDB数据库的有效运行至关重 要。内存管理的三个重要方面是: ● Swapping ● 内存映射(透明大页面) ● 虚拟内存 下面几节将解释如何最好地配置这些特性,以获得VoltDB的最佳性能。

7.2.3.1. 禁用Swapping Swapping是一个操作系统特性,当运行多个进程时,通过交替的将内存中的进程调出 和调入来优化内存使用。但是,任何内存争用(包括Swapping)都会对VoltDB的性能和功能 产生非常负面的影响。当使用VoltDB数据库时,应该禁用Swapping。 要禁用Linux系统上的Swapping功能,请使用swapoff命令。如果由于任何原因不能禁 用交换,您可以通过设置内核参数vm.swappiness为零来降低调出VoltDB的可能性。 2.3.2. 禁用透明大页面 透明大页(THP)是另一个操作系统特性,它可以为具有大量内存的系统优化内存使 用。THP更改内存映射以使用更大的物理页面。这对于运行多个进程的通用计算很有帮 助。然而,对于内存密集型应用程序,如VoltDB, THP实际上会对性能产生负面影响。因 此,在运行VoltDB的服务器上禁用透明大页面非常重要。运行以下命令,禁用THP: $ echo never >/sys/kernel/mm/transparent_hugepage/enabled $ echo never >/sys/kernel/mm/transparent_hugepage/defrag Or: $ echo madvise >/sys/kernel/mm/transparent_hugepage/enabled $ echo madvise >/sys/kernel/mm/transparent_hugepage/defrag 在RHEL操作系统(包括CentOS),使用"redhat_transparent_hugepage"替换” transparent_hugepage​”。 但是请注意,这些命令只在服务器运行时禁用THP。服务器重新启动后,THP会再启 用。因此,我们建议您在启动过程中永久禁用THP。例如,您可以将以下命令添加到服务 器启动脚本(例如/ etc/rc.local): #!/bin/bash for f in /sys/kernel/mm/*transparent_hugepage/enabled; do if test -f $f; then echo never > $f; fi done for f in /sys/kernel/mm/*transparent_hugepage/defrag; do if test -f $f; then echo never > $f; fi done THP在Ubuntu 14.04和更高版本以及RHEL 6.x 7.x中默认启用。若要查看当前系统是 否启用了这些命令,请使用以下命令之一: $ cat /sys/kernel/mm/transparent_hugepage/enabled $ cat /sys/kernel/mm/transparent_hugepage/defrag $ cat /sys/kernel/mm/redhat_transparent_hugepage/enabled $ cat /sys/kernel/mm/redhat_transparent_hugepage/defrag 如果THP被禁用,前面命令的输出应该是“always madvise [never]”或“always [madvise] never”。 2.3.3. 启用虚拟内存映射和Overcommit 虽然Swapping对于内存密集型应用程序(如VoltDB)是不好的,但是服务器确实使用了 虚拟内存(VM),并且有一些设置可以帮助VoltDB有效地使用这些内存。首先,启用VM的 Overcommit是一个好主意。这避免了VoltDB数据库在管理虚拟内存时遇到不必要的限制。 这是在Linux上通过设置系统参数vm来完成的。overcommit_memory的值为“1”。 $ sysctl -w vm.overcommit_memory=1

8. 其次,对于大型内存系统,增加VM内存映射限制也是一个好主意。因此,对于具有 64GB或更多内存的服务器,建议将VM内存映射数增加到1048576或更高。在Linux上使用 系统参数max_map_count执行此操作。例如: $ sysctl -w vm.max_map_count=1048576 请记住,对于overcommit和内存映射计,参数仅在系统运行时是活动的,并且在重启 时将重置为默认值。所以一定要将您的新设置添加到文件中/etc/sysctl.conf,以确保在重新 启动系统时它们是有效的。 2.4. 关闭TCP segmentation 在一定条件下,使用TCP segmentation offload (TSO)和generic receive offload (GRO)会导致节点随机退出集群。这些设置允许系统对网络数据包进行批处理,从而产生 不必要的延迟,并干扰VoltDB数据库集群节点之间的必要通信。这个问题的症状是节点超 时--也就是说,集群的其余部分认为它们失败了--尽管节点仍在运行,并且没有其他网络问 题(例如网络分区)是原因。 对于任何经历这种不稳定性的VoltDB集群,建议禁用TSO和GRO。禁用卸载的命令如 下,其中N替换为以太网卡的数量: ethtool -K eth​N tso off ethtool -K eth​N gro off 注意,这些命令同样只是暂时禁用。您必须在每次节点重新引导时发出这些命令,或 者最好将它们放在启动配置文件中。 检查TCP_RETRIES2是否没有被更改也是一个好主意。设置TCP_RETRIES2过低 (低于8)可能导致类似的不可预测超时。有关VoltDB心跳超时设置的详细信息,请参阅 A.3.7节中的“心跳”。 2.5. 配置NTP 为了协调集群节点之间的活动,VoltDB依赖于同步的系统时钟。VoltDB中的许多函数 (比如集群启动、节点重新连接和模式更新等)对集群中节点之间的时间值的变化很敏感。 因此,在集群中保持时钟同步是很重要的。具体地说: ● 当集群启动时,集群中的服务器时钟必须彼此同步到200毫秒以内。(理想情况下,节 点之间的差异应保持在10毫秒以内。) ● 时间绝不能倒退 实现这些目标的最简单方法是安装和配置NTP(网络时间协议)服务,以使用公共的时 钟服务器来同步服务器。NTP通常是默认安装的,但是可能需要额外的配置才能实现可接 受的同步。比如,定义集群中的所有节点都使用相同的时间服务器,可以确保服务器之间 的倾斜最小。您甚至可以建立自己的时间服务器。集群中的所有节点也应该彼此作为对等 节点。 例如,使用以下NTP配置文件: server myntpsvr burst iburst minpoll 4 maxpoll 4 peer voltsvr1 burst iburst minpoll 4 maxpoll 4 peer voltsvr2 burst iburst minpoll 4 maxpoll 4 peer voltsvr3 burst iburst minpoll 4 maxpoll 4 server 127.127.0.1 有关设置NTP的详细信息,请参阅Guide to Performance and Customization中关于配 置NTP的章节。

9.2.6. 配置网络 同样重要的是,要确保网络配置正确,以便VoltDB集群中的所有节点都能相互识别。 如果DNS服务器不包含集群中所有服务器的条目,则另一种方法是为集群中的每个服务器 本地添加/etc/hosts文件中的条目。例如: 12.24.48.101 voltsvr1 12.24.48.102 voltsvr2 12.24.48.103 voltsvr3 12.24.48.104 voltsvr4 12.24.48.105 voltsvr5 2.7. 分配网络端口 VoltDB使用许多网络端口来实现功能,比如内部通信、客户机连接、重新连接、数据 库复制等等。要使这些特性正确地执行,端口必须是打开的和可用的。检查以下端口列表 ,以确保它们是开放的和可用的(即,当前没有使用)。 端口名称 默认端口号 客户端连接端口 21212 管理端口 21211 Web 端口 3021 复制端口 5555 Zookeeper 端口 7181 或者,您可以重新分配VoltDB使用的端口号。有关端口和如何重新分配端口的描述, 请参见附录a .5节“网络端口”。 3. 启动和停止数据库 数据库管理的基本操作是启动和停止数据库。但是在启动数据库之前,您需要确定希 望启用哪些数据库特性以及它们应该如何工作。这些特性包括一些属性,比如在服务器发 生故障时,您希望指定多少个副本以提高可用性,以及在数据库本身停止的情况下,需要 什么级别的持久性。这些设置和其他设置都在配置文件中定义,在为每个服务器上的数据 库初始化根目录时,您可以在命令行中指定该文件。 本章将解释如何在配置文件中配置集群的物理结构和特性,以及如何初始化根目录并 启动和停止数据库。 3.1. 配置数据库和集群环境 您可以指定集群配置以及配置文件中使用的特性,配置文件是一个可以手动创建和编 辑的XML文件。在最简单的情况下,配置文件指定在每个服务器上创建多少分区,以及使 用什么级别的可用性(K-safety)。例如: <?xml version="1.0"?> <deployment> <cluster sitesperhost="12"kfactor="1"/>

10. </deployment> ● sitesperhost属性指定要在每个服务器上创建的分区(或“站点”)的数量。默认设置为8, 可以根据每台机器的处理器数量优化每台主机的站点数量。最佳数量是通过对预期工 作负载进行性能测试来确定的。有关详细信息,请参阅​VoltDB Planning Guide中 ​ 的“基准 测试”一章。 ● kfactor属性指定要使用的K-safety值。K-safety值越高,集群在不影响数据库可用性的 情况下能够承受的节点故障越多。但是,增加K-safety值会增加每个惟一分区的副本 数量。高可用性是在防止节点故障的复制和惟一分区的数量之间进行权衡,从而获得 吞吐量性能。有关确定最佳k -安全值的更多信息,请参阅​Using VoltDB​中的可用性一章 除了每个主机的站点和K-safety之外,还可以使用配置文件启用和配置特定的数据库 特性,比如导出、命令日志记录等等。下表总结了配置文件中可设置的一些关键特性。 功能 样例 Command Logging -- Command Logging <commandlog enabled="true" 命令日志记录通过将事务记录到磁盘来提 synchronous="false"> 供持久性,以便在恢复期间重放它们。您 <frequency time="300" 可以配置命令日志记录的类型(同步或异步) transactions="1000"/> ,日志大小,和日志持久化频率(以毫秒 </commandlog> 或事物数来表示) Snapshots --​自动快照通过创建数据库内 <snapshot enabled="true" 容的快照提供了另一种形式的持久性,稍 frequency="30m" 后可以恢复这些快照。您可以配置快照的 prefix="mydb" 频率、惟一的文件前缀以及在任何给定时 retain="3" /> 间保存多少快照。 Export --​导出允许您将选择的记录从数 <export> 据库写到一个或多个外部目标,这些目标 <configuration enabled="true" type="file"> 可以是文件、另一个数据库或另一个服 <property name="type">csv</property> 务。VoltDB为每个协议提供了不同的导出 <property 连接器。 name="nonce">mydb</property> 您可以为每个流以及其他特定于连接 </configuration> 器类型的属性配置导出的类型。例如,文 </export> 件连接器需要文件的特定类型(或格式)和称 为“nonce”的惟一标识符。 Security & Accounts --​安全性允许您要 <security enabled="true"/> 求所有连接根据已知的用户名和密码进行 <users> 身份验证,来保护数据库免受不必要的访 <user name="admin" 问。在部署文件中,您可以定义用户帐户 password="superman" 和密码,以及每个用户履行的角色。角色 roles="dev,ops"/> 定义帐户具有什么权限。角色定义帐户具 <user name="mitty" 有什么权限。角色在数据库模式中定义。 password="thurber" roles="user"/> </users> File Paths --​路径定义了VoltDB写入任何 <paths> 文件或其他基于磁盘的内容的位置。 <exportoverflow path="/tmp/overflow" /> 您可以为每种服务类型配置特定的路 <snapshots path="/opt/archive" /> 径,例如快照、命令日志、导出溢出等。 </paths> 3.2. 初始化数据库 创建配置文件之后,就可以使用voltdb init命令初始化数据库根目录了。在集群的每个 节点上发出这个命令,指定配置文件和根目录的位置。例如: $ voltdb init --dir=~/database ​① --config=deployment.xml ​② 在命令行上,指定两个参数:

11. ①​将要创建根目录的位置 ②​配置文件,它支持并设置特定VoltDB数据库特性的属性 当初始化数据库根目录时,VoltDB将: 1. 创建根目录(voltdbroot)作为指定父目录的子文件夹 2. 将配置选项保存在新的根目录中 注意,您只需要初始化根目录一次。初始化根目录之后,可以根据需要启动和停止数 据库。command log和snapshots默认被持久化到数据库根目录中 (如果选择了这些特性)。 如果根目录已经存在或之前已经初始化,则不能重新初始化该目录,除非包含--force 参数。这是为了防止意外删除前一个数据库会话中的数据。 3.3. 启动数据库 初始化根目录之后,就可以使用voltdb start命令启动数据库了。您可以指定根目录的 位置、所需的服务器数量,以及一个或多个用作“主机”的服务器地址,以管理集群的初始 形成。在集群中的每个节点上发出相同的命令。例如: $ voltdb start --dir=~/database \ ​① --count=5 \ ​② --host=svr1,svr2 \ ​③ --license=~/license.xml ​④ 上面的命令中包含几个参数 1 数据库根目录 2 集群成员数量 3 集群成员的名称或ip列表 4 数据licence 您必须在集群的所有节点上指定相同数量的服务器和主机(以完全相同的顺序列出)。 您可以选择在--host参数中指定集群的所有节点。在这种情况下,可以省略--count参数, 而VoltDB假设主机的数量是服务器的总数。 启动数据库时,所有节点从主机列表中选择一个服务器作为“主机”,之后主机会: 1. 等待连接到所需的服务器数量(由count参数指定) 2. 创建服务器之间的网络连接 3.验证配置选项是否匹配所有节点 之后,集群完成初始化,“主机”结束其特殊角色,成为所有其他节点的对等节点。如 果数据库是在之前运行的,并且存在命令日志或自动快照,那么集群现在将从前一个会话 中恢复数据。最后集群中的所有节点向控制台写入一条信息消息,可以用于验证数据库是 否准备好: Server completed initialization. 3.4. 加载数据库定义 加载数据库模式和存储过程的责任因公司而异。在某些情况下,操作员和管理员只负 责启动数据库;开发人员定义和修改数据库对象。在其他情况下,管理员还负责启动集群和 加载正确的数据库模式。 如果您负责建立正确的模式,下一步是加载Java存储过程和模式定义。存储过程被编 译成类,然后打包成JAR文件,如Using VoltDB手册中安装存储过程一节所述。要完全加 载数据库定义,您需要存储过程类的JAR和包含声明数据库模式的数据定义语言(DDL)语句 的文本文件。 下面的示例假设这两个文件是storedproc .jar和dbschema.sql。一旦数据库集群启动, 就可以使用sqlcmd实用程序加载模式和存储过程。要在sqlcmd提示符下加载它们,可以使 用sqlcmd加载类和文件指令: $ sqlcmd 1> ​load classes ​storedprocs.jar;

12. 2> ​file ​dbschema.sql; 注意,在加载模式时,应该总是先加载存储过程,这样,模式中的任何CREATE PROCEDURE语句都可以使用类文件。 3.5. 停止数据库 如何停止VoltDB数据库取决于启用了哪些特性。如果您使用了command logging(企业 版本默认启用该选项),执行有序的关闭是一个好主意,它可以确保所有活动的客户端查询 在数据库关闭之前有机会完成并返回结果。 要执行有序关机,您可以使用voltamdin shutdown命令: $ voltadmin shutdown 与所有的voltadmin命令一样,您可以通过在命令行上指定一个集群服务器,通过远程 使用它们: $ voltadmin shutdown --host=voltsvr2 如果启用了安全性,还需要为具有管理权限的用户指定用户名和密码: $ voltadmin shutdown --host=voltsvr2 -u root -p Suda51 如果不使用command logging,则需要确保在关闭之前执行快照。您可以使用 voltadmin save命令手动执行此操作。或者您可以简单地将--save参数添加到voltadmin shutdown命令中: $ voltadmin shutdown –save 通过voltadmin save命令或以自动方式保存的快照,将由下一个voltdb start命令自动进 行恢复。 3.6. 重新启动数据 重新启动VoltDB数据库的方法与第一次启动数据库的方法相同,只是不需要初始化根 目录。您只需发出与第一次启动时相同的voltdb start命令。例如: $ voltdb start --dir=~/database \ --count=5 \ --host=svr1,svr2 \ --license=~/license.xml 如果正在使用command logging,或者在默认快照目录中创建快照,那么一旦集群建 立,VoltDB将自动恢复数据。加载模式并恢复所有数据之后,数据库即可被客户机访问。 3.7. 启动和停止单个数据库 在使用K-safety时,集群中的一个或多个节点可以在不中断对外服务的情况下停止。 (有关K-safety的完整描述,请参阅Using VoltDB手册中关于可用性的章节。) 如果服务器停止(有意或无意),您可以启动服务器,并使用与启动集群相同的voltdb start命令让它重新加入集群。例如: $ voltdb start --dir=~/database \ --count=5 \ --host=svr1,svr2 \ --license=~/license.xml start命令将根据--host参数中的服务器列表检查集群是否仍在运行。如果是,服务器将 重新加入集群。 注意,如果--host参数中列出了多个服务器,即使宕机的服务器是列出的主机之一,服 务器也可以重新连接。如果您只列出一台主机,而这台主机就是停止运行的服务器,那么 您需要在--host参数中列出另一台服务器,即正在运行的集群中的任何成员服务器。(这就

13.是为什么在--host参数中列出多个节点是有益的您可以在多种情况下使用完全相同的start命 令。) 如果想要停止K-safe集群中的单个节点(例如,对硬件执行维护),可以使用voltadmin stop命令。只要集群具有足够的K-safety,使节点停止后仍然可行,那么voltadmin停止命 令将停止单个节点。(如果没有,则拒绝stop命令。)例如,要停止svr2,可以发出以下命 令: $ voltadmin stop --host=svr1 svr2 注意,stop命令不必在正在停止的服务器上发出。您可以在集群中的任何活动服务器 上发出该命令。有关执行维护任务的更多信息,请参见第4章,维护和升级。 4. 维护和升级 数据库运行后,管理员的职责是保持它运行。本章讲解如何执行常见的维护和升级任 务,包括: •数据库备份 •模式和存储过程更新 •软件和硬件升级 4.1. 数据库备份 备份所有与计算机系统相关的数据,并在发生系统故障或其他意外事件时存储副本, 这是一种常见的安全预防措施。备份通常是在计划的基础上进行的(每天、每周或任何被认 为足够的时间)。 VoltDB为备份数据库内容提供了几个选项。最简单的选择是保存一个本地快照,然后 将生成的快照文件备份到可移动媒体以便存档。这种方法的优点是,本机快照同时包含数 据和模式的完整副本。因此,如果出现故障,可以使用单个voltadmin还原命令将快照恢复 到当前集群或另一个集群 在使用本机快照进行备份时,要记住的关键一点是,每个服务器都将其数据库的一部 分保存在本地。因此,您必须获取所有服务器的快照文件,以确保您拥有完整的文件集。 下面的示例在5个节点集群上执行手动快照,然后使用scp远程地将文件从每个服务器复制 到一个位置以便存档。 $ voltadmin save --blocking --host=voltsvr3 \ /tmp/voltdb backup $ scp -l 100 'voltsvr1:/tmp/voltdb/backup*' /tmp/archive/ $ scp -l 100 'voltsvr2:/tmp/voltdb/backup*' /tmp/archive/ $ scp -l 100 'voltsvr3:/tmp/voltdb/backup*' /tmp/archive/ $ scp -l 100 'voltsvr4:/tmp/voltdb/backup*' /tmp/archive/ $ scp -l 100 'voltsvr5:/tmp/voltdb/backup*' /tmp/archive/ 注意,如果使用自动快照或command logging(command logging也创建快照),可以使 用自动快照作为备份源。但是,自动快照使用编程生成的文件前缀,因此您的备份脚本将 需要一些额外的智能来标识最近的快照及其前缀。 前面的示例还使用scp limit标志(- l 100)将copy命令使用的带宽限制为100kbits/秒。建 议使用-l标志,以避免复制操作阻塞VoltDB服务器进程和影响数据库性能。 最后,如果希望以非专有格式备份数据,可以使用voltadmin save --format=csv命令, 以逗号分隔值(csv)格式的文本文件创建数据快照。这样做的好处是,生成的文件可以被更 多的系统使用,而不仅仅是VoltDB。缺点是CSV文件只包含数据,而不包含模式。这些文 件不能像本地快照那样直接读入VoltDB。您需要初始化并启动一个新数据库,加载模式, 然后使用csvloader实用程序将单个文件加载到每个表中,以完全恢复数据库。

14.4.2. 更新数据库对象 随着应用程序的发展,数据库模式经常需要更改。在开发和测试的早期阶段尤其如此 ,但在已建立的应用程序中也会定期发生这种情况,因为数据库会根据性能进行调优或调 整以满足新的需求。对于VoltDB,这些更新可能涉及对表定义、索引或存储过程的更改。 以下各节解释如何: •执行实时模式更新 •使用save和restore更改惟一索引和分区 4.2.1. 在线更新 有两种方法可以更新VoltDB的数据库模式:实时更新和保存/恢复更新。对于大多数更 新,您可以在数据库运行时更新模式。要执行这种实时更新,可以使用DDL CREATE、 ALTER和DROP语句交互地修改模式,如Using VoltDB手册中修改模式一节所述。 只要修改的表不包含任何数据,就可以对模式进行任何更改。执行实时模式更改的唯 一限制是您不能: ● 在已有数据的表上添加或扩展惟一约束(如索引或主键) ● 将数据类型改成一个更小size的(例如,将数据类型从INTEGER更改为TINYINT) 设置这些限制是为了确保模式更改能够成功,而不会有任何预先存在的数据违反约 束。如果您知道数据库中的数据没有违反新的约束,您可以使用save和restore命令进行这 些更改,如下一节所述。 4.2.2. 离线更新 如果需要向数据库表添加惟一索引或减小列长度,则必须使用voltadmin save和 restore命令执行模式更新。这需要关闭和重新启动数据库,以便允许VoltDB根据新的约束 验证现有数据。 要使用save和restore执行模式更新,请使用以下步骤: 1. 创建一个包含更新的DDL语句的新模式文件。 2. 暂停数据库(voltadmin pause)。 3. 将数据库内容的快照保存到特定位置(voltadmin Save --blocking {path}{file-prefix}) 。 4. 关闭数据库(voltadmin shutdown)。 5. 重新初始化并以管理模式启动数据库(voltdb init --force和voltdb start --pause)。 6. 加载存储过程和新模式(使用sqlcmd LOAD CLASSES和FILE指令) 7. 还原步骤3中创建的快照(voltadmin restore {path} {file-prefix})。 8. 恢复数据库到开放状态(voltadmin resume) $ # Issue once $ voltadmin pause $ voltadmin save --blocking /opt/archive/ mydb $ voltadmin shutdown $ # Issue next two commands on all servers $ voltdb init --dir=~/mydb --config=deployment.xml --force $ voltdb start --dir=~/mydb --host=svr1,svr2 --count=5 $ # Issue only once $ sqlcmd 1> load classes storedprocs.jar; 2> file newschema.sql;

15. 3> exit $ voltadmin restore /opt/archive mydb $ voltadmin resume 添加新约束时要记住的关键点是,如果现有记录违反了新约束,那么恢复操作可能会 失败。这就是在执行更新之前确保数据库内容与新模式兼容很重要的原因。 4.3. 集群升级 有时候,您需要更新或重新配置正在运行VoltDB数据库的服务器基础设施。服务器升 级就是一个例子。服务器升级是指需要修复或替换硬件、更新操作系统或以其他方式修改 底层系统。 服务器升级通常需要停止正在服务的特定服务器上的VoltDB数据库进程。但是,如果 您的数据库集群使用K-safety来增强可用性,则可以通过执行滚动硬件升级来完成服务器 升级,而不需要中断服务,其中每个服务器都使用voltadmin stop和start命令进行升级。 另一种类型的升级是希望将集群作为一个整体重新配置。重新配置集群的原因是希望 从集群中添加或删除服务器,或者需要修改每个服务器使用的分区数。 可以在不停止数据库的情况下向集群添加服务器,这叫做弹性缩放。删除服务器或更 改每个主机的站点数量需要在维护窗口期间重新启动集群。 以下几节描述了集群升级的四种方法: •执行单服务器升级 •在K-safe集群上执行滚动升级 •通过弹性伸缩将服务器添加到正在运行的集群中 •使用维护窗口重新配置集群 4.3.1. 单服务器升级 如果需要升级或替换单个服务器的硬件或软件(例如操作系统),可以在不关闭整个数 据库的情况下完成。只要服务器以一个或多个K-safety值运行,就可以在不停止数据库的 情况下将服务器从集群中拿出来单独升级。然后,您可以修复服务器硬件,升级软件(除了 VoltDB),甚至完全用新服务器替换服务器,然后将服务器重新加回集群。 执行单服务器升级需要: 1. 使用voltadmin stop命令停止服务器上的VoltDB服务器进程。只要集群是k-safe的, 集群的其余部分将继续运行。 2. 执行必要的升级操作。 3.让服务器使用voltdb start命令重新加入集群。 start命令启动数据库进程,与数据库集群建立连接,然后从其他节点复制必要的分区内 容,这样服务器就可以加入集群,成为正式成员。整个过程中,其他数据库服务器都允许并 积极响应客户机应用程序请求。 重新加入集群时,可以使用启动集群时使用的start命令。但是,如果需要替换服务器 (例如,在磁盘故障的情况下),还需要为新机器上的数据库进程初始化一个根目录。您可 以使用集群的当前配置文件来实现这一点。例如: $ voltdb init --dir=~/database --config=deployment.xml $ voltdb start --dir=~/database --host=svr1,svr2 其中的deployment.xml,如果没有进行任何更改,则可以使用用于初始化其他服务器 的相同配置文件。如果您使用了voltadmin update命令更改了配置,或者在管理中心(VMC) 中更改了VoltDB的配置,您可以从VMC下载最新配置的副本。 如果集群不是K-safe--也就是说,K-safety值为0,那么您必须遵循其中的说明 第4.3.4节,“在维护窗口期间重新配置集群”,以升级服务器。

16.4.3.2. 在K-safe集群中滚动升级 如果您需要升级K-safe集群中的所有服务器(例如,如果您正在升级操作系统),您可以 通过停止、升级然后重新加入每个服务器来执行滚动硬件升级。使用这个过程可以升级整 个集群,而不需要数据库停机。重新加入集群时,等待以下消息出现在重新加入服务器的 日志或控制台中: Node rejoin completed. 或者,您可以尝试远程连接到服务器--例如,使用sqlcmd命令行实用程序。如果您的 连接被拒绝,则重新连接尚未完成。如果您成功连接到重新连接节点的客户端端口,您就 知道重新连接已经完成: $ sqlcmd --servers=myserver SQL Command :: myserver:21212 1> 注意:​您不能使用滚动硬件升级过程来更新VoltDB软件本身,这种方法只适合操作系 统、硬件或其他软件的更新。参见4.4节“升级VoltDB”有关在VoltDB数据库软件升级期间尽 量减少停机时间的信息。 4.3.3. 集群弹性伸缩 如果您想将服务器添加到一个VoltDB集群(通常是为了提高性能和/或容量),您可以在 不重启数据库的情况下这样做。使用带--add标志的voltdb start命令向集群添加服务器。注 意,与往常一样,在发出start命令之前,必须初始化根目录。例如: $ voltdb init --dir=~/database --config=deployment.xml $ voltdb start --dir=~/database --host=svr1,svr2 ​–add add标记指定如果集群已满,也就是说集群中所有指定数量的服务器当前都处于活动 状态,则可以添加额外的节点来弹性地扩展集群。在服务器可以作为集群的活动成员参与 之前,必须灵活地添加完整的服务器补充,以匹配K-safety值(K+1)。例如,如果K-safety 值为2,您必须添加3个服务器,然后它们才真正成为集群的一部分,集群将重新平衡其分 区。 当您将服务器添加到VoltDB数据库时,集群执行以下操作: 1. 新服务器被添加到集群配置中,并发送模式、存储过程和文件的副本。 2. 一旦添加了足够的服务器,所有复制表的副本及其分区表的共享将被发送到新服务 器。 3.当数据被重新平衡时,新服务器开始处理它们接收到的分区内容的事务。 4. 重新平衡完成后,新服务器将成为集群的正式成员。 如果在发出voltdb start -add命令时,集群还没有达到服务器的全部数量,则添加的服 务器将加入集群,作为缺失节点的替代,而不是扩展集群。一旦集群恢复到其全部节点, 下一个voltdb start -add命令将扩展集群。 4.3.4. 集群配置更新 如果你想永久删除服务器的集群(而不是出于维护的目的暂时移除它们)或你想要改变 其他集群范围的属性,如每台服务器的分区数量,您需要重新启动整个数据库集群。这种需要 临时停止数据库以重新配置服务器的时段称为维护窗口。 使用维护窗口重新配置集群的步骤如下: 1. 将数据库置于管理模式(voltadmin pause)。 2. 执行数据库的手动快照(voltadmin save --blocking)。 3.关闭数据库(voltadmin shutdown)。

17. 4. 对配置文件进行必要的更改。 5. 在已修改配置文件的所有节点上重新初始化数据库根目录(voltdb init--force)。 6. 以管理模式启动新数据库(voltdb Start--pause) 7. 还原步骤2 (voltadmin restore)中创建的快照。 8. 将数据库恢复正常操作(voltadmin resume)。 4.4. VoltDB软件升级 随着新版本VoltDB的发布,您将希望升级数据库集群上的VoltDB软件。升级最新版本 VoltDB (V6.8或更高版本)的最简单方法是有序地关闭,保存最终快照,在所有服务器上升 级软件,然后重新启动数据库。(如果您正在升级较早版本的软件,您仍然可以使用快照进 行升级。但您需要手动执行保存和恢复操作。) 然而,使用上述方法升级需要在软件更新时停机。另一种方法是利用数据库复制 (DR)--在主从环境(passive DR)或双活多活环境(XDCR)中,升级耗时更少或没有停机时 间。 使用passive DR,您可以将活动数据库内容复制到一个新的集群,然后切换应用程序 指向新的服务器。此流程的优点是,业务应用程序看到的惟一停机时间是重定向到新集群 所需的时间。 您还可以将集群划分为两个XDCR集群,并对它们依次进行升级,从而减少额外硬件 的使用。虽然这种方法不需要停机,但它确实降低了升级期间的K-safety。 以下几节描述升级VoltDB软件的五种方法: ● 使用Save和Restore升级VoltDB ● 手动升级老版本的VoltDB ● 使用DR副本升级VoltDB,减少停机时间 ● 使用XDCR集群执行在线升级 ● 使用有限的硬件进行在线升级 4.4.1. 使用Save和Restore升级VoltDB 在单个数据库集群上升级VoltDB软件很容易。您所需要做的就是执行有序的关机,保 存最终快照,在集群中的所有服务器上升级VoltDB软件,然后重新启动数据库。执行此程 序的步骤如下: 1. 关闭数据库并保存最终快照(voltadmin shutdown --save)。 2. 在所有集群节点上升级VoltDB。 3.重新启动数据库(voltdb start)。 这个过程适用于V6.8或更高版本的VoltDB版本。 4.4.2. 手动升级老版本的VoltDB 要升级旧版本的VoltDB软件(在V6.8之前),必须手动执行保存和恢复操作。升级旧版 本VoltDB的步骤如下: 1. 将数据库置于管理模式(voltadmin pause)。 2. 执行数据库的手动快照(voltadmin save --blocking)。 3.关闭数据库(voltadmin shutdown)。 4. 在所有集群节点上升级VoltDB。 5. 在所有节点上重新初始化根目录(voltdb init --force)。 6. 以管理模式启动一个新数据库(voltdb start --pause)。 7. 还原步骤2 (voltadmin restore)中创建的快照。 8. 将数据库恢复正常操作(voltadmin resume)。

18.4.4.3. 使用DR副本升级VoltDB 在生产环境中升级VoltDB软件时,可以使用被动数据库复制(DR)跨两个集群进行升级 ,从而最大限度地减少对客户机应用程序的破坏。要使用这个过程,您需要第二个数据库 集群作为DR副本,并且必须为当前数据库分配一个惟一的集群ID。 使用DR升级VoltDB软件的基本过程是: 1. 在辅助集群上安装新的VoltDB软件 2. 使用Passive DR将数据库内容从当前集群同步到新集群,然后promote新集群 3. 将应用程序客户机切换到新集群,暂停当前数据库并升级 以下部分详细描述了使用此过程的先决条件、要遵循的步骤以及如果更新后的数据库 有任何问题,回到以前的软件版本的过程。 4.4.3.1. Passive DR方式升级的前提条件 使用DR升级VoltDB的先决条件是: ● 创建与当前数据库集群相同配置(即集群具有相同数量的节点和分区)的第二个集群。 ● 当前数据库集群的部署文件中必须分配一个惟一的集群ID。 集群ID在部署文件的<dr>部分中分配,必须在集群启动时设置。在数据库运行时,不 能添加或更改它。因此,如果您考虑使用这个方式来升级生产系统,即使平时您不打算启 用dr功能,也请确保在部署中添加一个<dr>标记,并在启动数据库时分配惟一的集群ID。 例如,在启动主数据库集群时,您可以将以下元素添加到部署文件中,为其分配惟一 ID 3。 <dr id="3"> 重要提示​:在使用此流程时要注意的一个重要约束是,在升级过程中不能进行任何模 式更改。这包括升级之后的一段时间,在此期间,您将验证应用程序在新软件版本上的正 确操作。如果对模式做了任何更改,您可能无法轻松回到以前的版本。 4.4.3.2. Passive DR升级过程 使用DR在运行的数据库上升级VoltDB软件的过程如下。在本例中,我们假设现有数据 库运行在一个节点为oldsvr1和oldsvr2的集群上,而新集群包括服务器newsvr1和newsvr2 。我们将分别为集群分配惟一id 3和惟一id 4。 1. 在辅助集群上安装新的VoltDB软件。 按照Using VoltDB手册中“安装VoltDB”一节中的步骤安装最新版本VoltDB软件。 2. 启动第二个集群作为当前数据库集群的副本。 安装新软件之后,创建当前数据库副本所需的DR配置,并使用voltdb init –force 和 voltdb start命令在辅助服务器上创建一个新数据库。例如,新集群上的配置文件可能如下 所示: <dr id="4" role="replica"> <connection source="oldsvr1,oldsvr2"/> </dr> 一旦第二个集群启动,将当前数据库中的模式应用到第二个集群。一旦两个数据库上 的模式匹配,就会开始复制。 3.等待复制稳定下来。 在复制期间,原始数据库将向新副本发送当前内容的快照,然后发送所有后续事务的 二进制日志。您需要等到快照发送完成并且数据复制正常之后再继续。 ● 首先监视新集群上的DR统计数据。快照完成后,DR使用者状态将更改为“RECEIVE” 。您可以在VoltDB管理控制台的 Monitor选项卡中检查或从命令行使用sqlcmd调用 @Statistics system过程,如下:

19. $ sqlcmd --servers=newsvr1 1> exec @Statistics drconsumer 0; ● 一旦新的集群状态为“RECEIVE”,就可以使用DR producer统计信息监视现有数据库 集群上的复制速度。同样,您可以在VoltDB管理中心的Monitor选项卡中查看这些统计 数据,或者使用sqlcmd调用@Statistics: $ sqlcmd --servers=oldsvr1 1> exec @Statistics drproducer 0; 在生产者端,您需要的是较低的DR复制延时,理想情况下在一秒之内。因为DR延迟 有助于确定在集群暂停的时间,以及客户机应用程序等待新集群升级的时间。您可以通过 查看最后一个排队的时间戳和最后一个ACK时间戳之间的差异来确定延迟。这些值之间的 差异以微秒为单位。当延迟达到一个稳定的、低的值时,您就可以开始下一步了。 4.暂停当前数据库 下一步是暂停当前数据库。您可以使用voltadmin pause --wait命令: $ voltadmin pause --host=oldsvr1 –wait wait标志告诉voltadmin等待,直到将所有DR和导出队列完成到下游目标的输出,然后 再将控制权返回到shell提示符。这保证所有事务都已到达新的副本集群。 如果DR或导出因任何原因被阻塞--例如网络中断或目标服务器不可用等,则 voltadmin paus --wait命令将继续等待,并定期报告哪些队列仍然繁忙。如果队列上时间堵 塞,您可能需要在继续之前修复底层问题,以确保不会丢失任何数据。 5.提升(Promote)新数据库 Promote是指将新集群从从集群提升为主集群,因为从集群是不可写的。 一旦当前数据库完全暂停,您可以使用voltadmin promote命令来提升新数据库: $ voltadmin promote --host=newsvr1 此时,数据库已经启动并运行在新的VoltDB软件版本上。 6. 将客户机应用程序重定向到新数据库。 通过创建到新集群服务器newsvr1、newsvr2的连接,将客户端应用从旧集群重定向到 新集群。 7. 关闭原始集群。 此时,您可以关闭旧的数据库集群。 8. 验证数据库和客户端应用程序的正确操作。 最后一步是验证您的应用程序是否在新的VoltDB软件上正常运行。使用VoltDB管理中 心监视数据库事务和性能,并验证事务正在以预期的速度和数量完成。 您的升级现在已经完成。如果在任何时候,您认为您的应用程序或数据库存在问题, 那么只要您没有对底层数据库模式进行任何更改,就有可能退回到以前版本的VoltDB。下 一节将解释如何在必要时后退。 4.4.3.3. 升级回退 在极端情况下,您可能会发现您的应用程序和最新版本的VoltDB存在问题。当然,您 通常会在产品升级之前的测试中发现这一点。但是,如果不是这种情况,并且在升级完成 后发现不兼容或其他冲突,则可能退回到以前版本的VoltDB。后退的基本过程如下: ● 如果在步骤6(重定向客户端)完成之前出现任何问题,只需关闭新的副本并使用 voltadmin resume命令恢复旧数据库: $ voltadmin shutdown --host=newsvr1 $ voltadmin resume --host=oldsvr1 ● 如果在步骤6之后发现问题,后退过程基本上是重复第4.4.3.2节中描述的升级过程, 即“被动DR升级过程”,除了反转集群的角色和将数据从新集群复制到旧集群之外。如 下: 1. 更新新集群上的配置文件,以启用DR作为主机,删除<connection>元素: <dr id="4" role="master"/> 2. 关闭原始数据库,编辑配置文件,使DR成为新集群的副本: <dr id="3" role="replica"> <connection source="newsvr1,newsvr2"/>

20. </dr> 3. 使用voltdb init --force和voltdb start命令重新初始化和启动旧集群。 4. 按照第4.4.3.2节“被动DR升级过程”中的步骤3到8逆转新旧集群的角色。 4.4.4. 使用XDCR集群执行在线升级 还可以使用数据多活(XDCR)升级VoltDB软件,只需每次关闭、升级并重新激活每个 集群即可。这个过程不需要停机,假设您的客户机应用程序已经设计为在活动集群之间切 换。 如果您已经在使用XDCR,那么使用XDCR升级VoltDB软件是最容易的,因为它不需 要任何额外的硬件或重新配置,本节中假设的情况就是这样。当然,您也可以创建一个新 的集群,并在新旧集群之间建立XDCR复制,以便升级VoltDB。下面几节中概述的升级步 骤是相同的。但是首先必须在两个(或多个)集群之间建立XDCR复制,有关建立XDCR步骤 的说明,请参阅Using VoltDB手册中关于数据库复制的一章。 一旦有两个集群使用XDCR复制数据(我们称它们为集群A和集群B),升级集群上的 VoltDB软件的步骤如下: 1. 暂停和关机集群A (voltadmin pause –wait 和voltadmin shutdown)。 2. 清除集群B上的DR状态(voltadmin dr reset)。 3. 在集群A上更新VoltDB软件。 4. 在A上启动一个新的数据库实例,确保使用旧的部署文件,以便正确配置XDCR连 接(voltdb init --force和voltdb Start)。 5. 在集群A上加载模式,以便启动复制。 6. 一旦两个集群同步,对集群B重复步骤1到4。 注意,由于您正在升级软件,您必须在升级之后创建一个新的实例(步骤3)。升级软件 时,不能仅使用voltdb start命令恢复数据库;必须使用voltdb init--首先强制创建一个新实例 ,然后从正在运行的集群B重新加载现有数据。 此外,确保所有数据都已复制到升级后的集群(步骤#4之后)和继续升级第二个集群之 前。您可以通过在集群a上检查@Statistics system过程选择器DRCONSUMER来做到这一 点 “RECEIVE”,您知道这两个集群已正确同步,您可以继续执行第5步。 4.4.4.1. 升级回退 在极端情况下,您可能在执行升级之后决定不使用最新版本的VoltDB。如果发生这种 情况,就要返回前一个版本。 若要将新版本“降级”为旧版本,请遵循第4.4.4节中概述的步骤,“使用多个XDCR集群 执行在线升级”,除了在步骤2中重新安装老版本的VoltDB,而不是安装新的版本。只要您 没有修改模式或使用新版本中引入的任何新特性,此过程就有效。 4.4.5. 使用有限的硬件执行在线升级 可以使用XDCR和K-safety执行在线升级,在升级过程中数据库始终可访问,而不需要 额外的集群。与升级两个单独的XDCR集群不同,这个过程支持在线升级,需要很少或不 需要额外的硬件。 另一方面,这个升级过程相当复杂,在升级过程中降低了数据库的K-safely。如果升 级过程中任何节点意外崩溃,可用性的风险也会增加。 本质上,这种升级方式是将现有集群硬件分割为两个单独的集群,同时升级软件。要 做到这一点,有几个先决条件: ● 集群必须配置为XDCR集群 集群配置必须包含一个<dr>元素,该元素标识集群ID并将角色指定为“xdcr”。例如:

21. <dr id="1" role="xdcr"/> 注意,复制本身可以被禁用(即listen="false"),但是集群必须在开始在线升级之前配置 好XDCR。 ● 数据库中的所有表都必须标识为DR表。 这意味着模式必须为所有表指定DR TABLE{TABLE -name},否则非DR表的数据将丢 失。 ● 必须启用K-Safety。 必须将K-safety值(使用配置文件中<cluster>元素的kfactor属性设置)设置为1或更高。 此外,如果K-safety值为1,并且集群节点数量为奇数,则需要一个额外的服务器来完 成升级。(升级完成后不再需要额外的服务器。) 表4.1“在线升级流程概述”概述了在线升级的总体流程。 因为这个过程很复杂,需要按照特定的顺序关闭和重新启动数据库服务器,所以在开 始之前创建一个升级计划是很重要的。voltadmin plan_upgrade命令生成一个计划,根据 当前集群配置列出每个阶段的详细步骤。 在尝试在线升级过程之前,使用voltadmin plan_upgrade生成计划并彻底检查它,以 确保您了解需要什么。 表4.1 在线升级流程概述 Phase #1 确保集群满足所有必要的先决条件(配置了XDCR和K-safety,所有 表都启用了dr)。 在所有集群节点的相同位置安装新的VoltDB软件版本。 如果尚未设置,请确保通过在集群配置中将listen属性设置为true来 启用集群的DR。 出于演示的目的,下面的示例假设一个配置了集群ID为1的四节点 数据库。 Phase #2 停止一半集群节点。由于k安全性,可以在不停止数据库的情况下 从集群中删除一半的服务器。由voltadmin plan_upgrade生成的计划将 确切地告诉您应该停止哪些节点。 如果集群有奇数个节点,并且K-safety设置为1,则可以停止集群 中较小的“一半”,然后添加另一个服务器来创建两个相等的一半。 Phase #3 使用新的VoltDB软件版本在停止的节点上创建一个新的集群。确 保使用启用了XDCR的新集群ID配置集群,并将原始集群作为DR连接 源。您还可以使用--missing参数启动新集群,这样表示尽管它只启动了 一半的节点,但它期望节点的完全补全,以实现完全的k-safty。在本例 中,start命令将指定--count=2和--missing= 2。 从原始集群加载模式和存储过程之后,XDCR将开始同步这两个集 群的数据。

22. Phase #4 一旦集群同步,将所有客户机应用程序重定向到新的集群。 停止原始集群并使用voltadmin DR reset命令在新集群上重置DR。 Phase #5 使用新的软件版本,重新初始化并将剩余的节点重新连接到新集 群。因为新集群是用--missing选项启动的,所以其余的节点可以加入集 群,并将其恢复到完全的K-safety。 如果您从奇数台服务器开始,并且K=1(因此添加了一台服务器来 创建第二个集群),那么您可以重新连接所有剩余的节点,但不包括其 中的一个即可,或者如果您想删除添加的特定服务器,请在重新连接最 后一个节点之前删除它。 Complete 此时集群已经完全升级 4.4.5.1. 升级回退 在极端情况下,您可能在执行升级期间或之后决定不使用最新版本的VoltDB。如果发 生这种情况,就有可能要回到前一个版本。 在表4.1“在线升级过程概述”中标识为#1和#2的阶段中,始终可以将停止的节点重新连 接到原始集群,以返回到原始配置。 在完成第3阶段期间或之后,您可以通过以下方法返回到原始配置: 1. 停止新的集群。 2. 在原始集群上重置DR(voltadmin dr reset)。 3. 使用原始软件版本重新初始化并将停止的节点重新连接到原始集群。

23. 一旦原始集群作为阶段#4的一部分停止,恢复到原始软件版本的方法是重复从阶段#1 开始的整个过程,并反转方向--从新软件版本“降级”到旧软件版本。只要您没有修改模式或 部署新版本中引入的任何新特性,此过程就有效。 4.4.6. 降级或回退VoltDB 前面在DR、XDCR和使用有限硬件XDCR升级过程的部分都解释了在紧急情况下如何 退回到VoltDB的前一个版本。本节解释如何在使用第4.4.1节中描述的标准保存和恢复过程 (“使用Save和Restore升级VoltDB”)时回退或降级。 首先,在对生产系统执行任何维护之前,最好先执行数据库的备份或快照。尽管 voltadmin shutdown --save命令在升级过程中创建了一个快照,可以在紧急情况下使用该 快照进行备份,但是在数据库根目录之外,有一个使用自定义ID和位置的单独快照总是最 安全的。 其次,如果您正在两个最新版本的VoltDB之间恢复,并且在升级和降级之间没有使用 任何新特性,那么下面的过程是有效的。如果两个软件版本之间的差异超过一个主要版本 ,或者在降级之前使用了更高版本软件的新功能,则不能保证降级尝试会成功。 有了这些注意事项,如果没有对数据库本身进行任何更改,那么回到以前的VoltDB版 本的最简单方法就是重新安装旧版本的VoltDB,重新初始化数据库根目录,然后重启一个 空数据库,并恢复升级之前拍摄的快照。 如果对数据库的内容进行了更改,则需要在降级之前拍摄一个新的快照。您可以使用 与升级时相同的过程来降级: 1. 使用voltadmin shutdown --save关闭数据库。 2. 重新安装以前版本的VoltDB。 3.重新启动数据库。 5. 数据库监控 监控是系统管理的一个重要方面。数据库监控的目标包括确保数据库满足预期的性能 目标,以及识别和解决可能影响数据库的任何意外更改或基础设施故障(如服务器故障或网 络中断)。例如: ● 如何使用VoltDB监控整个数据库的健康状况和性能 ● 当超过资源限制时,如何自动暂停数据库 ● 如何将VoltDB监控与其他企业监控基础设施集成 5.1. 监控数据库运行 VoltDB提供了几个工具来监视整个数据库的运行。以下几节描述了VoltDB中的三个主 要监控工具: ● VoltDB管理中心 ● 系统存储过程 ● SNMP警报

24.5.1.1. VoltDB Management Center http://voltdbserver:8080/ VoltDB管理中心以图形显示了数据库的关键数据,包括吞吐量、内存使用、查询延迟 和分区使用情况等。要使用管理中心,请使用web浏览器连接到集群节点之一,并指定 HTTP端口(默认为8080),如上面的示例URL所示。管理中心显示了集群吞吐量和延迟以及 当前服务器的CPU和内存使用情况的图表。您还可以使用管理中心来检查数据库模式和执 行SQL查询。 5.1.2. 系统存储过程 VoltDB提供可调用的系统存储过程,返回关于数据库使用和性能的详细信息。特别地 ,@Statistics系统存储过程根据您提供的选择器关键字提供了各种各样的信息。一些对监 测特别有用的选择器包括: ● MEMORY--提供关于集群中每个节点的内存使用情况的统计信息。信息包括服务器进 程的常驻集大小(RSS)、Java堆大小、堆使用情况、可用堆内存等等。该选择器提供 进程内存报告显示的信息类型,但它在一次调用中返回集群所有节点的信息。 ● PROCEDUREPROFILE--总结单个存储过程的性能。信息包括最小、最大和平均执行 时间,以及调用、失败的数量,等等。整个集群汇总了这些信息。这个选择器返回的 信息类似于VoltDB管理中心中的延迟图。 ● TABLE--提供关于数据库中每个表的大小、元组数量和内存使用量的信息。信息由服 务器和分区分割,因此可以使用它报告数据库内容的总大小,或者评估集群中服务器 之间数据的相对分布。 一个调用系统存储过程的例子 #sqlcmd >exec @Statistics procedureprofile 1; 当使用@Statistics 存储过程和procedureprofile选择器进行监视时,最好将调用的第二 个参数设置为“1”,这样每个调用都会返回自上次调用以来的信息。换句话说,统计自上次 调用以来的时间间隔。否则,如果第二个参数是“0”,该过程返回数据库启动以来的信息, 最小、最大和平均执行时间的聚合结果将没有什么意义。 当使用MEMORY或TABLE选择器调用@Statistic时,可以将第二个参数设置为“0”,因 为内存和表的统计信息都是当前时间点的。例如,下面的Python脚本使用带有​MEMORY​和 PROCEDUREPROFILE​选择器的@Statistics来检查内存使用情况和超过一定限制的延迟。注 意,对@Statistics调用​PROCEDUREPROFILE​使用第二个参数为1,为MEMORY调用使用 的第二个参数值为0。 import sys from voltdbclient import * nano = 1000000000.0 memorytrigger = 4 * (1024*1024) # 4gbytes avglatencytrigger = .01 * nano # 10 milliseconds maxlatencytrigger = 2 * nano # 2 seconds server = "localhost" if (len(sys.argv) > 1): server = sys.argv[1] client = FastSerializer(server, 21212) stats = VoltProcedure( client, "@Statistics", [ FastSerializer.VOLTTYPE_STRING, FastSerializer.VOLTTYPE_INTEGER ] ) # Check memory response = stats.call([ "memory", 0 ]) for t in response.tables:

25. for row in t.tuples: print 'RSS for node ' + row[2] + "=" + str(row[3]) if (row[3] > memorytrigger): print "WARNING: memory usage exceeds limit." # Check latency response = stats.call([ "procedureprofile", 1 ]) avglatency = 0 maxlatency = 0 for t in response.tables: for row in t.tuples: if (avglatency < row[4]): avglatency = row[4] if (maxlatency < row[6]): maxlatency = row[6] print 'Average latency= ' + str(avglatency) print 'Maximum latency= ' + str(maxlatency) if (avglatency > avglatencytrigger): print "WARNING: Average latency exceeds limit." if (maxlatency > maxlatencytrigger): print "WARNING: Maximum latency exceeds limit." client.close() @Statistics系统存储过程是本章讨论的许多监视选项的来源。另外两个系统存储过程 @SystemCatalog和@SystemInformation分别提供关于数据库模式和集群配置的一般信息 ,也可用于监视。 系统存储过程对于监视非常有用,因为它们允许您将报告定制为您希望的任何详细级 别。另一个优点是,您可以通过调用系统存储过程的脚本或客户机应用程序自动化监视。 当然,缺点是您必须自己设计和创建这样的脚本。作为定制监视的替代方案,您可以考虑 将VoltDB与现有的第三方监视应用程序集成,如第5.3节“将VoltDB与其他监视系统集成”中 所述。如果某些系统资源运行不足,还可以将数据库设置为自动暂停,如下一节所述。 5.1.3. SNMP 警告 除了“根据需要”监视数据库活动之外,还可以使VoltDB在集群中发生重要事件时主动 发送​Simple Network Management Protocol​协议(SNMP)警报。SNMP是SNMP代理向管理服务 器或“管理站”发送消息的标准。 SNMP是一种轻量级协议。SNMP数据以UDP广播消息发送。因为它们是广播消息, 所以发送代理不会等待确认或响应。对于发送方来说,是否有管理服务器侦听接收消息并 不重要。您可以使用任何符合SNMP的管理服务器来接收并根据数据采取操作。 当您在部署文件中启用SNMP时,每当集群中发生管理更改时,VoltDB都作为SNMP 代理发送告警。使用部署文件中的< SNMP >元素启用SNMP。您可以使用表5.1中列出的 “SNMP配置属性”中的一个或多个属性来配置VoltDB发送SNMP陷阱的方式和位置。 表5.1 SNMP配置属性 属性名称 默认值 描述 targe 无 指定SNMP管理站的IP地址或主机名, 如果没有指定端口号,默认值是162。targe 属性是必需的。 community public 指定VoltDB代理所属的“community”的 名称。 username 无 指定SNMP V3身份验证的用户名。如 果没有指定用户名,则VoltDB以SNMP V2c 格式发送数据。如果指定用户名,VoltDB 使用SNMP V3,下面的属性允许您配置使 用的身份验证机制。

26. authprotocol SHA 指定SNMP V3的身份验证协议。允许 (仅SNMP V3适 的选项是: 用) SHA MD5 NoAuth authkey voltdbauthkey 指定SNMP V3的隐私协议。允许的选 (仅SNMP V3适 项是: 用) AES DES NoPriv 3DES* AES192* AES256* privacykey voltdbprivacykey 当隐私协议不是NoPriv时,指定SNMP (仅SNMP V3适 V3的隐私密钥。 用) 注:*表示:使用3DES、AES192或AES256时要求在系统上安装Java密码学扩展 (JCE)。JCE特定于您正在运行的Java版本。有关详细信息,请参阅Java web站点。 默认情况下,在部署文件中包含< SNMP >元素时启用SNMP。另外,可以使用元素的 enabled={true|false}属性显式启用和禁用SNMP。例如,下面的部署文件条目启用SNMP 警报,使用用户名为“voltdb”的SNMP V3协议向mgtsvr.mycompany.com发送: <snmp enabled="true" target="mgtsvr.mycompany.com" username="voltdb" /> 启用SNMP后,VoltDB将为表5.2中列出的事件(“SNMP事件”)发送警报。 表5.2 SNMP事件 事件名称 事件级别 事件描述 crash FATAL 当服务器或集群崩溃时 clusterPaused INFO 当集群暂停并进入管理模式时 clusterResume INFO 当集群退出管理模式并恢复正常操作时 hostDown ERROR 当服务器关闭或被识别为离开集群时 hostUp INFO 当服务器加入集群时 statisticsTrigger WARN 当某些操作状态被破坏时。 具体地说: ● 当k安全集群丢失一个或多个节点时 ● 使用数据库复制时,到远程集群的连接断 开 resourceTrigger WARN 当超过某些资源限制时。具体地说 ● 内存使用率 ● 磁盘使用率 请参阅5.2节“将数据库设置为只读模式”有 关为资源配置SNMP警报的更多信息 resourceClear INFO 当资源超限情况解除时。 有关每个事件陷阱的最新详细信息,请参见位于安装目录下的文件/tools/ SNMP / VoltDB-MIB,阅读其中的VoltDB SNMP Management Information Base (MIB)。

27.5.2. 资源超限设置 与所有软件一样,VoltDB使用系统资源来执行其任务。首先,作为内存数据库, VoltDB依赖于有足够的内存来存储数据和处理查询。不过,它还利用磁盘资源来快照,并 为其他特性(如导出和数据库复制)缓存数据。 如果系统资源运行不足,一个或多个节点可能会失败,从而影响可用性,或者更糟, 导致服务中断。对于这种情况,最好的解决方案是提前计划,并为您的服务器提供足够的 资源。Voltdb Planning Guide的目标是帮助您做到这一点。 然而,即使有最好的规划,意外情况也可能导致资源短缺或过度使用。在这些情况下 ,您希望数据库能够保护自己不受全面故障的影响。 可以通过在VoltDB部署文件中设置资源限制来实现这一点。系统资源限制是在 <systemsettings>和<resourcemonitor>元素中设置的。例如: <systemsettings> <resourcemonitor frequency="30"> <memorylimit size="70%" alert="60%"/> <disklimit> <feature name="snapshots" size="75%" alert="60%"/> <feature name="droverflow" size="60%"/> </disklimit> </resourcemonitor> </systemsettings> 部署文件允许您对两种类型的系统资源设置限制: ● 内存使用率 ● 磁盘使用率 对于每种资源类型,您可以设置最大大小。如果您启用SNMP,那么可以设置发送警 告的级别。资源限制可以用GB或者百分百来表示。如果超过警报属性设置的限制并启用 SNMP,则发送SNMP警报,超过size属性设置的限制,数据库将被“暂停”,使其进入只读 模式,以避免使用任何进一步的资源,或者在资源耗尽时发生故障。当数据库暂停时,将 错误消息写入报告事件的日志文件(和控制台)。系统管理员可以通过减少内存使用或删除 不必要的文件来纠正这种情况。一旦释放了足够的资源,就可以使用voltadmin resume命 令将数据库恢复到正常操作。 默认情况下,每60秒检查一次资源限制。但是,您可以使用<resourcemonitor>标记的 frequency属性调整检查它们的频率,以适应资源使用的相对稳定性或波动性。在前面的示 例中,频率已降低到30秒。 当然,理想的方法是在强制数据库进入只读模式之前捕获过度的资源使用。强烈建议 使用SNMP和系统监视器(如Nagios和New Relic)在低于VoltDB资源监视器的限制下生成警 报。您还可以将其他VoltDB监视与这些监视实用程序集成在一起,如第5.3节“将VoltDB与 其他监视系统集成”中所述。但是,提供资源监视器大小限制作为最后的手段,以确保数据 库不会在解决问题之前完全耗尽资源并崩溃。 下面几节描述如何为各个资源类型设置限制。 5.2.1. 监视内存使用率 使用<memorylimit>元素在部署文件中指定内存限制,并在size属性中为VoltDB进程指 定允许的最大驻留集大小(RSS)。您可以将这个限制表示为gb的固定数量,或者表示为总 可用内存的百分比,使用百分号指定百分比。例如,如果任何集群节点上的RSS大小超过 10g,下面的设置将导致VoltDB数据库进入只读模式。 <systemsettings> <resourcemonitor> <memorylimit size="10"/>

28. </resourcemonitor> </systemsettings> 而下面的示例将限制设置为总可用内存的70%。 <systemsettings> <resourcemonitor> <memorylimit size="70%"/> </resourcemonitor> </systemsettings> 您还可以使用alert属性为SNMP警报设置一个触发器值(假设启用了SNMP)。例如,下 面的示例将SNMP触发器值设置为60%。 <systemsettings> <resourcemonitor> <memorylimit size="70%" ​alert="60%"​/> </resourcemonitor> </systemsettings> 如果没有在部署文件中指定限制,则VoltDB自动将最大大小限制设置为默认SNMP警 告级别为70%。 5.2.2. 监视磁盘使用率 使用<disklimit>元素在部署文件中指定磁盘使用限制。在​<disklimit>​元素中,您可 以使用<feature>元素来标识各个数据库功能可使用的磁盘大小。例如,要对自动快照的使 用率设置一个限制,您可以将该特性标识为“snapshots”,并将限制指定为gb的数量或磁盘 上总空间的百分比。下面的部署文件条目将快照的磁盘限制设置为200gb,命令日志的磁 盘限制设置为总可用空间的70%: <systemsettings> <resourcemonitor> <disklimit> <feature name="snapshots" size="200"/> <feature name="commandlog" size="70%"/> </disklimit> </resourcemonitor> </systemsettings> 您还可以使用alert属性为SNMP警报设置一个触发器值(假设启用了SNMP)。例如,下 面的示例将快照磁盘的SNMP触发器值设置为150gb,命令日志磁盘的SNMP触发器值设置 为60%。 <systemsettings> <resourcemonitor> <disklimit> <feature name="snapshots" size="200" ​alert="150"​/> <feature name="commandlog" size="70%" ​alert="60%"​/> </disklimit> </resourcemonitor> </systemsettings> 注意,您可以根据特性指定磁盘设备。这些限制适用于该设备上的所有数据,而不仅 仅是该功能所使用的空间。如果为使用相同设备的两个特性指定限制,则将应用这两个限 制中较低的一个。因此,在前面的示例中,如果快照和命令日志都使用一个总空间为 250gb的设备,那么如果总使用空间超过命令日志70%(即175g)的限制,则数据库将被设 置为只读模式。 同样重要的是,磁盘没有默认的资源限制或警报。如果没有显式指定磁盘限制,则无 法防止耗尽磁盘空间。类似地,除非显式地设置SNMP警报级别,否则不会为关联的设备 发送警报。 使用指定的关键字,您可以识别下列VoltDB特性的磁盘限制和警报:

29.● 自动快照(快照) ● 命令日志(commandlog) ● 命令日志快照(commandlogsnapshot) ● 数据库复制溢出(droverflow) ● 出口溢出(Export toverflow) 5.3. 接入监测系统 除了VoltDB提供的用于监视数据库健康状况的工具和系统存储过程之外,还可以将这 些数据集成到第三方监视解决方案中,使它们成为整个企业监视体系结构的一部分。 VoltDB支持将数据库统计和状态与以下监控系统集成: ● Nagios ● New relic 5.3.1. 接入Nagios 如果使用Nagios监视系统和服务,可以在监视基础设施中包含VoltDB。VoltDB Enterprise Edition提供Nagios插件,让您可以监视以下四个关键方面。插件包含在安装 VoltDB的tools目录的子文件夹中。表5.3中列出了每个插件及其监视内容。 表5.3 Nagios插件 插件 监视器 范围 描述 check_voltdb_ports 可用性 serve 报告指定的服务器是否可访 r 问 check_voltdb_memory 内存使 serve 报告VoltDB单个节点所使 用 r 用的内存数量。您可以将标准指 定为总内存的百分比。 check_voltdb_cluster K-safet Clust 报告k安全集群是否完成。 y er-wied 也就是说,集群是否拥有完整的 节点,或者是否有节点已经失败 且尚未重新连接。 check_voltdb_replication 数据库 Clust 报告数据库复制的状态。将 复制 er-wied 插件连接到主数据库上的一个或 多个节点 注意,必须在部署文件中启用用于Nagios插件的VoltDB数据库的httpd和JSON选项, 以便查询数据库状态。 5.3.2. 接入New Relic 如果您使用New Relic作为监视工具,那么有一个VoltDB插件可以将对VoltDB数据库 的监视包含到您的New Relic仪表板中。要使用New Relic插件,您必须: •为您的服务器定义适当的配置。 •启动收集并发送数据到New Relic的voltdb-newrelic进程。 您可以通过编辑和重命名VoltDB安装目录下/tools/monitoring/newrelic/config文件夹中 的模板文件来定义配置。配置文件允许您指定您的NewRelic许可证以及监控哪些数据库。 newrelic文件夹中的README文件提供了对配置文件进行更改的详细信息。 您可以通过运行脚本voltdb-newrelic启动监视过程,该脚本也可以在/newrelic文件夹 中找到。New Relic必须运行脚本才能监视数据库。

VOLTDB诞生作为支持云端部署的内存数据库,并在持续增强流计算能力,原生分布式架构提供了可伸缩性,同时完全满足ACID要求,数据安全可靠。VOLTDB采用关系型数据存储,支持严格的事务模型和标准SQL。由2014图灵奖得主Mike Stonebraker博士领导全新设计的架构。