本文为vCenter服务介绍的系列篇的其中之一,我们将一一解析VCSA全部服务,包括每个服务的全称,作用,和该服务的前置依赖服务。
这一篇我们来看看VCSA的数据库,vPostgres.
如果是vCenter起不来或者诊断VCSA启动问题,请移步到:
注意:一般情况下,普通用户不应随意修改 vPostgres 的配置。通常手动调整数据库的工作是由 VMware 原厂工程师处理的。本文内容仅供学习和了解 vPostgres 之用。
vmware-vpostgres是什么
vmware-vpostgres或VMware Postgres是vCenter服务器使用的一个数据库服务,是VCSA最核心服务之一。vPostgres基于 PostgreSQL,vPostgres数据库存储了与 vSphere 环境相关的所有核心数据,包括虚拟机、主机、集群、资源池和存储的配置信息等等。
vPostgres的进化和历史
vPostgres 的使用是在 VMware vSphere 历史发展的过程中逐步引入的。直至到vSphere 6,VMware才将 VCSA 的默认数据库更换为 vPostgres。
vCenter Server Windows 版
在当年 vCenter可以运行在Windows的时候,用户是可以自行选择使用多个不同的数据库管理系统 (DBMS) 来存储 vCenter的数据的。装vCenter的时候,就可以让你选择不通的数据库,包括:
- Microsoft SQL Server
- Oracle Database
- SQL Express
vCenter Server Appliance (VCSA)
随着 VCSA 的引入,VMware 开始转向使用内置的数据库管理系统。早期的 VCSA 版本中,默认使用的是 IBM DB2 数据库。
- IBM DB2:在 VCSA 的早期版本(如 vSphere 5.x 系列),VMware 使用了 IBM DB2 作为内置的数据库。这是一个成熟的关系型数据库管理系统,适合处理大规模的数据管理需求。
- VMware vPostgres:从 vSphere 6.0 开始,VMware 将 VCSA 的默认数据库更换为 vPostgres。这是一个经过优化的 PostgreSQL 数据库,专门为 vCenter Server 的工作负载进行调整。vPostgres 提供了更高的性能和更强的可扩展性,是 VCSA 现代版本的标准数据库。
VMware 选择从 DB2 迁移到 vPostgres 主要是基于以下几点考虑:
- 性能和优化:vPostgres 是开源数据库 PostgreSQL 的一个变种,VMware 对其进行了优化,使其更适合 vCenter Server 的需求,特别是在处理 vSphere 环境中的大规模数据时表现更优异。
- 简化部署和管理:vPostgres 是内置数据库,无需外部数据库服务器的配置,这简化了 VCSA 的部署和维护。
- 成本因素:PostgreSQL 是开源软件,不像 Oracle 和 SQL Server 那样需要昂贵的许可费用,这有助于降低整体拥有成本。
vPostgres的特性(与PostgreSQL相比较)
此段理解自VMware官方博客
性能调优:相比标准的 PostgreSQL,VMware 针对一些关键参数(比如 shared_buffers
、checkpoint_segments
和 wal_buffers
)设置了更高的默认值,这样开箱即用的性能就更好,同时对磁盘空间和内存的需求也只是略微增加。
清理维护:PostgreSQL 数据库需要定期清理,来回收被更新或删除的数据占用的空间、更新数据统计信息,以及优化索引扫描速度。VMware 已经为 vCenter Server 设置了自动清理进程,并调整了参数,以适应特定需求。
备份和恢复:预写日志(WAL – Write Ahead Log)使得备份可以在不中断数据库或 vCenter Server 应用的情况下进行。WAL 记录所有对数据库的更改,并可以在需要时重放,这样保证了数据的一致性。这意味着可以进行整个镜像级别的备份,不用担心数据损坏,也不需要手动备份 vCSA vPostgres 数据库。
vPostgres的配置文件和日志
vPostgres 的配置文件位于 /storage/db/vpostgres/
目录中,主要的配置文件是 postgresql.conf
,其中包含了日志位置、内存调优和自动清理等常见的数据库设置。打开 postgresql.conf
文件后,你会发现有许多配置项。
一般我们看与日志相关的配置,比如存放位置、命名规范、轮转等几个关键参数。
例如,日志目录设置为 log_directory = 'pg_log'
,而 pg_log
目录实际上是一个符号链接,指向 /var/log/vmware/vpostgres
,而这个又链接到 /storage/log/vmware
。默认情况下,日志会每天轮转一次,并使用 postgresql-%d.log
命名(%d 是当天日期)。
此外,还有一个名为 log_truncate_on_rotation
的配置项,如果启用的话,PostgreSQL 将覆盖相同名称的日志文件。由于在 vCenter Server Appliance 中启用了此设置,因此每月 4 日的日志文件名相同,并且内容会被清空。这样一来,每天都有一个新的日志文件。不过,需要注意的是,并非所有月份都有 31 天,所以可能会看到 postgresql-31.log
文件保留较长时间。
还有一个 logging_collector
参数,默认情况下 PostgreSQL 是关闭的,但在 vCenter Server Appliance 中我们将其开启,用于捕获通过 stderr 输出的日志消息。开启这个参数有助于减少故障排查的时间,不过需要注意,如果服务器负载过高,日志收集器可能会优先处理,导致其他进程被阻塞。正常情况下,这种情况不太可能发生,但建议保持该参数开启。