十六、使用iSCSI服务部署网络存储
iSCSI
技术实现了物理硬盘设备与
TCP/IP 网络协议的相互结合,使得用户能够通过互联网方便地访问远程机房提供的共享存储资源。本章将带领大家在
Linux 系统上部署iSCSI
服务端程序,并分别基于
Linux
系统和
Windows 系统来访问远程的存储资源。
1.iSCSI技术介绍
硬盘是计算机硬件设备中重要的组成部分之一,硬盘存储设备读写速度的快慢也会对服
务器的整体性能造成影响。
硬盘存储结构、
RAID 磁盘阵列技术以及 LVM 技术等都是用于存储设备的技术,尽管这些技术有软件层面和硬件层面之分,但是它们都旨在解决硬盘存储设备的读写速度问题,或者竭力保障存储数据的安全。
为了进一步提升硬盘存储设备的读写速度和性能,人们一直在努力改进物理硬盘设备的接口协议。当前的硬盘接口类型主要有
IDE
、
SCSI
和
SATA
这
3
种。
IDE:
一种成熟稳定、价格便宜的并行传输接口。
SATA:
一种传输速度更快、数据校验更完整的串行传输接口。
SCSI:一种用于计算机和硬盘、光驱等设备之间系统级接口的通用标准,具有系统资源占用率低、转速高、传输速度快等优点。
无论使用什么类型的硬盘接口,硬盘上的数据总是要通过计算机主板上的总线与 CPU、内存设备进行数据交换,这种物理环境上的限制给硬盘资源的共享带来了各种不便。后来,IBM
公司开始动手研发基于
TCP/IP
协议和
SCSI 接口协议的新型存储技术,这也就是我们目前能看到的互联网小型计算机系统接口(
iSCSI
,
Internet Small Computer System Interface)。这是一种将 SCSI 接口与以太网技术相结合的新型存储技术,可以用来在网络中传输 SCSI 接口的命令和数据。这样,不仅克服了传统 SCSI 接口设备的物理局限性,实现了跨区域的存储资源共享,而且可以在不停机的状态下扩展存储容量。
既然要通过以太网来传输硬盘设备上的数据,那么数据是通过网卡传入到计算机中的么?这就有必要向大家介绍
iSCSI-HBA
卡了
。与一般的网卡不同(连接网络总线和内存,供计算机上网使用),
iSCSI-HBA
卡连接的则是
SCSI
接口或 FC(光纤通道)总线和内存,专门用于在主机之间交换存储数据,其使用的协议也与一般网卡有本质的不同。运行
Linux
系统的服务器会基于
iSCSI
协议把硬盘设备命令与数据打包成标准的TCP/IP 数据包,然后通过以太网传输到目标存储设备,而当目标存储设备接收到这些数据包后,还需要基于iSCSI
协议把
TCP/IP
数据包解压成硬盘设备命令与数据。
总结来说,iSCSI 技术具有硬件成本低、操作简单、维护方便以及扩展性强等优势,为我们提供了数据集中化存储的服务,而且其以区块为单位的数据存储空间,在简化了存储空间管理步骤的前提下,还增添了存储空间的弹性。对于用户而言,仿佛计算机上多了一块新的“本地硬盘”,可以使用本地的计算机操作系统进行管理,就像是使用本地硬盘那样来使用远程存储空间。这种高扩展性和低组建成本、低维护成本的整合存储方式,正是大部分预算受限的中小企业和办公室所需要的。
2.创建RAID磁盘阵列
既然要使用
iSCSI 存储技术为远程用户提供共享存储资源,首先要保障用于存放资源的服务器的稳定性与可用性,否则一旦在使用过程中出现故障,则维护的难度相较于本地硬盘
设备要更加复杂、困难。因此推荐各位读者按照本书第
7
章讲解的知识来部署
RAID 磁盘阵 列组,确保数据的安全性。下面以配置
RAID 5
磁盘阵列组为例进行讲解。
首先在虚拟机中添加
4
块新硬盘,用于创建
RAID 5
磁盘阵列和备份盘。

启动虚拟机系统,使用
mdadm
命令创建
RAID
磁盘阵列。其中,
-Cv 参数为创建阵列并显示过程,
/dev/md0 为生成的阵列组名称,-n 3
参数为创建
RAID 5 磁盘阵列所需的硬盘个数,-l 5
参数为
RAID
磁盘阵列的级别,
-x 1 参数为磁盘阵列的备份盘个数。在命令后面要逐一写上使用的硬盘名称。

在上述命令成功执行之后,得到一块名称为
/dev/md0
的新设备,这是一块 RAID 5级别的磁盘阵列,并且还有一块备份盘为硬盘数据保驾护航。大家可使用 mdadm -D 命令来查看设备的详细信息。另外,由于在使用远程设备时极有可能出现设备识别顺序发生变化的情况,因此,如果直接在
fstab
挂载配置文件中写入
/dev/sdb
、
/dev/sdc 等设备名称的话,就有可能在下一次挂载了错误的存储设备。而 UUID 值是设备的唯一标识符,用于精确地区分本地或远程设备。于是我们可以把这个值记录下来,一会儿准备填写到挂载配置文件中。

3.配置iSCSI服务端
iSCSI
技术在工作形式上分为服务端(
target
)与客户端(
initiator
)。
iSCSI 服务端即用于存放硬盘存储资源的服务器,它作为前面创建的
RAID 磁盘阵列的存储端,能够为用户提供可用的存储资源。
iSCSI 客户端则是用户使用的软件,用于访问远程服务端的存储资源。

第一步:在 RHEL 8/CentOS 8 系统中,默认已经安装了 iSCSI 服务端程序,用户需要做的是配置好软件仓库后安装 iSCSI 服务端的交换式配置工具。相较于直接修改配置文件,通过交互式的配置过程来完成对参数的设定既又方便又安全。在 dnf 命令的后面添加-y 参数后,在安装过程中就不需要再进行手动确认了:

第二步:
配置
iSCSI
服务端共享资源。
targetcli
是用于管理
iSCSI 服务端存储资源的专用配置命令,它能够提供类似于 fdisk 命令的交互式配置功能,将 iSCSI 共享资源的配置内容抽象成“目录”的形式,我们只需将各类配置信息填入到相应的“目录”中即可。这里的难点主要在于认识每个“参数目录”的作用。当把配置参数正确地填写到“目录”中后,iSCSI服务端也就可以提供共享资源服务了。
在执行
targetcli
命令后就能看到交互式的配置界面了。在该界面中允许使用很多 Linux命令,比如利用
ls
查看目录参数的结构,使用
cd
切换到不同的目录中。

/backstores/block
是
iSCSI
服务端配置共享设备的位置。我们需要把刚刚创建的 RAID 5磁盘阵列
md0
文件加入到配置共享设备的“资源池”中,并将该文件重新命名为
disk0,这样用户就不会知道是由服务器中的哪块硬盘来提供共享存储资源,而只会看到一个名为 disk0的存储设备。

第三步:创建 iSCSI target 名称及配置共享资源。iSCSI target 名称是由系统自动生成的,这是一串用于描述共享资源的唯一字符串。稍后用户在扫描 iSCSI 服务端时即可看到这个字符串,因此我们不需要记住它。

系统在生成这个
target
名称后,还会在
/iscsi 参数目录中创建一个与其字符串同名的新“目录”用来存放共享资源。我们需要把前面加入到
iSCSI 共享资源池中的硬盘设备添加到这个新目录中,这样用户在登录
iSCSI 服务端后,即可默认使用这硬盘设备提供的共享存储资源了。

第四步:设置访问控制列表(ACL)。iSCSI 协议是通过客户端名称进行验证的。也就是说,用户在访问存储共享资源时不需要输入密码,只要 iSCSI 客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可,因此需要在 iSCSI 服务端的配置文件中写入一串能够验证用户信息的名称。acls 参数目录用于存放能够访问 iSCSI 服务端共享存储资源的客户端名称。推荐在刚刚系统生成的 iSCSI target 后面追加上类似于:client 的参数,这样既能保证客户端的名称具有唯一性,又非常便于管理和阅读:

第五步:设置 iSCSI 服务端的监听 IP 地址和端口号。位于生产环境中的服务器上可能有多块网卡,那么到底是由哪个网卡或 IP 地址对外提供共享存储资源呢?在配置文件中默认是允许所有网卡提供 iSCSI 服务,如果您认为这有些许不安全,可以手动删除:

继续进行设置,使系统使用服务器
IP
地址
192.168.10.10
的
3260
端口向外提供
iSCSI 共享存储资源服务:

第六步:在参数文件配置妥当后,浏览刚刚配置的信息,确保上述提到的“目录”都已经填写了正确的内容。在确认信息无误后输入 exit 命令退出配置。注意,千万不要习惯性地按 Ctrl + C 组合键结束进程,这样不会保存配置文件,我们的工作也就白费了

清空
iptables
防火墙中的默认策略,设置
firewalld
防火墙,使其放行
iSCSI
服务或3260/TCP端口号:


4.配置Linux客户端
在
RHEL 8
系统中,已经默认安装了 iSCSI客户端服务程序
initiator
。

iSCSI
协议是通过客户端的名称来进行验证的,而该名称也是 iSCSI 客户端的唯一标识,而且必须与服务端配置文件中访问控制列表中的信息一致,否则客户端在尝试访问存储共享设备时,系统会弹出验证失败的保存信息。
下面编辑
iSCSI
客户端中的
initiator 名称文件,把服务端的访问控制列表名称填写进来,然后重启客户端
iscsid
服务程序并将其加入到开机启动项中:


iSCSI 客户端访问并使用共享存储资源的步骤很简单,只需要记住一个小口诀“先发现,再登录,最后挂载并使用”。
iscsiadm
是用于管理、查询、插入、更新或删除
iSCSI 数据库配置文件的命令行工具,用户需要先使用这个工具扫描发现远程
iSCSI 服务端,然后查看找到的服务端上有哪些可用的共享存储资源。其中,
-m discovery 参数的目的是扫描并发现可用的存储资源,
-t st
参数为执行扫描操作的类型,
-p 192.168.10.10
参数为
iSCSI
服务端的
IP
地址:

在使用
iscsiadm
命令发现了远程服务器上可用的存储资源后,接下来准备登录
iSCSI 服务端。其中,
-m node
参数为将客户端所在主机作为一台节点服务器,
-T 参数为要使用的存储资源(大家可以直接复制前面命令中扫描发现的结果,以免录入错误),
-p 192.168.10.10 参数依然为对方
iSCSI
服务端的
IP
地址。最后使用
--login
或
-l
参数进行登录验证。

在
iSCSI
客户端成功登录之后,会在客户端主机上多出一块名为
/dev/sdb 的设备文件。第6
章曾经讲过,
udev 服务在命名硬盘名称时,与硬盘插槽是没有关系的。接下来便能够像使用本地主机上的硬盘那样来操作这个设备文件了。

下面进入标准的磁盘操作流程。
这个设备文件本身只有
40GB
的容量,因此不必进行分区,而是直接格式化并挂载使用。


从此以后,这个设备文件就如同是客户端本机上的硬盘那样工作。需要提醒大家的是,由于udev 服务是按照系统识别硬盘设备的顺序来命名硬盘设备的,当客户端主机同时使用多个远程存储资源时,如果下一次识别远程设备的顺序发生了变化,则客户端挂载目录中的文件也将随之混乱。为了防止发生这样的问题,应该在
/etc/fstab
配置文件中使用设备的
UUID 进行挂载。这样,不论远程设备资源的识别顺序再怎么变化,系统也能正确找到设备所对应的目录。
blkid
命令用于查看设备的名称、文件系统及
UUID
。可以使用管道符
进行过滤,只显示与
/dev/sdb
设备相关的信息:

由于
/dev/sdb
是一块网络存储设备,而
iSCSI 协议是基于TCP/IP
网络传输数据的,因此必须在
/etc/fstab
配置文件中添加上
_
netdev 参数,表示当系统联网后再进行挂载操作,以免系统开机时间过长或开机失败:

如果我们不再需要使用
iSCSI
共享设备资源了,可以用
iscsiadm
命令的
-u
参数将其设备卸载:

这种获取
iSCSI
远程存储的方法依赖的是
RHEL 8
系统自带的
iSCSI initiator 软件程序。该软件程序将以太网卡虚拟成
iSCSI
卡,进而接收数据,然后基于
TCP/IP
协议在主机与 iSCSI 存储设备之间实现数据传输功能。这种方式仅需主机与网络即可实现,因此成本是最低的。但是,在采用这种方式传输数据时,与
iSCSI
和
TCP/IP
相关的命令数据会消耗客户端自身的
CPU 计算性能,因此存在一定的额外开销。一般建议在低
I/O 或者低带宽要求的环境中使用这种方式。
5.配置windows客户端
使用
Windows
系统的客户端也可以正常访问
iSCSI 服务器上的共享存储资源,而且操作原理及步骤与
Linux
系统的客户端基本相同。在进行下面的实验之前,请先关闭
Linux 系统客户端,以免这两台客户端主机同时使用
iSCSI
共享存储资源而产生潜在问题。

第一步:运行 iSCSI 发起程序。在 Windows 10 操作系统中已经默认安装了 iSCSI 客户端程序,我们只需在控制面板中找到“系统和安全”标签,然后单击“管理工具”(见图 17-3),进入到“管理工具”页面后即可看到“iSCSI 发起程序”图标。双击该图标,在第一次运行 iSCSI发起程序时,系统会提示“Microsoft iSCSI 服务端未运行”,单击“是”按钮即可自动启动并运行 iSCSI 发起程序


第二步:扫描发现 iSCSI 服务端上可用的存储资源。不论是 Windows 系统还是 Linux 系统,要想使用 iSCSI 共享存储资源,都必须先进行扫描发现操作。运行 iSCSI 发起程序后在“目标”选项卡的“目标”文本框中写入 iSCSI 服务端的 IP 地址,然后单击“快速连接”按钮

在弹出的“快速连接”对话框中可看到共享的硬盘存储资源,此时显示“无法登录到目标”属于正常情况,单击“完成”按钮即可
回到“目标”选项卡页面,可以看到共享存储资源的名称已经出现

第三步:准备连接 iSCSI 服务端的共享存储资源。由于在 iSCSI 服务端程序上设置了 ACL,使得只有客户端名称与 ACL 策略中的名称保持一致时才能使用远程存储资源,因此首先需要在“配置”选项卡中单击“更改”按钮

随后在修改界面写入 iSCSI 服务器配置过的ACL 策略名称,最后重新返回到 iSCSI 发起程序的“目标”界面

在确认
iSCSI
发起程序名称与
iSCSI
服务器
ACL 策略一致后,重新单击“连接”按钮,并单击“确认”按钮。大约
1
~
3
秒后,状态会更新为“已连接”

第五步:
十七、使用MariaDB数据库管理系统
MySQL
数据库项目自从被
Oracle 公司收购之后,从开源软件转变成为了“闭源”软件, 这导致
IT
行业中的很多企业以及厂商纷纷选择使用了数据库软件的后起之秀
—
MariaDB 数据库管理系统。
MariaDB
数据库管理系统也因此快速占据了市场。
1.数据库管理系统
数据库管理系统是一种能够对数据库中存放的数据进行建立、修改、删除、查找、维护等操作的软件程序。它通过把计算机中具体的物理数据转换成适合用户理解的抽象逻辑数据,有效地降低数据库管理的技术门槛,因此即便是从事
Linux 运维工作的工程师也可以对数据库进行基本的管理操作。本书的技术主线依然是 Linux 系统的运维,而数据库管理系统只不过是在此主线上的一个内容不断横向扩展、纵向加深的分支,不能指望在一两天之内就可以精通数据库管理技术。
既然是讲解数据库管理技术,就肯定绕不开
MySQL
。MySQL 是一款市场占有率非常高的数据库管理系统,技术成熟,配置步骤相对简单,而且具有良好的可扩展性。但是,由于Oracle
公司在
2009
年收购了
MySQL
的母公司
Sun
,因此MySQL数据库项目也随之纳入Oracle麾下,逐步演变为保持着开源软件的身份,但又申请了多项商业专利的软件系统。开源软件是全球黑客、极客、程序员等技术高手在开源社区的大旗下的公共智慧的结晶,自己的劳动成果被其他公司商业化自然也伤了一大批开源工作者的心,因此
MySQL 项目的创始人重新研发了一款名为
MariaDB
的全新数据库管理系统。
MariaDB
当前由开源社区进行维护,是
MySQL
的分支产品,而且与
MySQL 具有高度的兼容性,与
MySQL API
和命令均保持一致。并且
MariaDB
还自带了一个新的存储引擎
Aria,用于替代
MyISAM
。因此,
MariaDB
与
MySQL
一样好用。
2.初始化MariaDB服务
相较于
MySQL
,
MariaDB 数据库管理系统有了很多新鲜的扩展特性,例如对微秒级别的支持、线程池、子查询优化、进程报告等。在配置妥当软件仓库后,即可安装部署 MariaDB数据库主程序及服务端程序了。

启动服务程序,并将其加入到开机启动项中:

在确认
mariadb 数据库软件程序安装完毕并成功启动后请不要立即使用。为了确保数据库的安全性和正常运转,需要先对数据库程序进行初始化操作。这个初始化操作涉及下面 5个步骤。
1.设置
root
管理员在数据库中的密码值(注意,该密码并非
root 管理员在系统中的密码,这里的密码值默认应该为空,可直接按回车键)。
2.设置
root
管理员在数据库中的专有密码。
3.删除匿名用户,并使用
root 管理员从远程登录数据库,以确保数据库上运行的业务的安全性。
4.删除默认的测试数据库,取消测试数据库的一系列访问权限。
5.刷新授权列表,让初始化的设定立即生效。

在很多生产环境中都需要使用站库分离的技术(即网站和数据库不在同一个服务器上),如果需要让
root
管理员远程访问数据库,可在上面的初始化操作中设置策略,以允许 root 管理员从远程访问。然后还需要设置防火墙,使其放行对数据库服务程序的访问请求。数据库服务程序默认会占用
3306
端口,在防火墙策略中服务名称统一叫作
mysql
:

一切准备就绪。现在我们将首次登录
MariaDB
数据库。管理数据库的命令为
mysql,其中,-u
参数用来指定以
root
管理员的身份登录,而
-p
参数用来验证该用户在数据库中的密码值。

初次使用数据库管理工具的读者,可以输入
help
命令查看
mariadb 服务能做的操作,语句的用法与
MySQL
一模一样:

在登录
MariaDB
数据库后执行数据库命令时,都需要在命令后面用分号(
;)结尾,这也是与
Linux 命令最显著的区别。大家需要慢慢习惯数据库命令的这种设定。下面执行如下命令查看数据库管理系统中当前都有哪些数据库:不区分大小写

接下来使用数据库命令将
root 管理员在数据库管理系统中的密码值修改为
linuxprobe
。这样退出后再尝试登录,如果还坚持输入原先的密码,则将提示访问失败。

输入新密码(
linuxprobe
)后,便可顺利进入数据库管理工具中:

3.管理用户以及授权
在生产环境中总不能一直“死啃”
root 管理员。为了保障数据库系统的安全性,以及让其他用户协同管理数据库,可以在
MariaDB 数据库管理系统中为他们创建多个专用的数据库管理用户,然后再分配合理的权限,以满足他们的工作需求。为此,可使用
root 管理员登录数据库管理系统,然后按照“
CREATE USER
用户名
@
主机名
IDENTIFIED BY '
密码
';”的格式创建数据库管理用户。再次提醒大家,一定不要忘记每条数据库命令后面的分号(
;
)。

创建的用户信息可以使用
SELECT 命令语句来查询。下面命令查询的是用户 hello 的主机名称、用户名称以及经过加密的密码值信息:

不过,用户 hello仅仅是一位普通用户,没有数据库的任何操作权限。不信的话,可以切换到 luke 用户来查询数据库管理系统中当前都有哪些数据库。可以发现,该用户甚至没法查看完整的数据库列表(刚才使用
root
用户时可以查看到
3
个数据库列表):

数据库管理系统所使用的命令一般都比较复杂。我们以
GRANT 命令为例进行说明。GRANT
命令用于为用户进行授权
。在使用
GRANT 命令时需要写上要赋予的权限、数据库及表单名称,以及对应的用户及主机信息。
GRANT
命令的常见格式以及解释

当然,用户的授权工作肯定是需要数据库管理员来执行的。下面以
root 管理员的身份登录到数据库管理系统中,针对
mysql
数据库中的
user 表单向用户 hello授予查询、更新、删除以及插入等权限。


查看一下用户 hello
的权限:

上面输出信息中显示用户hello已经拥有了针对mysql
数据库中user表单的一系列权限了。这时我们再切换到用户 hello,此时就能够看到 mysql
数据库了,而且还能看到表单
user(其余表单会因无权限而被继续隐藏):

切换回
root 管理员用户,移除刚才的授权。

除了移除授权的命令(
REVOKE
)与授权命令(
GRANTS)不同之外,其余部分都是一致的。这不仅好记而且也容易理解。执行移除授权命令后,再来查看用户
hello
的信息:

不再需要某个用户时,可以直接用
DROP
命令将其删除:

4.创建数据库与表单
在 MariaDB 数据库管理系统中,一个数据库可以存放多个数据表,数据表单是数据库中最重要最核心的内容。我们可以根据自己的需求自定义数据库表结构,然后在其中合理地存放数据,以便后期轻松地维护和修改。
用于创建数据库的命令以及作用

尝试创建一个名为
linuxprobe 的数据库,然后再查看数据库列表,此时就能看到它了:

MariaDB
与
MySQL
同属于关系型数据库(
Relational Database Management System
,
RDBMS
)。关系型数据库有些类似于表格的概念,一个关系型数据库由一个或多个表格
/
表单组成。
表头表示每一列的名称;列表示具有相同数据类型的数据集合;行表示用来描述事物的具体信息;值表示行的具体信息,每个值均与该列的其他数据类型相同;键表示用来识别某个特定事物的方法,在当前列中具有唯一性。

比如,在新建的
linuxprobe
数据库中创建表单
mybook,然后进行表单的初始化,即定义存储数据内容的结构。我们分别定义
3
个字段项,其中,字符型字段
name
(长度为
15 字符)用来存放图书名称,整型字段
price
和
pages 分别存储图书的价格和页数。当执行完下述命令之后,就可以看到表单的结构信息了:


5.管理表单及数据
接下来向
mybook
数据表单中插入一条图书信息。为此需要使用 INSERT 命令,并在命令中写清表单名称以及对应的字段项。执行该命令之后即可完成图书写入信息。下面使用该命令插入一条图书信息,其中书名为
linuxprobe
,价格和页数分别是
60
元和 518 页。在命令执行后也就意味着图书信息已经成功写入到数据表单中,然后就可以查询表单中的内容了。在使用
SELECT 命令查询表单内容时,需要加上想要查询的字段;如果想查看表单中的所有内容,则可以使用星号(
*
)通配符来显示:

对数据库运维人员来讲,需要做好
4
门功课—增、删、改、查。这意味着创建数据表单并在其中插入内容仅仅是第一步,还需要掌握数据表单内容的修改方法。例如,可以使用UPDATE
命令将刚才插入的
linuxprobe
图书信息的价格修改为
55
元,然后再使用 SELECT 命令查看该图书的名称和定价信息。注意,因为这里只查看图书的名称和定价,而不涉及页码,所以无须再用星号通配符来显示所有内容。

想修改指定的某一条记录,用
WHERE 命令进行限定即可。我们先插入两条图书信息:

然后使用
WHERE
命令仅将名称为
linuxcool
的图书价格修改为
60 元,不影响其他图书信息:

还可以使用
DELETE
命令删除某个数据表单中的内容。下面使用
DELETE 命令删除数据表单
mybook 中的所有内容,然后再查看该表单中的内容,可以发现该表单内容为空了:

一般来讲,数据表单中会存放成千上万条数据信息。比如我们刚刚创建的用于保存图书信息的 mybook 表单,随着时间的推移,里面的图书信息也会越来越多。在这样的情况下,如果只想查看其价格大于某个数值的图书,又该如何定义查询语句呢?
下面先使用
INSERT
插入命令依次插入
4
条图书信息:

要想让查询结果更加精准,就需要结合使用
SELECT
与
WHERE 命令了。其中,WHERE命令是在数据库中进行匹配查询的条件命令。通过设置查询条件,就可以仅查找出符合该条件的数据。
WHERE
命令中使用的参数以及作用

分别在
mybook
表单中查找出价格大于
75
元或价格不等于 80 元的图书,其对应的命令如下所示。在熟悉了这两个查询条件之后,大家可以自行尝试精确查找图书名为
linuxprobe4
的图书信息。

匹配的条件越多,获得的信息就越精准。在
WHERE
命令的后面追加
AND 操作符,可以进行多次匹配。例如,执行下述命令,找到价格为
45
元、页数为
500
的图书的名称:

6.数据库的备份及恢复
mysqldump
命令用于备份数据库数据,格式为“
mysqldump [
参数
] [
数据库名称
]”。其中参数与
mysql
命令大致相同,
-u
参数用于定义登录数据库的用户名称,
-p 参数表示密码提示符。下面将
linuxprobe
数据库中的内容导出为一个文件,并保存到
root
管理员的家目录中:

然后进入
MariaDB
数据库管理系统,彻底删除
linuxprobe
数据库,这样
mybook 数据表单也将被彻底删除。然后重新建立
linuxprobe
数据库:


接下来是见证数据恢复效果的时刻!使用输入重定向符把刚刚备份的数据库文件导入到mysql
命令中,然后执行该命令。接下来登录
MariaDB
数据库,就又能看到
linuxprobe 数据库以及
mybook
数据表单了。数据库恢复成功!
先创建同名的数据库

然后退出数据库,把保存的数据导入新建的数据库

查看数据

十八、PXE+Kickstart无人值守
本章将介绍能够用来实现无人值守安装服务的
PXE + Kickstart
服务程序,并带领大家动手安装部署 PXE + TFTP + FTP + DHCP +Kickstart
等服务程序,从而搭建出一套可批量安装
Linux 系统的无人值守安装系统。在学完本章内容之后,运维新手就可以避免枯燥乏味的重复性工作,大大提高系统安装的效率。
1.无人值守系统
如果生产环境中有数百台服务器都需要安装系统,就需要使用 PXE + TFTP + FTP + DHCP + Kickstart 服务搭建出一个无人值守安装系统。这种无人值守安装系统可以自动地为数十台甚至上百台的服务器安装系统,这一方面将运维人员从重复性的工作中解救出来,另外一方面也大大提升了系统安装的效率。

PXE
(
Preboot eXecute Environment
,预启动执行环境)是由
Intel 公司开发的技术,能够让计算机通过网络来启动操作系统(前提是计算机上安装的网卡支持
PXE 技术),主要用于在无人值守安装系统中引导客户端主机安装
Linux
操作系统。
Kickstart 是一种无人值守的安装方式,其工作原理是预先把原本需要运维人员手工填写的参数保存成一个
ks.cfg 文件,当安装过程中需要填写参数时则自动匹配
Kickstart
生成的文件。所以只要
Kickstart 文件包含了安装过程中需要人工填写的所有参数,那么从理论上来讲完全不需要运维人员的干预,就可以自动完成安装工作。
由于当前的客户端主机并没有完整的操作系统,因此也就不能完成
FTP 协议的验证了,所以需要使用
TFTP
协议帮助客户端获取引导及驱动文件。vsftpd 服务程序用于将完整的系统安装镜像通过网络传输给客户端。当然,只要能将系统安装镜像成功传输给客户端即可,因此也可以使用
httpd
来替代
vsftpd
服务程序。
2.部署相关服务程序
接下来实验中即将用到的服务及作用

1.配置HDCP服务程序
DHCP
服务程序用于为客户端主机分配可用的
IP 地址,而且这是服务器与客户端主机进行文件传输的基础,因此要先行配置
DHCP
服务程序。首先按照表
19-2 为无人值守系统设置IP
地址,然后按照图
19-2
和图
19-3
在虚拟机的虚拟网络编辑器中关闭自身的
DHCP 服务,避免与自己配置的服务冲突。



除了上面提及的服务之外,
PXE + KickStart
无人值守安装系统还会用到诸如
sips
、
slp、 mountd
等多项相关的服务协议,因此本实验会临时关闭
firewalld 防火墙,以便数据能够正常地传送:

当挂载好光盘镜像并把仓库文件配置妥当后,就可以安装
DHCP
服务程序软件包了:

我们在这里使用的配置文件与第
14 章中的配置文件有两个主要区别:允许了 BOOTP 引导程序协议,旨在让局域网内暂时没有操作系统的主机也能获取静态 IP 地址;在配置文件的最下面加载了引导驱动文件 pxelinux.0(这个文件会在下面的步骤中创建),其目的是让客户端主机获取到 IP 地址后主动获取引导驱动文件,自行进入下一步的安装过程。

在确认
DHCP 服务程序的参数都填写正确后,重新启动该服务程序,并将其添加到开机启动项中。这样在设备下一次重启之后,可以在无须人工干预的情况下,自动为客户端主机安装系统

与以往的红帽企业版不同,RHEL 8 系统中存在一些“讨厌”的服务,它们的参数错误会导致服务启动失败,但有时却不会在屏幕上向用户显示任何提示信息。建议在启动 dhcpd 后查看一下服务状态,以免后续实验中客户端分配不到网卡信息。若输出状态为“ active (running)”则表示服务已经正常运行:

2.配置TFTP服务程序
vsftpd 是一款功能丰富的文件传输服务程序,允许用户以匿名开放模式、本地用户模式、虚拟用户模式来进行访问认证。但是,当前的客户端主机还没有安装操作系统,该如何进行登录认证呢?
TFTP 作为一种基于UDP 协议的简单文件传输协议,不需要进行用户认证即可获取到所需的文件资源。因此接下来配置
TFTP 服务程序,为客户端主机提供引导及驱动文件。当客户端主机有了基本的驱动程序之后,再通过
vsftpd
服务程序将完整的光盘镜像文件传输过去。

TFTP
是一种非常精简的文件传输服务程序,它的运行和关闭是由
xinetd 网络守护进程服务来管理的。
xinetd 服务程序会同时监听系统的多个端口,然后根据用户请求的端口号调取相应的服务程序来响应用户的请求。需要开启
TFTP
服务程序时,只需在
xinetd 服务程序的配置文件中把
disable
参数改成
no 就可以了。如果配置文件不存在,则复制下面的内容进来,手动创建一下:

保存配置文件并退出,然后重启
xinetd 服务程序,并将其加入到开机启动项中。

3.配置SYSLinux服务程序
SYSLinux
是一个用于提供引导加载的服务程序。与其说
SYSLinux 是一个服务程序,不如说是一个包含了很多引导文件的文件夹。在安装好
SYSLinux
服务程序后,/usr/share/syslinux目录中会出现很多引导文件。

我们首先需要把
SYSLinux
提供的引导文件(也就是前文提到的文件
pxelinux.0)复制到
TFTP 服务程序的默认目录中,这样客户端主机就能够顺利地获取到引导文件了。另外在RHEL 8 系统光盘镜像中也有一些需要调取的引导文件。确认光盘镜像已经被挂载到/media/cdrom
目录后,使用复制命令将光盘镜像中自带的一些引导文件也复制到
TFTP 服务程序的默认目录中。


cp
命令后面接的句点(
.
)表示当前工作目录。也就是说,上述
cp 命令表示将文件复制到当前工作目录(即
/var/lib/tftpboot)中。在复制过程中,若多个目录保存着相同的文件,则可手动敲击
y
键进行覆盖即可。
然后在
TFTP
服务程序的目录中新建
pxelinux.cfg 目录。虽然该目录的名字带有后缀,但依然也是目录,而非文件!将系统光盘中的开机选项菜单复制到该目录中,并命名为
default。这个
default
文件就是开机时的选项菜单

默认的开机菜单中有 3 个选项:安装系统、对安装介质进行检验、排错模式。既然已经确定采用无人值守的方式安装系统,若还需要为每台主机手动选择相应的选项,则未免与我们的主旨(无人值守安装)相悖。
现在我们编辑这个
default
文件,把第
1
行的
default
参数修改为
linux,这样系统在开机时就会默认执行那个名称为
linux
的选项了。对应的
linux
选项大约在第
64 行,将默认的光盘镜像安装方式修改成
FTP
文件传输方式,并指定好光盘镜像的获取网址以及
Kickstart 应答文件的获取路径:


建议在安装源的后面加入
quiet 参数,意为使用静默安装方式,不再需要用户进行确认。文件修改完毕后保存即可。开机选项菜单是被调用的文件,因此不需要单独重启任何服务。
4.配置vsftpd服务程序
在这套无人值守安装系统的服务中,光盘镜像是通过
FTP 协议传输的,因此势必要用到vsftpd
服务程序。当然,也可以使用
httpd
服务程序来提供
Web 网站访问的方式,只要能确保将光盘镜像顺利传输给客户端主机即可。如果打算使用
Web 网站服务来提供光盘镜像,一定记得将上面配置文件中的光盘镜像获取网址和
Kickstart
应答文件获取网址修改一下。

RHEL 8
系统版本的
vsftpd
服务默认不允许匿名公开访问模式,因此需要手动进行开启:


在配置文件修改正确之后,一定将相应的服务程序添加到开机启动项中

在确认系统光盘镜像已经正常挂载到
/media/cdrom 目录后,把目录中的光盘镜像文件全部复制到
vsftpd
服务程序的工作目录中:

将
SELinux 安全子系统中放行FTP
传输协议的允许策略,设置成
on
(开启)。

5.创建Kickstart应答文件
!Kickstart 应答文件中包含了系统安装过程中需要使用的选项和参数信息,系统可以自动调取这个应答文件的内容,从而彻底实现无人值守安装系统。那么,既然这个文件如此重要,该去哪里找呢?其实在
root 管理员的家目录中有一个名为anaconda-ks.cfg
的文件,它就是应答文件。下面将这个文件复制到
vsftpd 服务程序的工作目录中(在开机选项菜单的配置文件中已经定义了该文件的获取路径,也就是
vsftpd 服务程序数据目录中的
pub
子目录)。使用
chmod 命令设置该文件的权限,确保所有人都有可读的权限,以保证客户端主机顺利获取到应答文件及里面的内容

Kickstart
应答文件并没有想象中的那么复杂,它总共只有 44 行左右的参数和注释内容,大家完全可以通过参数的名称及介绍来快速了解每个参数的作用。
其中,第
1
~
10
行表示安装硬盘的名称为
sda
及使用
LVM 技术。这便要求我们在后续新建客户端虚拟机时,硬盘一定要选择
SCSI
或
SATA
类型的
,否则会变成/dev/hd或
/dev/nvme
开头的名称,进而会因找不到硬盘设备而终止安装进程。
第
8
行的软件仓库,应改为由
FTP
服务器提供的网络路径。第
10 行的安装源,也需要由
CDROM
改为网络安装源:

在第
11
~
20
行,
keyboard
参数为硬盘类型,一般都不需要修改。但一定要注意第
17 行的网卡信息,一定要让网卡默认处于
DHCP 模式,否则在几十、上百台主机同时被创建出来后,会因为
IP
地址相互冲突而导致后续无法管理。

在第
21
行
~
30
行,
timezone 参数定义了系统默认时区为“上海”。如果大家的服务器时间不准确,则按照如下修改即可。在第
29
行,创建了一个普通用户,密码值可复制/etc/shadow文件中的加密密文,它由系统自动创建。

最后的第
31
~
44
行表示要安装的软件来源。
graphical-server-environment 即带有图形化界面的服务器环境,它对应的是安装界面中的
Server With GUI
选项。

Kickstart
应答文件将使用
FTP 服务进行传输,然后由安装向导进行调用,因此也不需要重启任何服务。
3.自动部署客户机
在按照上文讲解的方法成功部署各个相关的服务程序后,就可以使用 PXE + Kickstart 无人值守安装系统了。在采用下面的步骤建立虚拟主机时,一定要把客户端的网络模式设定成与服务端一致的“仅主机模式”,否则两台设备无法进行通信,也就更别提自动安装系统了。其余硬件配置选项并没有强制性要求,大家可参考这里的配置选项来设定。
第一步:打开“新建虚拟机向导”程序,选择“自定义(高级)”配置类型,然后单击“下一步”按钮。在随后的虚拟机硬件兼容性选项中,选择默认的“Workstation16.x”,步骤省略。

第二步:将虚拟机操作系统的安装来源设置为“稍后安装操作系统”。这样做的目的是让虚拟机真正从网络中获取系统安装镜像,同时也可避免 VMware Workstation 虚拟机软件按照内设的方法自行安装系统。单击“下一步”按钮

第三步:将“客户机操作系统”设置为 Linux,版本为“Red Hat Enterprise Linux 8 64 位”,然后单击“下一步”按钮

第四步:对虚拟机进行命名并设置安装位置。大家可自行定义虚拟机的名称,而安装位置则尽量选择磁盘空间较大的分区。然后单击“下一步”按钮。在随后设置虚拟机处理器的个数及核心数、内存容量值时,请大家根据实际情况自行选择,步骤省略。

第五步:设置虚拟机主机的网络连接类型为“使用仅主机模式网络”。一定要确保服务器与客户端同处于相同的网络模式,否则客户端无法获得从服务器传送过来的系统镜像及应答文件。随后的 SCSI 控制器类型选择默认的 LSI Logic,步骤省略。

第六步:设置硬盘类型并指定容量。设置“虚拟磁盘类型”为 SCSI 或 SATA,随后在硬盘创建确认界面,选择“创建新虚拟磁盘”选项,步骤省略。

这里将“最大磁盘大小”设置为
20GB
。需要说明的是,这个 20GB 指的是虚拟机系统能够使用的最大上限,而不是会被立即占满,因此设置得稍微大一些也没有关系。然后单击“下一步”按钮
第七步:结束“新建虚拟机向导程序”后,先不要着急打开虚拟机系统。大家还需要单击“自定义硬件”按钮,在弹出的界面中,把“网络适配器”设备同样也设置为“仅主机模式”(这个步骤非常重要),移除其他不需要的硬件,然后单击“确定”按钮。
第八步:
现在,我们就同时准备好了
PXE + Kickstart
无人值守安装系统与虚拟主机。在生产环境
中,大家只需要将配置妥当的服务器上架,接通服务器和客户端主机之间的网线,然后启动客户端主机即可。接下
开始传输光盘镜像文件并进行自 动安装了
—期间完全无须人工干预,直到安装完毕时才需要运维人员进行简单的初始化 工作。



由此可见,当生产环境工作中有数百台服务器需要批量安装系统时,使用无人值守安装系统的便捷性是不言而喻的。但是为了避免法律风险,红帽公司对于许可界面还不允许用应答文件自动完成,需要人工单击“
I accept the license agreement
”复选框后方可继续安装,如
