hgxfg9

人生若只如初见,何事秋风悲画扇。

0%

清理VCSA日志磁盘

症状:

vCenter Server 报告类似于以下内容的错误:
  • vSphere UI Health Alarm”, “Log disk exhaustion on vcenter name

  • Database Health Alarm”, “Core and Inventory Disk Exhaustion on vcenter name

vCenter Server 可能无法访问并出现503 Service Unavailable 错误
vSphere Appliance Management Interface (VAMI) Monitor > Disk显示/storage/log at 75% full or more:
  • 在 75% 的连续磁盘使用空间将触发黄色状态警告

  • 空间达到 85% 时将触发红色严重警报

  • 在 95% 时,vpxd 服务将关闭以防止文件和数据库损坏

造成的原因

  • vCenter Server 日志包在生成后未被清除
  • 高频事件填满日志
  • Apache Tomcat Java Servlet 服务等服务清理文件失败
  • /storage/log 分区设置太小

如何修复 vCenter 7 (VCSA) 上的日志磁盘耗尽:

1.删除占用空间的过时日志
2.扩展日志分区的虚拟磁盘

解决

1.删除占用空间的过时日志

要查找磁盘空间的使用位置,您可以先简单地使用**df -h命令来验证哪个分区有问题。如图所示检查到,/storage/log**分区是有问题的分区。

1
df -h

查看 vcsa 设备上使用的存储空间

接下来检查 /storage/log 分区中具体使用存储空间的位置

1
du -a /storage/log | sort -n -r | head -n 20

Finding the largest directories in the storage log partition

通过按大小查看上面列出的目录结构,我深入到**/storage/log/vmware/eam/web**分区,发现了很多 ESX Agent Manager 日志记录目录的 .log 文件,每个约 8 MB。删除大部分后可以回收较多空间。

存储日志分区中的 Vmware vsphere esx agent manager 日志文件

如果空间释放量不够,继续检查占量第二的**/storage/log/vmware/lookupsvc**目录,释放空间

此外,tomcat的也可能产生较多的日志,可以在以下目录中搜索日志文件,并且清除他们

/storage/log/vmware/sso/tomcat/
/storage/log/vmware/eam/web/
/storage/log/vmware/lookupsvc/tomcat/ (vCenter 7.0 only)

使用以下命令查询及删除日志文件

1
2
ls -lha catalina*log
rm catalina*log
2.扩展日志分区的虚拟磁盘

可以通过增加相关磁盘的大小来解决此问题。为此,首先您需要确定要扩展的确切虚拟磁盘

在 vCenter Server Appliance 管理界面 (VAMI) 中,请转到“监控” > “磁盘”

日志分区对应的是Hard disk 5。这是需要扩展的磁盘

日志分区的虚拟磁盘

如果vcsa包含快照,则无法调整磁盘大小

右击vCenter Appliance,选择Edit Settings增加相关磁盘

vcsa 编辑设置

修改完磁盘大小后,连接vcsa的shell 并运行此命令以扩展磁盘

1
/usr/lib/applmgmt/support/scripts/autogrow.sh

为F5的SNAT保留真实客户端IP地址

主题

本文介绍如何在 BIG-IP 系统上配置 SNAT 对象时允许池成员 Web 服务器以及Exchange服务器中接收原始客户端 IP 地址。

描述

SNAT 对象将原始客户端 IP 地址映射到 BIG-IP 设备上定义的转换地址。当 BIG-IP 系统收到来自客户端 IP 地址的请求时,如果请求中的客户端 IP 地址是在 SNAT 中定义的,则 BIG-IP 系统会将传入数据包的源 IP 地址转换为 SNAT 地址。

当 BIG-IP 系统将传入数据包的源 IP 地址转换为 SNAT 地址时,Web 服务器会将请求视为来自 SNAT 地址,而不是原始客户端 IP 地址。如果需要 Web 服务器记录请求的原始客户端 IP 地址,则 SNAT 地址转换行为可能会出现问题。

您可能需要 BIG-IP 系统将原始客户端 IP 地址插入 HTTP 标头,并将接收请求的 Web 服务器配置为记录客户端 IP 地址而不是 SNAT 地址。

它可以在以下场景中:

  1. 对于我们想知道导致帐户锁定的源主机的电子邮件用户地址。
  2. 安全团队希望收集具有真实IP的日志,以便将来对受感染的帐户进行任何调查。

在大多数情况下,Exchange 服务是通过Loadbalancer发布的,服务器位于Loadbalancer后面。当 Exchange 在第 7 层进行负载平衡时,它的IP地址将变得不透明。因此,实际的客户端源 IP 地址将替换为Loadbalancer自己的 IP 地址,因此只有此地址将记录在 IIS 日志中。因此,Microsoft IIS 客户端登录 Exchange 中的每个客户端连接都将记录分配的负载平衡 IP,而不是实际的源 IP。

例如,如果 Exchange 服务通过负载均衡器(如 KEMP、F5 等)通过 SNAT 发布,则 IIS 日志无法获取真正的源 IP。由于它位于 SNAT 中,因此将保留目标 IP 地址,但更改实际的源 IP 地址。

SNAT示例:

断续器

当数据包通过 NAT 设备时,源或目标 IP 地址都会根据其使用的 NAT 类型进行修改。但是,有关对数据包所做的这些更改的信息保留在 NAT 设备的连接表中。

在大多数Loadbalancer(如 KEMP,F5)中都有一个选项来创建 X-Forwarded-For 标头并启用它们。

完成后,启用时的 X-Forwarded-For 标头选项将捕获客户端的源地址并将其附加到标头中。

在此之后,我们需要在所有 Exchange 服务器上的高级日志记录模块中添加一个额外的值,以便在 IIS 日志上记录此真实 IP。

配置流程

F5:

若要将 BIG-IP 系统配置为在 X-Forwarded-For HTTP 标头中插入原始客户端 IP 地址,有两种方案:

  • 在 HTTP 配置文件中启用“ X-Forwarded-For”选项
  • 使用 iRule” X-Forwarded-For “在HTTP 标头中插入原始客户端 IP 地址

在 HTTP 配置文件中启用“ X-Forwarded-For”选项

1、打开Local Traffic > Profiles

2、在 Services中, 选择 HTTP

3、选择Create

4、输入 HTTP 配置文件的名称

5、勾选Insert X-Forwarded-For,选择Enabled

image-20220818094605743

6、选择Finished

到virtual server中关联HTTP配置文件

使用 iRule” X-Forwarded-For “在HTTP 标头中插入原始客户端 IP 地址

1、打开Local Traffic > iRules

2、选择Create

3、输入 iRule 的名称

4、输入iRule内容:

1
2
3
when HTTP_REQUEST {
HTTP::header insert X-Forwarded-For [IP::remote_addr]
}

image-20220818094814462

X-Forwarded-For 是一个常见的 HTTP 标头,可能是接收系统预期的 HTTP 标头。在提供的示例 iRule 中,还可以使用自定义 HTTP 标头名称而不是常见的 X-Forwarded-For,以更好地标识 BIG-IP 系统插入的 HTTP 标头。使用自定义X-Forwarded-For HTTP 标头名称可能需要在接收系统上进行自定义配置,以便能够使用自定义 HTTP 标头值信息。

为了提高安全性,您可以先删除自定义 X-Forwarded-For HTTP 标头(如果 HTTP 请求中存在该标头),然后使用所描述的 iRules 语法添加它。标头值在到达 BIG-IP 系统之前可能已经修改过。如果系统使用自定义 X-Forwarded-For HTTP 标头信息进行身份验证或允许列表(例如在 Web 应用程序防火墙中),则可能需要先删除自定义标头。

例如:

1
2
3
4
when HTTP_REQUEST {
HTTP::header remove X-Custom-XFF
HTTP::header insert X-Custom-XFF [IP::remote_addr]
}

5、选择Finished

到virtual server中关联iRule配置文件

配置 Web 服务器以从 HTTP 标头中提取 IP 地址

将 BIG-IP 系统配置为使用 X-Forwarded-For HTTP 标头将原始客户端 IP 地址插入 HTTP 标头后,还必须将 Web 服务器配置为从 HTTP 标头中提取 IP 地址,然后将 IP 地址记录到 Web 服务器日志文件中。

NGINX

您可以将NGINX Web服务器配置为从X-Forwarded-For HTTP标头中提取IP地址,并通过将适当的日志记录指令添加到主nginx.conf配置文件或相关的虚拟主机配置文件中,将该IP地址记录到Web服务器日志文件中。

修改 NGINX 配置文件,添加以下语法:

1
2
set_real_ip_from <big-ip floating snat ip address>;
real_ip_header X-Forwarded-For;

< big-ip floating snat ip address > 替换为活动BIG-IP在向NGINX Web服务器发送请求时使用的SNAT IP地址或浮动Self IP地址。对于 BIG-IP 不使用自 IP 浮动 IP 地址或使用 SNAT 池的配置,请为 SNAT 池的每个 SNAT IP 地址添加一行。

例如,对于 HA 部署,其中每个 BIG-IP 设备都使用 NGINX Web 服务器网络上的非浮动自 IP 地址。

1
2
3
set_real_ip_from <big-ip self ip address active device>;
set_real_ip_from <big-ip self ip address standby device>;
real_ip_header X-Forwarded-For;

注意: 在此示例*<big-ip self ip 地址活动设备>是活动 BIG-IP 设备的Self IP 地址,它使用 SNAT 将流量定向到 NGINX Web 服务器,<big-ip 自 IP 地址备用设备>*是备用 BIG-IP 设备的Self IP 地址,该设备使用 SNAT 将流量定向到 NGINX Web 服务器。

例如,BIG-IP系统使用SNAT池,其中包含将流量发送到NGINX Web服务器时使用的三个地址。

1
2
3
4
set_real_ip_from <snat pool ip address 1>;
set_real_ip_from <snat pool ip address 2>;
set_real_ip_from <snat pool ip address 3>;
real_ip_header X-Forwarded-For;

*: 将 **< snat pool ip address >*的每个实例替换为 SNAT 池配置中列出的每个 IP 地址。

Apache2

您可以将 Apache Web 服务器配置为从 X-Forwarded-For HTTP 标头中提取 IP 地址,并通过将相应的日志记录指令添加到主 Apache 配置文件(通常称为 httpd.conf)或相关的虚拟主机配置文件,将该 IP 地址记录到 Web 服务器日志文件中。

例如,将以下行添加到 Apache2 配置文件中:

1
2
3
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""  proxy
SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
CustomLog "/var/log/apache2/access_log" proxy

Apache

您可以将 Apache Web 服务器配置为从 X-Forwarded-For HTTP 标头中提取 IP 地址,并通过将相应的日志记录指令添加到主 Apache 配置文件(通常称为 httpd.conf)或相关的虚拟主机配置文件,将该 IP 地址记录到 Web 服务器日志文件中。

例如:

1
2
LogFormat "%v %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" X-Forwarded-For
CustomLog /var/log/apache/www.example.com-xforwarded.log X-Forwarded-For

Microsoft IIS Web Server(Exchange SMTP)

您可以将 Microsoft IIS Web 服务器配置为从 X-Forwarded-For HTTP 标头中提取 IP 地址,并将 IP 地址记录到 Web 服务器日志文件中。为此,必须从 DevCentral 上的 IIS X-Forwarded-For ISAPI 日志筛选器页下载并安装 IIS X-Forwarded-For ISAPI 日志筛选器的 32 位或 64 位发行版。若要安装筛选器,请使用 Microsoft IIS 管理器实用工具将其添加到 Microsoft IIS 网站。

IIS ISAPI 筛选器(可以安装在 IIS 7.x 或 IIS 6.x 下)在 HTTP 请求中查找 X-Forwarded-For HTTP 标头。如果 IIS ISAPI 筛选器在 HTTP 请求中找到 X-Forwarded-For HTTP 标头,它将 W3SVC 日志跟踪中的客户端 IP 地址替换为 X-Forwarded-For HTTP 标头的值。

从 IIS 7.0 开始,Microsoft 还为 IIS 提供了可选的高级日志记录功能,该功能允许您定义自定义日志定义,这些定义可以捕获其他信息,例如 X-Forwarded-For For 标头中包含的客户端 IP 地址,而无需安装 ISAPI 日志筛选器。若要将 IIS Web 服务器配置为记录 X-Forwarded-For For 标头,必须已安装 IIS 高级日志记录

若要在 Windows Server 2012 R2 & 2016 中启用自定义日志记录角色服务,请执行以下操作:

  1. 打开服务器管理器

  2. 单击添加角色和功能

  3. 在“添加角色和功能”向导中,导航到“Web 服务器> Web 服务器>运行状况和诊断”类别下的“自定义日志记录角色”

  4. 在“确认”页上,单击“安装”

现在打开 IIS 管理器>选择“日志记录”

image-20220817175830935

单击选择字段

image-20220817175908336

创建新的自定义字段:

字段名称 - 我们可以提供任何名称,以便它将作为新列反映在日志上

源类型 – 请求标头

源 – X-Forwarded-For

image-20220817180108607

在此之后执行 IIS 重置。之后我们在 IIS 日志中看到的IP地址就变为了客户端IP地址,而不是Loadbalancer的 IP。

在AD域中批量定义用户配置文件目录

手动定义用户配置文件

如果为单个用户做漫游配置文件的话需要在”Active Directory”用户和计算机”工具中找到用户然后右击用户选择属性中的“配置文件”并在“配置文件路径”后填写提前在服务器上设置好的共享文件夹的UNC路径。

image-20220805123229127

为指定用户修改配置文件路径

这里我们使用dsmod指令,他可以在目录中修改特定类型的现有对象,用法详见

1
2
C:\Users\Administrator>dsmod user CN=user1,CN=Users,DC=yd,DC=cn -profile \\1.1.1.1\userprofile\$username$
dsmod 成功:CN=user1,CN=Users,DC=yd,DC=cn

其中$username$为用户名变量,\\1.1.1.1\userprofile为共享路径,同理,可以将共享路径修改为本地路径

image-20220805125313647

如需配置多个用户,可以创建一个txt,内容为

1
2
3
dsmod user CN=user1,CN=Users,DC=yd,DC=cn -profile \\1.1.1.1\userprofile\$username$
dsmod user CN=user2,CN=Users,DC=yd,DC=cn -profile \\1.1.1.1\userprofile\$username$
dsmod user CN=user3,CN=Users,DC=yd,DC=cn -profile \\1.1.1.1\userprofile\$username$

编辑完成后另存为bat后运行

为指定组内用户修改配置文件路径

同理,修改用户配置使用的命令为dsmod,按组进行修改的话则需要多一条查询命令dsquery user,使用方法如下

1
2
3
4
C:\Users\Administrator>dsquery user OU=Horizon,DC=yd,DC=cn
"CN=user1,OU=Horizon,DC=yd,DC=cn"
"CN=user2,OU=Horizon,DC=yd,DC=cn"
"CN=user3,OU=Horizon,DC=yd,DC=cn"

查询用户信息正确后,即可使用dsmod批量更改配置文件

1
2
3
4
C:\Users\Administrator>dsquery user OU=Horizon,DC=yd,DC=cn | dsmod user -profile \\1.1.1.1\userprofile\$username$
dsmod 成功:CN=user1,OU=Horizon,DC=yd,DC=cn
dsmod 成功:CN=user2,OU=Horizon,DC=yd,DC=cn
dsmod 成功:CN=user3,OU=Horizon,DC=yd,DC=cn

image-20220805132058013

创建文件夹重定向

AD中创建共享文件夹,权限根据需求定义,演示目的放行了Everyone

image-20220805132323197

打开运行,输入gpmc.msc 打开组策略管理

image-20220805132345639

右键选中GPO编辑,进入用户配置-策略-Windows设置-文件夹重定向

image-20220805132404196

选中需要创建重定向的文件夹,右击属性

image-20220805132421710

选择高级

image-20220805132432496

添加安全组成员身份,选择所需组,目标文件夹位置选择根目录创建,根路径填写共享文件夹的路径

image-20220805132455642

属性中如图设置

image-20220805132508491

设置完全确定,选择是

image-20220805132521182

以管理员身份运行CMD,输入gpupdate /force更新组策略

image-20220805132534630

客户机注销后重新登录,查看对应文件夹的路径,可以看到下载文件夹已经被重定向至远端

image-20220805132546850

映射网络驱动器

AD中创建共享文件夹,权限根据需求定义,演示目的放行了Everyone

image-20220805132615270

运行中输入gpmc.msc打开组策略管理

image-20220805132624831

在目标组织单位处,创建并链接GPO

image-20220805132637432

右键选中GPO编辑,进入用户配置-首选项-windows设置-驱动器映射,右击选中,新建映射驱动器

image-20220805132648561

输入共享文件夹路径,分配盘符,并显示驱动器

image-20220805132701648

再点“常用”-“项目级别目标”-“目标“连接所要应用的目标ou

image-20220805132711137

image-20220805132721396

image-20220805132729694

完成上述操作后刷新组策略
以管理员身份运行CMD,输入gpupdate /force更新组策略

image-20220805132739721

客户机注销后重新登录,打开文件资源管理器,可以看到网络驱动器已成功映射

image-20220805132749125

主文件夹配置 (个人网络驱动器)

AD中创建共享文件夹,权限根据需求定义,演示目的放行了Everyone

image-20220805132810406

打开Active Directory用户与计算机

image-20220805132822238

选择需要配置主文件夹的用户,双击打开

image-20220805132832465

选择配置文件

image-20220805132842527

选择需要映射的盘符,文件目录填写共享文件夹路径,%username%为用户名变量,系统会自动替换成当前选择的用户名

image-20220805132857429

保存后重新登录客户机即可完成映射

image-20220805132908857

相关共享目录会自动创建个人文件夹

image-20220805132921085

这里提供一个快速批量配置主目录的方法,以管理员身份运行CMD,输入以下命令即可批量完成替换或新增

1
dsquery user "ou=xxx View,dc=xxx,dc=xxx" | dsmod user -hmdir \\共享目录$username$ -hmdrv 驱动器号

image-20220805132950030

ESXI精简制备(thin)空间回收

先说下三种虚拟磁盘类型的认识

1. 厚置备延迟置零(zeroed thick) #默认选项

在创建时为虚拟磁盘分配所需空间(真实地占用物理存储空间),当虚拟机在有写入的时,再按量将其置零。

2 厚置备置零(eager zeroed thick)

在创建时为虚拟磁盘分配所需空间(真实地占用物理存储空间),创建过程中作置零操作,所以创建磁盘时间长。

3 精简置备(thin)

无论磁盘分配多大,实际用多少就占用物理存储多少,当虚拟机有写入时,需等待分配空间和置备完成后才能进行操作,对于IO频繁造成性能会有所下降,好处节省了存储空间,但虚拟磁盘vmdk文件随着置备量会只增不减。

解决精简置备只增不减

精简置备vmdk文件容量是随着写入置备增加,即虚拟机某个时间使用磁盘达800GB(历史峰值),删除600GB文件后,甚至格式化磁盘,删除磁盘分区,vmdk文件依然是800GB。对于虚拟机迁移简直就是灾难,首先新存储要准备这么大的物理存储空间,其次这么大的vmdk文件迁移耗的时间也是长。

回收空间思路:

将虚拟机上剩余未使用的600GB,填0操作,再使用ESXI工具vmkfstools移除置零的块,实现收缩VMDK容量。

【严重注意】****即将进行置零的空间容量要比物理存储剩余容量大,不然这就是炸盘了
针对win系统填0操作,

Windows不会自动将已删除的块清零。Microsoft提供了一个工具SDelete,将整个磁盘剩余可用空间填0。

  1. 下载SDelete

  2. 运行sdelete.exe -z 盘符

    image-20220427110008108

运行过程比较慢,耐心等待,直到完成该过程。请注意,在此过程中,该虚拟磁盘VMDK文件将增长到精简置备分配完整大小。

针对linux系统填0操作,

Linux也没有将删除的块归零。有多种工具可用于创建归零块,最着名的工具是dd。

  1. 用df识别可用空间

  2. 用dd填充可用空间

image-20220427110101310

如图所示,磁盘md2剩余空间1.8T,我们填充1.7T的数据,使用dd填0

1
dd  bs=1M  count=1782579  if=/dev/zero  of=/volume1/test &&  rm -rf /volume1/test

vmkfstools 操作实例****收缩VMDK文件

1.关闭虚拟机电源,或断开要收缩的虚拟磁盘

2.使用SSH连接ESXi主机

3.导航到虚拟机文件夹

4.使用du -ah * 验证磁盘使用情况

5.运行 vmkfstools -K [vmdk磁盘]

6.使用du验证磁盘使用情况

注意:

一个磁盘由磁盘.vmdk和 磁盘-flat.vmdk的两个.vmdk组成,,其中磁盘.vmdk文件很小,存放了虚拟磁盘一些配置信息,实际数据都存放在flat.vmdk文件中。但转换时是使用vmdk文件而不是flat.vmdk文件

总结以上过程:

先将可用磁盘空间都填零操作,再于ESXI的shell中使用vmkfstools -K移除置零的块,回收膨胀的精简置备空间。

注意: vmkfstools -K并不能对快照vmdk文件如HDD-RedHat-7.3-vv-000002.vmdk清零操作,需考虑将快照移除再操作。

vmdk文件容量减少了,迁移就不是问题了,迁移方式很多,在此就不详细说明了,

vmkfstools -i克隆、OVF方式、复制vmdk文件、直接“移至”、还有DiskGenius克隆分区,甚至ghost也行。

RHCE — RH294 任务概览

1. 按要求安装和配置 Ansible

  • 按照下方所述,在控制节点 workstation.lab.example.com 上安装和配置 Ansible:

任务要求

  1. 安装所需的软件包 (考试时要验证一下ansible是不是装好了)
  2. 创建名为/home/student/ansible/inventory 的静态清单文件, 以满足以下需求:
    servera 是dev 主机组的成员
    serverb 是 test 主机组的成员
    serverc 和 serverd 是 prod 主机组的成员
    prod 组 是webservers 主机组的成员
    bastion 是 balancers 主机组的成员
  3. 创建名为/home/student/ansible/ansible.cfg 的配置文件, 以满足以下要求:
    主机清单文件为/home/student/ansible/inventory
    playbook 中使用的角色的位置包括/home/student/ansible/roles
    注意:因student 执行命令时需要输入密码, 会导致ansible 执行失败, 因此先添加sudoers 规则(考试中不需要修改,在考试中用的是 admin 用户)

2. 创建和运行 Ansible 临时命令

  • 作为系统管理员, 您需要在受管节点上安装软件.
  • 请按照下方所述, 创建一个名为/home/student/ansible/adhoc.sh 的 shell 脚本,
  • 该脚本将使用Ansible 临时命令在各个受管节点上安装 yum 存储库:
  • 说白了就是用ansible命令配置yum源

任务要求

  1. 存储库 1: 存储库的名称为 rh294_BASE
    描述为 rh294 base software
    存储库为开启状态
    基础URL 为 http://content.example.com/rhel8.0/x86_64/dvd/BaseOS
    GPG 签名检查为启用状态
    GPG 密钥 URL 为 http://content.example.com/rhel8.0/x86_64/dvd/RPM-GPG-KEY-redhat-release
  2. 存储库 2: 存储库的名称为 rh294_STREAM
    描述为 rh294 stream software
    存储库为开启状态
    基础URL 为 http://content.example.com/rhel8.0/x86_64/dvd/AppStream
    GPG 签名检查为启用状态
    GPG 密钥 URL 为 http://content.example.com/rhel8.0/x86_64/dvd/RPM-GPG-KEY-redhat-release

3. 安装 php 和 mariadb 软件包到指定主机组

  • 创建一个名为 /home/student/ansible/packages.yml 的 playbook:

任务要求

  1. 将 php 和 mariadb 软件包安装到 dev、test 和 prod 主机组中的主机上
  2. 将RPM Development Tools 软件包组安装到 dev 主机组中的主机上
  3. 将 dev 主机组中主机上的所有软件包更新为最新版本

4. 使用 RHEL 系统角色软件包创建配置时间角色

  • 安装 RHEL 系统角色软件包,并创建符合以下条件的 playbook

任务要求

  • 编写 /home/student/ansible/timesync.yml
  • 在所有受管节点上运行
  1. 使用 timesync 角色
  2. 配置该角色,以使用当前有效的 NTP 提供商
  3. 配置该角色,以使用时间服务器 classroom.example.com
  4. 配置该角色,以启用 iburst 参数

5. 使用Ansible Galaxy 安装角色

  • 使用 Ansible Galaxy 和要求文件 /home/student/ansible/roles/requirements.yml,
  • 从以下 URL 下载角色并安装到 /home/student/ansible/roles:

任务要求

  • 从链接下载角色并安装角色
1
2
http://172.25.250.250/ansible2.8/haproxy.tar.gz 此角色的名称应当为 balancer
http://172.25.250.250/ansible2.8/phpinfo.tar.gz 此角色的名称应当为 phpinfo

6. 创建和使用 apache 角色

  • 根据下列要求,在/home/student/ansible/roles 中创建名为 http 的角色
  • 按照下方所述,创建一个使用此角色的 playbook /home/student/ansible/newrole.yml:
  • 该playbook 在webservers 主机组中的主机上运行

任务要求

  1. httpd 软件包已安装,设为在系统启动时启用并启动
  2. 防火墙已启用并正在运行,并使用允许访问Web 服务器的规则
  3. 模板文件 index.html.j2 已存在,用于创建具有以下输出的文件/var/www/html/index.html: Welcome to HOSTNAME on IPADDRESS
  4. 其中,HOSTNAME 是受管节点的完全限定域名,IPADDRESS 则是受管节点的 IP 地址。

7. 从 Ansible Galaxy 使用角色创建web负载均衡

  • 根据下列要求,创建一个名为 /home/student/ansible/roles.yml 的playbook:
  • 这道题要应用到第5道题下载并初始化好了的两个角色
  • 其实就部署一负载均衡器,只需要调用角色就可以了

任务要求

  1. playbook 中包含一个 play,该 play 在 balancers 主机组中的主机上运行并将使用 balancer 角色。
  2. 此角色配置一项服务,以在 webservers 主机组中的主机之间平衡 Web 服务器请求的负载。
  3. 浏览到 balancers 主机组中的主机(例如 http://bastion.lab.example.com/ )将生成以下输出: Welcome to serverc.example.com on 172.25.1.12
  4. 重新加载浏览器将从另一 Web 服务器生成输出: Welcome to serverd.example.com on 172.25.1.13
  5. playbook 中包含一个 play,该 play 在 webservers 主机组中的主机上运行并将使用 phpinfo 角色。
  6. 通过 URL /hello.php 浏览到 webservers 主机组中的主机将生成以下输出: Hello PHP World from FQDN 其中,FQDN 是主机的完全限定名称。

8. 利用playbook在指定主机组创建和使用逻辑卷

  • 创建一个名为/home/student/ansible/lv.yml 的 playbook,
  • 它将在所有受管节点上运行以执行下列任务:

任务要求

  • 创建符合以下要求的逻辑卷:
  1. 逻辑卷创建在 research 卷组中逻辑卷名称为 data
  2. 逻辑卷大小为 1500MiB
  3. 使用ext4 文件系统格式化逻辑卷
  4. 如果无法创建请求的逻辑卷大小,应显示错误消息Could not create logical volume of that size,并且应改为使用大小 800MiB。
  5. 如果卷组research 不存在 ,应显示错误消息Volume group does not exist。
  6. 不要以任何方式挂载逻辑卷
    注意:有的主机上有逻辑卷阿祖,有的主机上没有逻辑卷,有的主机上不足够创建1500但能创建800

9. 利用playbooke生成主机清单文件

  • 使用playbook在所有主机组生成指定格式的文件

任务要求

  • 将一个初始模板文件从 http://172.25.250.250/ansible2.8/fifiles/hosts.j2 下载到 /home/student/ansible
  • 完成该模板,以便用它生成以下文件:针对每个清单主机包含一行内容,其格式与 /etc/hosts 相同创建名为 /home/student/ansible/hosts.yml 的 playbook,
  • 它将使用此模板在 dev 主机组中的主机上生成文件 /etc/myhosts。
  • 该 playbook 运行后,dev 主机组中主机上的文件/etc/myhosts 应针对每个受管主机包含一行内容:
1
2
3
4
5
6
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.24.1.6 servera.lab1.example.com servera
172.24.1.7 serverb.lab1.example.com serverb
172.24.1.8 serverc.lab1.example.com serverc
172.24.1.9 serverd.lab1.example.com serverd 172.24.1.10 bastion.lab1.example.com bastion

10. 利用playbook在不同主机组修改文件内容

  • 按照下方所述,创建一个名为 /home/student/ansible/issue.yml 的 playbook:
  • 该 playbook 将在所有清单主机上运行
  • 该 playbook 会将 /etc/issue 的内容替换为下方所示的一行文本:

任务要求

  1. 在 dev 主机组中的主机上,这行文本显示为:Development
  2. 在 test 主机组中的主机上,这行文本显示为:Test
  3. 在 prod 主机组中的主机上,这行文本显示为:Production

11. 利用playbook创建 Web 内容目录

  • 按照下方所述,创建一个名为 /home/student/ansible/webcontent.yml 的 playbook:
  • 该 playbook 在 dev 主机组中的受管节点上运行

任务要求

  1. 创建符合下列要求的目录 /webdev: 所有者为 devops 组具有常规权限:
    owner=read+write+execute,group=read+write+execute, other=read+execute
  2. 具有特殊权限: set group ID
  3. 用符号链接将 /var/www/html/webdev 链接到 /webdev
  4. 创建文件 /webdev/index.html,其中包含如下所示的单行文本:Development
  5. 在 dev 主机组中主机上浏览此目录(例如 http://servera.lab.example.com/webdev/ )将生成以下输出:Development

12. 利用playbook生成所有清单主机指定硬件信息报告

  • 创建一个名为 /home/student/ansible/hwreport.yml 的 playbook,
  • 它将在所有受管节点上生成含有以下信息的输出文件 /root/hwreport.txt:

任务要求

  • 输出文件 /root/hwreport.txt
  1. hostname: inventoryhostname
  2. mem: memory_in_MB
  3. bios: BIOS_version
  4. vda: disk_vda_size
  5. vdb: disk_vdb_size
  • 输出文件中的每一行含有一个 key=value 对。
  • playbook 应当从 http://content.example.com/fifiles/hwreport.empty 下载文件,并将它保存为/root/hwreport.txt
  • 使用正确的值修改 /root/hwreport.txt
  • 如果硬件项不存在,相关的值应设为NONE

13. 创建Ansible密码库

  • 按照下方所述,创建一个 Ansible 库来存储用户密码:库名称为 /home/student/ansible/locker.yml

任务要求

  • 库中含有两个变量,名称如下:
  1. pw_developer,值为 Imadev
  2. pw_manager,值为 Imamgr
  • 用于加密和解密该库的密码为kkk123456
  • 密码存储在文件 /home/student/ansible/secret.txt 中

14. 基于Ansible密码库创建用户帐户

  • http://172.25.250.250/ansible2.8/user_list.yml 下载要创建的用户的列表,并将它保存到/home/student/ansible
  • 在本次考试中使用在其他位置创建的密码库 /home/student/ansible/locker.yml,
  • 创建名为/home/student/ansible/users.yml 的 playbook,
  • 从而按以下所述创建用户帐户:

任务要求

  • 职位描述为 developer 的用户应当:
  1. 在 dev 和 test 主机组中的受管节点上创建
  2. 从 pw_developer 变量分配密码
  3. 是附加组 student 的成员
  4. 新增要求设置密码有效期为30天
  • 职位描述为 manager 的用户应当:
  1. 在 prod 主机组中的受管节点上创建
  2. 从 pw_manager 变量分配密码
  3. 是附加组 devops 的成员
  4. 新增要求设置密码有效期为30天
  • 密码应采用 SHA512 哈希格式。
  • 您的 playbook 应能够在本次考试中使用在其他位置创建的库密码文件/home/student/ansible/secret.txt 正常运行

15.更新 Ansible库的密钥

  • 按照下方所述,更新现有 Ansible 库的密钥:

任务要求

  1. http://172.25.250.250/ansible2.8/salaries.yml 下载 Ansible 库到 /home/student/ansible
  2. 当前的库密码为 AAAAAAAAA
  3. 新的库密码为 BBBBBBBBB
  4. 库使用新密码保持加密状态

16.编写playbook创建cron计划任务

  • 编写名cron.yml的playbook,在指定主机组servera上运行
  • 这道题playbook叫什么名字不重要啊,反正都是复制,指定的主机组还是要看准了的

任务要求

  1. 基于student用户创建cron任务
  2. 每隔两分钟执行logger “hello rhce”

注意:住过是其他时间,就帮助里找阐述就行了

Cisco Catalyst 9000系列交换机配置StackWise Virtual

新的Cisco Catalyst 9000系列交换机支持StackWise Virtual。此功能允许使用10或40 Gbps端口堆叠相同型号的两个交换机。

像传统的StackWise模型一样,当堆叠交换机时,它们成为单个逻辑单元,从而既可以集中配置,也可以配置多机箱以太网通道。其优点在于,在这种情况下,可以在较远的设备之间进行堆叠,因为使用的是光纤而不是堆叠线。在两个C9400之间配置Virtual StackWise之前,重要的是要了解:

  • 交换机必须为相同型号。

  • 交换机必须具有相同的license类型,相同的软件版本和SDM模板。

  • 引擎必须位于两个交换机的同一插槽中(例如,使用9407时,两个机箱的插槽3)。

  • Cisco Catalyst 9404R和Cisco Catalyst 9407R支持(16.11.1 and later can support StackWise Virtual on C9410R chassis and all the ports used for configuring a StackWise Virtual Link (SVL). Whether it is a port on the supervisor module or a port on the linecard.)

  • 在Supervisor 1(C9400-SUP-1)和Supervisor 1XL(C9400-SUP-1XL)上受支持。在Supervisor 1上,您需要C9400-SUP-UPG-LIC许可证。

  • StackWise Virtual Link(SVL)需要在Supervisor上建立10或40 Gigabit连接。

  • 每个机箱仅支持一个引擎来做StackWise Virtual。如果您安装了两个引擎,则第二个引擎powered off状态。

  • VLAN 4094由StackWise Virtual使用,因此不能用于任何其他目的。

  • 手动完成StackWise Virtual的配置,双活检测DAD(dual-active detection)和SVL(StackWise Virtual Link),并且在每个步骤之后都需要重新启动交换机。

  • 仅支持思科收发器(Only Cisco Transceiver Modules are supported.)。

  • 最低支持版本为IOS-XE 16.9.1。

  • 最多可以有80 Gbps的带宽,即每个机箱8个10 Gbps的端口或2个40 Gbps的端口。

  • 配置StackWise Virtual之后,接口名称更改为标准chassis/slot/bay/port格式。

在9500系列交换机中需注意:

  • 9500-40X 和 C9500-16X的上联口网络模块, 不支持配置SVL链路 (StackWiseVirtual links).
  • 4x10G breakout cable也不支持配置SVL链路.
  • SVL链路不支持10G和40G链路混合使用.
  • SVL链路无法作为SPAN的源和目的接口

当我们两个机箱配置StackWise Virtual时,一个是Active交换机,另一个是Standby交换机,其中Active交换机控制这两个交换机以及控制协议(第2层和第3层)。
数据包由两个机箱转发。 并且在发生故障的情况下,Standby交换机将接管Active的功能。

Stackwise Virtual由3个部分组成

  • Stackwise Virtual Link
  • Dual Active DetectionLink
  • Multi-ChassisEther-channel

StackWiseVirtual links(SVL)

2台交换机之间,可以使用10G或者40G接口直连, 配置为SVL链路.

SVL上所有的数据包会被添加64-Byte SV包头(StackWise Virtual Header).只有开启了SV的交换机才能识别SVH.

以下场景,流量会通过SVL转发.

-在一个VLAN中泛洪的L2流量(即便做了双dual-home连接)

-数据包进入standby交换机后, 需要送到Active交换机的CPU进行处理.

-数据包的目的地在SVL另一端的设备上.

Dual-Active Detection双活检测

如果Standby交换机检测到SVL 链路完全中断,则认为Active交换机发生故障,并将接管成为Active交换机.

然而, 如果原始Active交换机仍在正常运行中,则这两台交换机现在都将是Active交换机。这种情况称为双活(Dual-Active). 此时网络中会有2台交换机具有相同的IP地址. SSH key. 和 STP bridge ID,造成网络的不稳定. SV检测到双活发生,会采取对应的恢复措施.Dual-active-detection 链路(DAD) 是用于缓解此问题的专用链路.

当SVL 故障了, standby交换机会接管成为active交换机,而原先的active交换机会进入recovery模式, 它会shutdown 所有非SVL接口.

配置:

第一步是在两个交换机上创建具有相同ID的StackWise domain。 优先级最高的交换机将是Active交换机。

1
2
3
4
5
6
7
8
9
10
11
12
SW01#switch 1 priority 5 
SW01#conf t
SW01(config)#stackwise-virtual
SW01(config-stackwise-virtual)#domain 10
SW01(config-stackwise-virtual)#end

SW02#switch 1 priority 10
SW02#switch 1 renumber 2
SW02#conf t
SW02(config)#stackwise-virtual
SW02(config-stackwise-virtual)#domain 10
SW02(config-stackwise-virtual)#end

然后,我们需要配置将成为SVL的接口。 在此示例中,我们使用两个10 GigabitEthernet端口。

1
2
3
4
5
6
7
8
9
SW01#conf t
SW01(config)#interface range TenG3/0/1 - 2
SW01(config-if)stackwise-virtual link 1
SW01(config-if)#end

SW02#conf t
SW02(config)#interface range TenG3/0/1 - 2
SW02(config-if)stackwise-virtual link 1
SW02(config-if)#end

最后,配置dual-active detection(DAD)将使用的接口。 最多可以配置四个。

1
2
3
4
5
6
7
8
9
SW01#conf t
SW01(config)#interface GigabitEthernet1/1/0/1
SW01(config-if)stackwise-virtual dual-active-detection
SW01(config-if)#end

SW02#conf t
SW02(config)#interface GigabitEthernet1/1/0/1
SW02(config-if)stackwise-virtual dual-active-detection
SW02(config-if)#end

所有配置完成之后保存重启

1
2
3
4
5
BrainSW01#wr mem
BrainSW01#reload

BrainSW02#wr mem
BrainSW02#reload

可以使用以下命令验证配置

1
2
3
4
5
6
7
8
show switch
show stackwise-virtual
show stackwise-virtual switch
show stackwise-virtual link
show stackwise-virtual bandwidth
show stackwise-virtual neighbors
show stackwise-virtual dual-active-detection
show stackwise-virtual dual-active-detection pagp

为 CentOS 和衍生产品安装 ONLYOFFICE Docs 社区版

介绍

Community Edition允许您在本地服务器上安装ONLYOFFICE Docs并将在线编辑器与ONLYOFFICE 协作平台其他流行系统集成

ONLYOFFICE Docs是一个在线办公套件,包括文本、电子表格和演示文稿的查看器和编辑器,完全兼容 Office Open XML 格式:.docx、.xlsx、.pptx,并支持实时协作编辑。

功能性

  • 文档编辑器
  • 电子表格编辑器
  • 演示文稿编辑器
  • 移动网络查看器
  • 协作编辑
  • 象形文字支持
  • 支持所有流行格式:DOC、DOCX、TXT、ODT、RTF、ODP、EPUB、ODS、XLS、XLSX、CSV、PPTX、HTML

请参阅ONLYOFFICE Docs Community Edition可用功能的详细列表

将其与ONLYOFFICE 组集成,您将能够:

  • 分享文件;
  • 管理对文档的访问权限;
  • 在网站上嵌入文档;
  • 查看和编辑存储在连接到 ONLYOFFICE 的 Drive、Box、Dropbox、OneDrive、OwnCloud 上的文件。

本指南将向您展示如何将ONLYOFFICE Docs Community Edition Linux 版本安装到您的机器上。

系统要求

  • 中央处理器
    双核2 GHz或更高

  • 内存
    2 GB或更多

  • 硬盘
    至少40 GB的可用空间

  • 其他要求
    至少4 GB的交换空间

  • 操作系统
    RHEL 7或 CentOS 7

  • 其他要求
    PostgreSQL: version 12.9 or later
    NGINX: version 1.3.13 or later
    RabbitMQ

安装依赖项

安装最新的 NGINX 包版本

要为 RHEL/CentOS 设置 yum 存储库,请创建名为/etc/yum.repos.d/nginx.repo以下内容的文件:

1
2
3
4
5
6
7
8
9
10
11
12
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key

官方说明

安装NGINX

1
sudo yum install nginx

之后编辑/etc/nginx/nginx.conf NGINX配置文件,使其看起来如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
user                  nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
安装 EPEL 存储库
1
sudo yum install epel-release
安装和配置 PostgreSQL

安装包含在您的 CentOS 版本中的 PostgreSQL版本:

1
sudo yum install postgresql postgresql-server

如果您想从 PostgreSQL 存储库安装其他PostgreSQL版本,请参阅官方 PostgreSQL 文档以获取更多详细信息。

初始化 PostgreSQL 数据库

1
2
sudo service postgresql initdb 
sudo chkconfig postgresql on

打开IPv4 和 IPv6 localhost的“信任”身份验证方法

/var/lib/pgsql/data/pg_hba.conf在文本编辑器中打开文件。

找到host all all 127.0.0.1/32 ident字符串并将其替换为以下字符串:

1
host    all             all             127.0.0.1/32            trust

然后找到host all all ::1/128 ident字符串并将其替换为以下字符串:

1
host    all             all             ::1/128                 trust

保存更改。

重启 PostgreSQL 服务

1
sudo service postgresql restart

创建 PostgreSQL 数据库和用户

您可以指定任何用户名和密码。

首先运行命令

1
cd /tmp

以防止could not change directory to "/root"从 root 运行时发出警告。然后必须创建数据库和用户:

1
2
3
sudo -u postgres psql -c "CREATE DATABASE onlyoffice;"
sudo -u postgres psql -c "CREATE USER onlyoffice WITH password 'onlyoffice';"
sudo -u postgres psql -c "GRANT ALL privileges ON DATABASE onlyoffice TO onlyoffice;"
安装 RabbitMQ
1
sudo yum install rabbitmq-server

在 CentOS 8 上安装 RabbitMQ,请参考官方说明

启动rabbitmq服务并启用开机启动:

1
2
sudo service rabbitmq-server start
sudo systemctl enable rabbitmq-server
安装 mscorefonts

安装cabextractxorg-x11-font-utils包:

1
sudo yum install cabextract xorg-x11-font-utils

对于 CentOS 7.8(2003),fontconfig还需要:

1
sudo yum install fontconfig

安装 msttcore 字体包:

1
sudo rpm -i https://deac-ams.dl.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-installer-2.6-1.noarch.rpm

安装 ONLYOFFICE 文档

添加 ONLYOFFICE 文档存储库

使用以下命令添加 yum ONLYOFFICE Docs存储库:

1
sudo yum install https://download.onlyoffice.com/repo/centos/main/noarch/onlyoffice-repo.noarch.rpm
安装 ONLYOFFICE 文档

执行以下命令:

1
sudo yum install onlyoffice-documentserver

运行相关服务并在启动时启用它们的启动:

1
2
3
4
sudo service supervisord start
sudo systemctl enable supervisord
sudo service nginx start
sudo systemctl enable nginx

之后,ONLYOFFICE Docs将作为一个进程运行。该软件包将像任何其他 rpm 软件包一样进行更新。

更改默认 ONLYOFFICE 文档端口

默认情况下, ONLYOFFICE Docs使用端口****80侦听传入连接。从版本4.3开始,如果您打算使用ONLYOFFICE Docs的端口而不是默认端口,则可以更改它。

如果要更改默认端口,请确保它对传入/传出连接打开。请参阅ONLYOFFICE Docs使用的端口的完整列表

为此,您需要编辑运行命令的DS_PORT环境变量:

1
export DS_PORT=<PORT_NUMBER>

请写端口号,而不是<PORT_NUMBER>上面命令中的。

警告如果要将ONLYOFFICE Docs协议更改为 HTTPS,请不要将端口更改为443,而是使用此指令

之后,您可以继续配置ONLYOFFICE Docs

配置 ONLYOFFICE 文档

运行配置脚本

运行documentserver-configure.sh脚本:

1
bash documentserver-configure.sh

您将被要求指定 PostgreSQL和 RabbitMQ 连接参数。使用以下数据:

For PostgreSQL:

  • Host: localhost
  • Database: onlyoffice
  • User: onlyoffice
  • Password: onlyoffice

For RabbitMQ:

  • Host: localhost

  • User: guest

  • Password: guest

添加防火墙例外
1
2
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload
禁用 SELinux

/etc/selinux/config使用任何文本编辑器打开文件,将SELINUX=enforcingSELINUX=permissive字符串替换为SELINUX=disabled一个并保存更改。

重新启动服务器以使更改生效。

在浏览器中启动 ONLYOFFICE Docs

配置完成后,您可以在浏览器地址栏中输入http://localhost以打开ONLYOFFICE Docs欢迎页面,您将在其中找到有关如何使用提供的 API启用文档示例或将在线编辑器集成到 Web 应用程序中的进一步说明.

要将ONLYOFFICE Docs连接到ONLYOFFICE Groups,请参阅此说明

虚拟机 /dev/mapper/centos-root 动态扩容

1
2
3
4
5
6
7
8
9
[root@bogon ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 6.2G 6.2G 51M 100% /
devtmpfs 908M 0 908M 0% /dev
tmpfs 920M 0 920M 0% /dev/shm
tmpfs 920M 8.6M 911M 1% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
/dev/sda1 1014M 175M 840M 18% /boot
tmpfs 184M 0 184M 0% /run/user/0

该LVM分区动态扩容分两种情况:

一、扩容原有磁盘/dev/sda

首先在虚拟机控制台扩容已有的sda后

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 1 fdisk /dev/sda 对/dev/sda磁盘进行操作(新建分区及格式化)
2 n
3 p
4 回车 默认分区号;
5 回车 默认磁盘创建开始位置;
6 回车 默认磁盘创建结束位置;
7 t 设置分区类型
8 8e LVM类型
9 w 保存
10 重启
11 ls /dev/sd* 会发现多出一个/dev/sda3
12 lvm 进入lvm管理
13 lvm>pvcreate /dev/sda3 创建逻辑卷
14 lvm>vgextend centos /dev/sda3 //将初始化过的分区加入到虚拟卷组 centos
15 lvm>vgdisplay -v
16 lvm>lvextend -L +100G /dev/mapper/centos-root
17 lvm>pvdisplay //查看卷容量
18 lvm>quit
19 使用命令xfs_growfs /dev/mapper/centos-root扩展容量
20 df -h 进行查看扩容之后的

二、新加磁盘进行扩容

在虚拟机控制台新加磁盘后,并重启虚拟机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[root@bogon ~]# ls /dev/sd* 会发现多出一个/dev/sdb
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb
[root@bogon ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <7.00g 0
[root@bogon ~]# pvcreate /dev/sdb
WARNING: ext4 signature detected on /dev/sdb at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/sdb.
Physical volume "/dev/sdb" successfully created.
[root@bogon ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <7.00g 0
[root@bogon ~]# vgextend centos /dev/sdb
Volume group "centos" successfully extended
[root@bogon ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 2 2 0 wz--n- 26.99g <20.00g
[root@bogon ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <6.20g
swap centos -wi-ao---- 820.00m
[root@bogon ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 6.2G 6.2G 43M 100% /
devtmpfs 908M 0 908M 0% /dev
tmpfs 920M 0 920M 0% /dev/shm
tmpfs 920M 8.6M 911M 1% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
/dev/sda1 1014M 175M 840M 18% /boot
tmpfs 184M 0 184M 0% /run/user/0
[root@bogon ~]# lvextend -L +20G /dev/mapper/centos-root
Insufficient free space: 5120 extents needed, but only 5119 available
[root@bogon ~]# lvextend -L +19G /dev/mapper/centos-root
Size of logical volume centos/root changed from <6.20 GiB (1586 extents) to <16.20 GiB (4146 extents).
Logical volume centos/root successfully resized.
[root@bogon ~]# xfs_growfs /dev/mapper/centos-root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=406016 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=1624064, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 1624064 to 4245504
[root@bogon ~]# df -h

方案介绍:

本方案实现了日志文件转发备份,日志文件关键词过滤告警的功能

主要用到了rsyslog,mailx工具,以及shell脚本配合执行。使用rsyslog进行日志的转发与备份,并将关键词过滤存储,shell脚本对过滤文件进行监控,并将告警日志以年月日时间的方式存储至指定目录,最后使用mailx进行告警邮件发送。

操作流程:

1、 查询是否安装rsyslog软件

输入rpm -q rsyslog即可查询,如图所示,系统默认安装了8.24版本的rsyslog

image-20220221164153276
如果未安装或者版本过低的,则需要进行安装或者升级
yum install rsyslog -y
image-20220221164233641
2、 安装中文语言支持
为确保系统对中文语言的兼容性,需要安装中文语言支持
yum install kde-l10n-Chinese -y
image-20220221164324142
3、 开放防火墙端口
日志服务默认端口为tcp/udp514,需对端口进行放行,并重新加载防火墙

1
2
3
firewall-cmd --add-port=514/tcp –permanent
firewall-cmd --add-port=514/udp --permanent
firewall-cmd –reload

4、 修改rsyslog配置文件
rsyslog配置文件位于/etc/rsyslog.conf,需对其进行修改
vi /etc/rsyslog.conf
默认情况下,rsyslog不接受其他设备发出的日志,现在将接受功能与转发功能都打开,并且配置日志过滤
在MODULES项中找到这Provides TCP syslog reception ,Provides UDP syslog reception两个子项,并将红框内四行前面的#号去掉,如图所示
image-20220221170147434
找到RULES项 ,在下方插入

1
2
3
if $msg contains '病毒' then {
​ -/var/log/logfile.log
}

其中,‘ ‘内的内容为需要筛选的关键字,/var/log/logfile.log为文件名与路径,都可以自行更改image-20220221170223929

找到begin forwarding rule项,在下方插入
*.* @@192.168.1.1:514
其中,@@表示使用tcp转发日志,@表示使用udp转发日志,ip地址为接受日志的服务器地址,端口514一般不需要改变
image-20220221170331556

5、 重启rsyslog
重启rsyslog使配置生效,并查看rsyslog是否运行正常
systemctl restart rsyslog
image-20220221171323447

当显示active时说明服务运行正常
systemctl status rsyslog
image-20220221171410709

6、 测试
生成一段log ,在log中间加入关键词,发现log已经被储存到了指定文件中image-20220221171443301

7、 安装mailx
yum install mailx -y
image-20220221171504912
检测mailx安装情况
rpm -q mailx
image-20220221171707048

8、 编辑shell脚本

创建脚本文件,文件名自定义,存放目录自定义
touch warning.sh
vi warning.sh
脚本内容附在文末,需要自定义日志的存放位置以及输出位置,只需变动含有注释的四行,编辑完成后粘贴至warning.sh中。需要注意的是,所有脚本中指定的文件目录,都必须存在,如果目录不存在请先创建目录。
image-20220221171750303

脚本编辑完成后赋予其执行权限
chmod +x warning.sh
image-20220221171819350
尝试执行warning.sh 如果没有报错,则可以进行下一步
image-20220221171826428

9、 添加计划任务
查看cron是否运行正常
systemctl status crond

image-20220221171905809

创建计划任务,每分钟执行一次shell脚本,脚本路径自定义,这里使用的脚本路径为/root/warning.sh
crontab -e
*/1 * * * * sh /root/warning.sh
image-20220221171919989

脚本执行后如有含符合的关键字的日志出现,就会在指定目录自动生成日志文件
image-20220221171927359

脚本文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/bin/bash  
#receiver mail list
export receiver_mail_address=localhost #发送邮件的目的地址
#application log file location
export applicaton_log_8081=/var/log/logfile.log #此项为rsyslog过滤日志的位置
export applicaton_log_8088=/var/log/cron
export collect_error_log_8081=/var/log/error_out #告警日志输出位置,日志会自动以日期时间命名存储
export collect_error_log_8088=/var/log/test
export mail_content_file=/root/mail_log.txt
export line_switch_char="<br>"
export env_identifier="Product"
export keyword4app_exception="病毒" #关键词设置,用于过滤日志的关键词
export keyword4sql_exception="nested exception is com.mysql.jdbc."
export keyword4jdk_exception="java.*.Exception"
# Note how an string variable is applcation to grep statement
export error_num4app_8081=`grep "$keyword4app_exception" ${applicaton_log_8081} |wc -l`
export error_num4sql_8081=`grep "$keyword4sql_exception" ${applicaton_log_8081} |wc -l`
export error_num4jdkexception_8081=`grep "$keyword4jdk_exception" ${applicaton_log_8081} |wc -l`
export error_num4app_8088=`grep "$keyword4app_exception" ${applicaton_log_8088} |wc -l`
export error_num4sql_8088=`grep "$keyword4sql_exception" ${applicaton_log_8088} |wc -l`
export error_num4jdkexception_8088=`grep "$keyword4jdk_exception" ${applicaton_log_8088} |wc -l`
#this operation is overriding
echo "【${env_identifier}】${line_switch_char}" > ${mail_content_file}
#this operation is appending
# decide whether app log 8081 has error or not
if [ ${error_num4app_8081} -gt 0 ] || [ ${error_num4sql_8081} -gt 0 ] || [ ${error_num4jdkexception_8081} -gt 0 ]
then
echo "The application ${applicaton_log_8081} has $[${error_num4app_8081}+${error_num4sql_8081}+${error_num4jdkexception_8081}] errors.${line_switch_char} The detail error as the following:${line_switch_char}" >> ${mail_content_file}
if [ ${error_num4app_8081} -gt 0 ]
then
grep "$keyword4app_exception" ${applicaton_log_8081} -A 5 >> ${mail_content_file}
fi
if [ ${error_num4sql_8081} -gt 0 ]
then
grep "$keyword4sql_exception" ${applicaton_log_8081} -A 5 >> ${mail_content_file}
fi
if [ ${error_num4jdkexception_8081} -gt 0 ]
then
grep "$keyword4jdk_exception" ${applicaton_log_8081} -A 5 >> ${mail_content_file}
fi
cp ${applicaton_log_8081} ${collect_error_log_8081}/web_error_`date +%Y%m%d_%H%M`.log
echo "" > ${applicaton_log_8081}
fi
# decide whether app log 8088 has error or not
if [ ${error_num4app_8088} -gt 0 ] || [ ${error_num4sql_8088} -gt 0 ] || [ ${error_num4jdkexception_8088} -gt 0 ]
then
echo "The application ${applicaton_log_8088} has $[${error_num4app_8088}+${error_num4sql_8088}+${error_num4jdkexception_8088}] errors.${line_switch_char} The detail error as the following:${line_switch_char}" >> ${mail_content_file}
if [ ${error_num4app_8088} -gt 0 ]
then
grep "$keyword4app_exception" ${applicaton_log_8088} -A 5 >> ${mail_content_file}
fi
if [ ${error_num4sql_8088} -gt 0 ]
then
grep "$keyword4sql_exception" ${applicaton_log_8088} -A 5 >> ${mail_content_file}
fi
if [ ${error_num4jdkexception_8088} -gt 0 ]
then
grep "$keyword4jdk_exception" ${applicaton_log_8088} -A 5 >> ${mail_content_file}
fi
cp ${applicaton_log_8088} ${collect_error_log_8088}/web_error_`date +%Y%m%d_%H%M`.log
echo "" > ${applicaton_log_8088}
fi
# decide whether send mail to monitor or not
if [ ${error_num4app_8081} -gt 0 ] || [ ${error_num4app_8088} -gt 0 ] || [ ${error_num4sql_8081} -gt 0 ] || [ ${error_num4sql_8088} -gt 0 ] || [ ${error_num4jdkexception_8081} -gt 0 ] || [ ${error_num4jdkexception_8088} -gt 0 ]
then
mail -s "System Monitor Log" ${receiver_mail_address} < ${mail_content_file}
fi

docker安装qbittorrent教程

镜像文件名:linuxserver/qbittorrent

准备config文件存放路径与下载文件路径

1
2
mkdir -pv /data
mkdir -pv /data/config

拉取qbittorrent镜像

1
docker pull linuxserver/qbittorrent

安装镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
docker run -d \
--name=qbittorrent \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-e UMASK_SET=022 \
-e WEBUI_PORT=8080 \
-p 54321:54321 \
-p 54321:54321/udp \
-p 8080:8080 \
-v /data/config:/config \
-v /data:/downloads \
--restart unless-stopped \
linuxserver/qbittorrent

默认6881端口不可用,安装完成后需手动更改端口

centos开放端口:

1
2
3
4
firewall-cmd --zone=public --add-port=54321/tcp --permanent
firewall-cmd --zone=public --add-port=54321/udp --permanent
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload # 配置立即生效

ubuntu开放端口:

1
2
3
sudo ufw allow 54321
sudo ufw allow 8080/tcp
sudo ufw reload # 配置立即生效