在现代版本的 Linux 上安装 Firebird 3:CentOS8 和 Ubuntu 19

在本文中,我们将描述在新的 Linux 发行版上优化安装 Firebird DBMS 3.0 版所需的最少操作集。 以CentOS 8和Ubuntu 19为例。

为了将 Firebird 发行版“交付”到目标系统,在本指南中,使用官方项目网站 (火鸟数据库).

对于最不耐烦的人,直接进入战斗:

快速安装

编辑文件 /etc/sysctl.conf通过添加以下行:

vm.max_map_count = 256000

保存文件并应用设置:

sudo sysctl -p /etc/sysctl.conf

CentOS 8 和 Ubuntu 19 的进一步说明有所不同,但是 ССЫЛКА и КАТАЛОГ 指示 Firebird 项目官方网站的用于下载发行版的链接以及在下载过程中将发行版解压到的目录。
目前(2020 年 3.0.5 月)当前版本是 Firebird XNUMX (这里是链接 到 64 位版本)。

CentOS 8的

sudo yum -y install epel-release
sudo yum -y makecache
sudo yum -y install libicu libtommath tar
ln -s libncurses.so.5 
/usr/lib64/libncurses.so.5
ln -s libtommath.so.1 
/usr/lib64/libtommath.so.0
curl -L ССЫЛКА|tar -zxC /tmp

Ubuntu的19

sudo apt-get -y install libncurses5 libtommath1
ln -s libtommath.so.1 
/usr/lib/x86_64-linux-gnu/libtommath.so.0
wget -O- ССЫЛКА|tar -zxC /tmp

Firebird DBMS的实际安装:

cd /tmp/КАТАЛОГ
sudo ./install.sh

如果您想更好地了解这些操作的作用,请继续阅读。

主要部分

简短的序言

假设操作系统已安装最小版本,并配置了对公共存储库或其本地副本的访问。

假设读者具备 Linux 和 Firebird DBMS 的基本知识。

规划

在 DBMS 服务器上,建议为临时文件分配单独的部分(/tmp)、数据库文件和本地备份。

临时文件包括锁文件、排序文件、全局临时表(GTT)和监控表的“物化”文件。 用于排序和全局临时表的文件位于 /tmp, mon$-表文件和锁文件 – 在 /tmp/firebird.

排序文件被“删除”(unlink)创建后立即,因此它们不能在目录列表中“看到” - 只能在进程句柄列表中(标记为 deleted):

sudo ls -lhF /proc/`pgrep firebird`/fd

在伪目录列表中 /proc/…/fd/ 显示符号链接,有关文件的实际信息由以下方式给出:

sudo stat -L /proc/`pgrep firebird`/fd/НОМЕР

哪里 НОМЕР – 感兴趣的文件的描述符(descriptor)。

而不是调用“pgrep исполняемый-файл“您可以立即替换感兴趣的进程的标识符。

临时文件可能非常大,因此 /tmp 建议至少分配 20-30 GB。 应该考虑到,排序文件的大小仅取决于请求中显式或隐式排序的数据量,并且单个用户可以“创建”千兆字节的临时文件。

数据库文件部分必须容纳所有数据库文件。 至少加上最大数据库文件的副本。 有必要考虑到未来几年数据库文件的增长。

本地备份部分必须至少包含所有数据库的一个备份存档以及最大数据库的备份。 最好该部分还包含用于恢复最大数据库的空间。 应考虑到未来几年备份和备份档案的增长。

初步准备

Firebird 3.0 DBMS 服务器动态分配和释放系统内存,这可能会导致内存碎片。 例如,大量用户与超级服务器一次性断开后,建立新连接时可能会出现错误。

内存碎片由系统参数控制 vm.max_map_count,默认为 64K。 建议将其值增加四倍:

sudo sysctl vm.max_map_count=256000

以便在系统重新启动时设置新值,添加到文件中 /etc/sysctl.conf 线:

vm.max_map_count = 256000

建议进行注释,以便更改此参数的原因清楚。 您可以先编辑该文件,然后应用其中保存的设置:

sudo sysctl -p /etc/sysctl.conf

安装所需的包

Firebird 3.0 Linux DBMS 的可执行文件依赖于 ncurses 库(libncurses.so.5),ICU(与版本无关,并且不显示在输出中 ldd)和托马斯(libtommath.so.0)。 要下载并解压程序集存档,您将需要实用程序 gzip, tar и curl или wget。 ICU 版本, gzip, tar и curl/wget – 是微不足道的。

使用包取决于系统和系统中使用的包管理器,因此我们将一一考虑它们。

CentOS 8的

CentOS 8 使用新的包管理器 – dnf 并且通过命令“透明地”调用 yum。 因为就我们的目的而言,它们之间没有区别 - 在示例中将有 yum.

更新元数据缓存: sudo yum makecache

libtomath 软件包位于单独的 E(xtra)P(ackages for)E(nterprise)L(inux) 存储库中,因此我们检查它是否已包含在内:

yum -C repolist

选项“仅来自缓存”(-C или --cache-only) 用于消除不必要的检查和下载,使 yum 更快。 如果列表中没有 epel 存储库,请安装它并更新元数据缓存:

sudo yum install epel-release &&
sudo yum makecache

如有必要,我们会确认请求,并使用可信来源已知的值检查 pgp 密钥的值。

如果从 https 资源加载存储库元信息时出现问题,请编辑该文件 /etc/yum.repos.d/epel.repo, 替换 https://http:// 并重复缓存更新命令。

我们检查所需包的状态(命令很复杂,在示例输出中,32 位包被过滤):

yum -C list 
ncurses libicu libtommath 
gzip tar curl wget |
grep -v i686
Installed Packages
curl.x86_64 7.61.1-11.el8 @anaconda
gzip.x86_64 1.9-9.el8 @anaconda
ncurses.x86_64 6.1-7.20180224.el8 @anaconda
Available Packages
libicu.x86_64 60.3-1.el8 BaseOS
libtommath.x86_64 1.1.0-1.el8 epel
tar.x86_64 2:1.30-4.el8 BaseOS
wget.x86_64 1.19.5-8.el8_1.1 AppStream

我们看到 curl, gzip и ncurses 托管在安装程序伪存储库中(anaconda)和 tar – 排除在最小系统安装之外。 主要版本 libncurses и libtommath 超出要求:分别为 6 和 1,而不是 5 和 0。 如果相同的软件包已安装且可用,则已发布更新。 安装缺少的软件包:

sudo yum install 
libicu libtommath tar

Ubuntu的19

实用程序旨在管理包 apt, apt‑get и apt‑cache。 第一个是为交互式工作而设计的,后两个是为在脚本中使用而设计的。 软件包名称略有不同,并包含版本。

我们检查所需包的状态(组合命令,缩短示例输出,并过滤掉 32 位包):

apt list libncurses? libicu?? libtommath? 
gzip tar curl wget |
grep -v i386
curl 7.65.3-1
gzip 1.10-0 [upgradable…]
libicu63 63.2-2 [installed]
libncurses5 6.1
libncurses6 6.1 [installed,automatic]
libtommath1 1.1.0
tar 1.30 [installed]
wget 1.20.3 [installed]

方括号表示的软件包 installed/upgradable –已安装。 可用但未安装 ncurses5而不是 curlwget。 安装缺少的软件包:

sudo apt‑get install 
libncurses5 libtommath1

创建符号链接

libtommath.so.1 и libncurses.so.6 向后兼容 libtommath.so.0 и libncurses.so.5,那么对于 Firebird 来说,创建指向现有版本库的符号链接就足够了。

libtommath.so.1 (libncurses.so.? 位于同一目录中):

find /usr -name libtommath.so.1

CentOS的:

/usr/lib64/libtommath.so.1

Ubuntu的:

/usr/lib/x86_64-linux-gnu/libtommath.so.1

我们创建符号链接。

CentOS的:

sudo ln -s libtommath.so.1 
/usr/lib64/libtommath.so.0
sudo ln -s libncurses.so.6 
/usr/lib64/libncurses.so.5

Ubuntu的:

sudo ln -s libtommath.so.1 
/usr/lib/x86_64-linux-gnu/libtommath.so.0

让我们检查一下结果(命令很复杂,输出示例被缩短):

ls -lhF 
$(dirname `find /usr -name libtommath.so.1`) |
grep "lib(ncurses|tommath).so."

CentOS的:

libncurses.so.5 -> libncurses.so.6*
libncurses.so.6 -> libncurses.so.6.1*
libncurses.so.6.1*
libtommath.so.0 -> libtommath.so.1*
libtommath.so.1 -> libtommath.so.1.1.0*
libtommath.so.1.1.0*

Ubuntu的:

libncurses.so.5 -> libncurses.so.5.9
libncurses.so.5.9
libncurses.so.6 -> libncurses.so.6.1
libncurses.so.6.1
libtommath.so.0 -> libtommath.so.1
libtommath.so.1 -> libtommath.so.1.1.0
libtommath.so.1.1.0

下载 Firebird DBMS 分发套件。

Firebird 项目的官方网站 (firebirdsql.org) 发布了“官方”版本和“每日”构建(快照构建)的发行版链接。

官方 Linux 版本以存档 (tar.gz) 和 deb/rpm 包的形式提供,但构建版本仅以存档形式提供。 我们将考虑“通用安装程序”(来自 tar.gz 的通用安装程序)。

需要下载并解压构建存档,但我们将结合这两个过程。 拆包完成于 /tmp,URL 表示可下载存档的链接。

卷曲:

curl -L URL | tar -zxC /tmp

wget:

wget -O– URL | tar -zxC /tmp

默认情况下, curl 将下载的数据发送到标准输出,但不处理重定向,我们添加“‑L“和 wget,相反:处理重定向,但将数据写入文件,我们将“‑O‑” 为了 tar 表明用途 gzip-filter 以及将执行解包的目录。 该过程完成后,将出现这样的目录 Firebird‑3.0.5.33220‑0.amd64 包含三个文件: install.sh, buildroot.tar.gz и manifest.txt.

安装火鸟

在前期准备的时候,我们调整了系统参数的值 vm.max_map_count,检查可用性并安装 ICU、ncurses 和 tommath 库。 确保 ncurses 和 tommath 的版本正确(libncures.so.5 и libtommath.so.0)并创建了必要的符号链接。

实际安装非常简单。 转至 Firebird 发行版存档的解压目录,检查并在必要时为脚本设置“可执行”标志 install.sh:

chmod +x install.sh

运行安装脚本:

sudo ./install.sh

通过按 Enter 键,我们确认开始安装,并在收到请求后输入 sysdba 密码。

安装脚本自动启动 systemd-单元 firebird-superserver (静默 Firebird 3.0 架构)。 Firebird 服务将使用超级服务器的默认参数:2048 页的页面缓存(每个数据库)、64 MB 的排序缓冲区(共享)并且仅连接版本 XNUMX 客户端。 查看选项 firebird.conf:

grep -v ^# firebird.conf | grep -v ^$

请注意,新值来自 firebird.conf 只有重新启动 Firebird 服务后才会激活。

选择参数值时,应考虑到三个主要“消费者”:页面缓存(用于数据库)、排序缓冲区(共享)以及服务器为客户端连接分配的内存。 您只能管理前两个 - 客户端连接的内存量取决于缓存查询的数量和文本、它们的计划以及查询中涉及的数据库对象。 客户端连接内存估计仅根据经验进行,并且可能会随着客户端应用程序和/或数据库对象的变化而变化。

对于具有少量内存(最多 12-16 GB)的主机上的超级服务器,您不应为页面缓存和排序缓冲区分配超过 RAM 总量的三分之一或四分之一。

如果数据库数量不固定并且可能发生变化,则应将页面高速缓存内存总量除以服务器上可容纳的最大数据库数量。 页缓存的大小以页为单位指定,必须单独转换为字节。

要切换到经典架构,您必须至少显式指定 ServerMode в firebird.conf,减少那里的页面缓存(不超过2K),减少排序缓冲区(所有排序允许的总容量除以最大连接数),禁用并停止该单元 firebird-superserver、启用并启动设备 firebird-classic.socket.

在Firebird 3.0中使用超经典架构并没有多大意义:“可靠性”就像超级服务器和通用排序缓冲区一样。 没有公共页面缓存,并且相互同步不同连接的“损失”与经典连接相同。

应该记住,在 Firebird 3.0 中,一些参数(页面缓存、锁定文件大小、哈希表等)可以在 databases.conf 分别针对每个数据库。 例如,对于超级服务器来说,设置一个小值是有用的 DefaultDbCachePages в firebird.conf 并为所需的数据库安装单独的页面缓存 databases.conf.

在评论中提出有关文章的问题,或写信给我们的支持地址 [电子邮件保护].

来源: habr.com

添加评论