RAID
简介
RAID( Redundant Array of Independent Disks )即独立磁盘冗余阵列,通常简称为磁盘阵列。RAID技术将多个单独的物理硬盘以不同的方式组合成一个逻辑磁盘,从而提高硬盘的读写性能和数据安全性。
数据组织形式
分块:将一个分区分成多个大小相等的、地址相邻的块,这些块称为分块。由它组成条带。
条带:同一磁盘阵列中多个磁盘驱动器上相同的位置(或者说是相同编号)的分块。
热备
当冗余的RAID组中某个硬盘失效时,在不干扰当前RAID系统的正常使用情况下,用RAID系统中另一个正常的备用硬盘自动顶替失效硬盘,及时保证RAID系统的冗余性。
分类
全局式:备用硬盘为系统中所有的冗余RAID组共享
专用式:备用硬盘为系统中某一组冗余RAID组专用
RAID级别
RAID 0
简单的、无数据校验的数据条带化技术;RAID0 将所在磁盘条带化后组成大容量的存储空间,将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并读访问。具有低成本、高读写性能、100% 的高存储空间利用率等优点。
但是不提供数据冗余保护,一旦数据损坏,将无法恢复。
RAID 1
数据镜像,无校验;将数据完全一致地分别写到工作磁盘和镜像磁盘,磁盘空间利用率为50%。RAID1 在数据写入时,响应时间会有所影响,但是读数据的时候没有影响。
RAID1 提供了最佳的数据保护,一旦工作磁盘发生故障,系统自动从镜像磁盘读取数据,不会影响用户工作。
RAID 5
数据条带化,校验信息分布式存放;采用磁盘上同时存储数据和校验数据,数据块和对应的校验信息存保存在不同的磁盘上,当一个数据盘损坏时,系统可以根据同一条带的其他数据块和对应的校验数据来重建损坏的数据。
RAID 6
数据条带化,分布式校验并提供两级冗余;可以保护阵列中同时出现两个磁盘失效时,阵列仍能够继续工作,不会发生数据丢失。
横向校验盘:P1 – P4为各个数据盘中横向数据的校验信息。
P1 = A1 XOR A2 XOR A3 XOR A4。
斜向校验盘:DP1 – DP4为各个数据盘及横向校验盘的斜向数据的校验信息。
DP1 = A1 XOR A6 XOR A11 XOR A16
DP2 = A2 XOR A7 XOR A12 XOR P4
DP3 = A3 XOR A8 XOR P3 XOR A13
DP4 = A4 XOR P2 XOR A9 XOR A14
RAID 10
先做RAID 1,后做RAID 0
RAID 01
先做RAID 0,后做RAID 1
RAID 50
先做RAID 5,后做RAID 0。
常用RAID等级技术对比
RAID等级 | 需要磁盘数 | 可用容量 | 允许坏盘数量 | 读性能 | 写性能 | 目的 |
RAID 0 | n >=1 | 100% | 0 | n | n | 增加容量 |
RAID 1 | n >=2 | 50% | n-1 | n | 1 | 最高安全性 |
RAID 5 | n >=3 | n-1 | 1 | n-1 | n-1 | 性价比高,最小预算获得最高容量 |
RAID 6 | n >=4 | n-2 | 2 | n-2 | n-2 | 同RAID5,但比RAID5更安全 |
RAID 10 | 2n(n>=2)>=4 | 50% | n/2 |
LVM缩容扩容
实现基础lvm
新增一块20G硬盘sda
从/dev/sda划分10G
创建PV /dev/sda1
创建VG wenzi
创建LV ceshi
同样的操作创建出VG aabb 和LV ccdd
创建挂载点
将 /dev/mapper/wenzi-ceshi 格式化为xfs文件系统,并挂载至 dir1
将 /dev/mapper/aabb-ccdd 格式化为ext4文件系统,并挂载至 dir2
查看现状
拓展逻辑卷 /dev/mapper/aabb-ccdd
从 /dev/sda 再划分5G空间,最终加给 /dev/mapper/aabb-ccdd
方法一:lvextend 和 resize2fs
拓展只使用2.5G
方法二:lvresize -r -l
拓展使用剩余2.5G
缩减逻辑卷
缩减有数据损坏的风险,建议先备份再缩减,不支持在线缩减,要先取消挂载;xfs文件系统不支
持缩减
ext4文件系统-/dev/mapper/aabb-ccdd
方法一:resize2fs 和 lvreduce
缩减为3G
1、取消挂载
2、文件系统检测
3、缩减文件系统到指定大小
4、缩减逻辑卷到指定大小
5、重新挂载
方法二:lvreduce
缩减为1G
1、取消挂载
2、同时缩减文件系统和逻辑卷
3、重新挂载
xfs文件系统-/dev/mapper/wenzi-ceshi
xfs文件系统不支持缩减,可变相实现缩减
下载工具 xfsdump
[root@wenzi ~]#apt install xfsdump
创建xfs文件系统文件数据
[root@wenzi ~]#echo "123" > /data/dir1/123.txt
备份xfs文件系统数据,备份文件为 data.img
[root@wenzi ~]#xfsdump -f data.img /data/dir1 挂载点后不要加 / 否则会报错
[root@wenzi ~]#ls
data.img snap
卸载文件系统
[root@wenzi ~]#umount /data/dir1
缩减逻辑卷
[root@wenzi ~]#lvreduce -L 7G /dev/mapper/wenzi-ceshi
WARNING: Reducing active logical volume to 7.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce wenzi/ceshi? [y/n]: y
Size of logical volume wenzi/ceshi changed from <10.00 GiB (2559 extents) to 7.00 GiB (1792 extents).
Logical volume wenzi/ceshi successfully resized.
重建文件系统
[root@wenzi ~]#mkfs.xfs -f /dev/mapper/wenzi-ceshi
meta-data=/dev/mapper/wenzi-ceshi isize=512 agcount=4, agsize=458752 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=1835008, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
重新挂载
[root@wenzi ~]#mount /dev/mapper/wenzi-ceshi /data/dir1
还原数据
[root@wenzi ~]#xfsrestore -f data.img /data/dir1
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.6 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description:
xfsrestore: hostname: wenzi
xfsrestore: mount point: /data/dir1
xfsrestore: volume: /dev/mapper/wenzi-ceshi
xfsrestore: session time: Tue Dec 19 14:29:27 2023
xfsrestore: level: 0
xfsrestore: session label: ""
xfsrestore: media label: ""
xfsrestore: file system id: aae5658f-02f7-4744-a28e-0f6092294ea1
xfsrestore: session id: dddee877-fdb8-4bec-a413-84225c75ae68
xfsrestore: media id: 23726ccb-2b37-4562-8d47-471bfad8534d
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 1 directories and 1 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore: stream 0 /root/data.img OK (success)
xfsrestore: Restore Status: SUCCESS
[root@wenzi ~]#cat /data/dir1/123.txt
123
程序包管理器
常见程序包管理器
- dpkg
- rpm
包内容
- 二进制文件
- 库文件
- 配置文件
- 帮助文件
软件包获取方式
- 系统光盘或官网
- 第三方,如epel源
- 搜索引擎 RPM Search、Welcome to the RPM repository on fr2.rpmfind.net等
RPM
全称 RedHat Package Manager ,红帽软件包管理器。是一种预先编译并打包成为rpm格式再加以安装的方式;rpm安装会产生记录在 /varlib/rpm 中的数据库。yum底层是调用rpm去安装软件的。
安装
命令:rpm -ivh 软件包1.rpm 软件包2.rpm …
-i:install 安装的意思
-v:查看安装信息
-h:显示安装进度
--nodeps:忽略依赖关系
升级
命令:rpm -[U|F]vh [安装选项] 软件包.rpm
-Uvh:若安装有旧版程序包,则"升级",如果不存在旧版程序包,则"安装"
-Fvh:若安装有旧版程序包,则"升级", 如果不存在旧版程序包,则不执行升级操作
安装选项:
--oldpackage:降级
--force:强制安装
注意:
- 不要对内核做升级操作;Linux支持多内核共存,有需要直接安装新版内核
- 如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件不会直接覆盖老版本的配置文件,而把新版本文件重命名(FILENAME.rpmnew)后保留
查询
查询是否安装过tree软件
查询tree安装后的目录与文件
查询tree软件包详细信息
找出httpd的配置文件
卸载
rpm -e 软件名
由于RPM文件常常会安装/移除/升级等,某些动作或许可能会导致RPM数据库/var/lib/rpm/ 内的文件破损。果真如此的话,可以使用–rebuilddb 这个选项来重建数据库喔
rpm –rebuilddb
YUM
yum/dnf 工作原理
yum/dnf是基于C/S模式
- yum服务器存放rpm包和相关包的元数据库
- yum客户端访问yum服务器进行安装或查询
先在yum服务器上创建 yum repository(仓库),在仓库中事先存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行安装包时,会自动下载repodata中的元数据,查询元数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并安装
命令格式
yum 选项 参数 软件名
选项:
-y:当需要用户输入时,自动输入yes响应
-q:静默模式
--nogpgcheck:禁止gpg check
--enablerepo=仓库名:临时启用此处指定的repo,支持通配符
--disablerepo=仓库名:临时启用此处指定的repo,若和--enablerepo同时用,处于后面的生效
–installroot=完整路径:将软件安装在 完整路径 ,而不使用默认路径
显示仓库列表:yum repolist
[root@wenzi ~]#yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
repo id repo name status
base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com 10,072
extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com 518
updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com 5,527
repolist: 16,117
[root@wenzi ~]#yum --disablerepo=extra* repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* updates: mirrors.aliyun.com
repo id repo name status
base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com 10,072
updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com 5,527
仓库缓存
清除仓库缓存
缓存位于 /var/cache/yum/xxx
[root@wenzi ~]#yum clean all
生成仓库缓存
[root@wenzi ~]#yum makecache
显示yum管理的所有软件:yum list
[root@centos8 ~]#yum list | head
Last metadata expiration check: 1:11:32 ago on Wed 20 Dec 2023 12:48:07 AM CST.
Installed Packages
GConf2.x86_64 3.2.6-22.el8 @AppStream
ModemManager.x86_64 1.10.8-2.el8 @anaconda
ModemManager-glib.x86_64 1.10.8-2.el8 @anaconda
NetworkManager.x86_64 1:1.22.8-4.el8 @anaconda
NetworkManager-adsl.x86_64 1:1.22.8-4.el8 @anaconda
NetworkManager-bluetooth.x86_64 1:1.22.8-4.el8 @anaconda
NetworkManager-config-server.noarch 1:1.22.8-4.el8 @anaconda
NetworkManager-libnm.x86_64 1:1.22.8-4.el8 @anaconda
只查看已安装的包
[root@centos8 ~]#yum list installed | tail -n 10
xz-libs.x86_64 5.2.4-3.el8 @anaconda
yajl.x86_64 2.1.0-10.el8 @AppStream
yelp.x86_64 2:3.28.1-3.el8 @AppStream
yelp-libs.x86_64 2:3.28.1-3.el8 @AppStream
yelp-tools.noarch 3.28.0-3.el8 @AppStream
yelp-xsl.noarch 3.28.0-2.el8 @AppStream
yum.noarch 4.2.17-6.el8 @anaconda
zenity.x86_64 3.28.1-1.el8 @AppStream
zip.x86_64 3.0-23.el8 @anaconda
zlib.x86_64 1.2.11-13.el8 @anaconda
查看可安装的包
[root@centos8 ~]#yum list available | head
Last metadata expiration check: 1:14:51 ago on Wed 20 Dec 2023 12:48:07 AM CST.
Available Packages
3proxy.x86_64 0.8.13-1.el8 epel
6tunnel.x86_64 0.13-1.el8 epel
AMF-devel.noarch 1.4.30-1.el8 epel
AMF-samples.noarch 1.4.30-1.el8 epel
Agda.x86_64 2.5.3-14.el8 epel
AusweisApp2.x86_64 1.22.3-1.el8 epel
AusweisApp2-data.noarch 1.22.3-1.el8 epel
AusweisApp2-doc.noarch 1.22.3-1.el8 epel
查看可升级的包
[root@centos8 ~]#yum list updates | head
Last metadata expiration check: 1:15:26 ago on Wed 20 Dec 2023 12:48:07 AM CST.
Available Upgrades
ModemManager.x86_64 1.10.8-4.el8 base
ModemManager-glib.x86_64 1.10.8-4.el8 base
NetworkManager.x86_64 1:1.32.10-4.el8 base
NetworkManager-adsl.x86_64 1:1.32.10-4.el8 base
NetworkManager-bluetooth.x86_64 1:1.32.10-4.el8 base
NetworkManager-config-server.noarch 1:1.32.10-4.el8 base
NetworkManager-libnm.x86_64 1:1.32.10-4.el8 base
NetworkManager-team.x86_64 1:1.32.10-4.el8 base
查看指定的包
[root@centos8 ~]#yum list nginx*
Last metadata expiration check: 1:16:02 ago on Wed 20 Dec 2023 12:48:07 AM CST.
Available Packages
nginx.x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream
nginx-all-modules.noarch 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream
nginx-filesystem.noarch 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream
nginx-mod-http-image-filter.x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream
nginx-mod-http-perl.x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream
nginx-mod-http-xslt-filter.x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream
nginx-mod-mail.x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream
nginx-mod-stream.x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream
安装软件:yum install 包名
[root@centos8 ~]#yum -y install nginx.x86_64
Last metadata expiration check: 1:19:21 ago on Wed 20 Dec 2023 12:48:07 AM CST.
Dependencies resolved.
=============================================================================================================================================================================================
Package Architecture Version Repository Size
=============================================================================================================================================================================================
Installing:
nginx x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream 570 k
Installing dependencies:
nginx-all-modules noarch 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream 23 k
nginx-filesystem noarch 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream 24 k
......
Complete!
重新安装包
[root@centos8 ~]#yum -y reinstall nginx
卸载软件:yum remove
[root@centos8 ~]#yum -y remove nginx
升级/降级
[root@wenzi ~]#yum check-update
Loaded plugins: fastestmirror
Determining fastest mirrors
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
updates/7/x86_64/primary_db | 24 MB 00:00:24
NetworkManager.x86_64 1:1.18.8-2.el7_9 updates
NetworkManager-libnm.x86_64 1:1.18.8-2.el7_9 updates
NetworkManager-team.x86_64 1:1.18.8-2.el7_9 updates
NetworkManager-tui.x86_64 1:1.18.8-2.el7_9 updates
...
升级
yum upgrade|update 包名1 包名2
yum upgrade-minimal 最小化升级
降级
yum downgrade 包名1 包名2
查询
查看软件包信息
[root@wenzi ~]#yum info openssh-server
Installed Packages
Name : openssh-server
Arch : x86_64
Version : 7.4p1
Release : 21.el7
Size : 970 k
Repo : installed
From repo : anaconda
Summary : An open source SSH server daemon
URL : http://www.openssh.com/portable.html
License : BSD
Description : OpenSSH is a free version of SSH (Secure SHell), a program for logging
: into and executing commands on a remote machine. This package contains
: the secure shell daemon (sshd). The sshd daemon allows SSH clients to
: securely connect to your SSH server.
查看某文件是来自哪个软件包
[root@wenzi ~]#yum provides /etc/ssh/sshd_config
openssh-server-7.4p1-21.el7.x86_64 : An open source SSH server daemon
Repo : base
Matched from:
Filename : /etc/ssh/sshd_config
关键字搜索软件包
[root@wenzi ~]#yum search httpd
httpd.x86_64 : Apache HTTP Server
httpd-devel.x86_64 : Development interfaces for the Apache HTTP server
httpd-manual.noarch : Documentation for the Apache HTTP server
...
查看软件包的依赖包
[root@wenzi ~]#yum deplist httpd
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
package: httpd.x86_64 2.4.6-99.el7.centos.1
dependency: /bin/sh
provider: bash.x86_64 4.2.46-35.el7_9
dependency: /etc/mime.types
provider: mailcap.noarch 2.1.41-2.el7
dependency: /usr/sbin/groupadd
provider: shadow-utils.x86_64 2:4.6-5.el7
...
查看yum事务历史
yum 执行安装卸载命令会记录到相关日志中
CentOS7:/var/log/yum.log
CentOS8:/var/log/dnf.rpm.log /var/log/dnf.log
[root@wenzi ~]#yum -y install httpd > /dev/null
[root@wenzi ~]#yum history
Loaded plugins: fastestmirror
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
5 | root <root> | 2023-12-22 17:27 | Install | 5
4 | root <root> | 2023-12-22 17:02 | Erase | 1
3 | root <root> | 2023-12-22 17:02 | Install | 19
2 | System <unset> | 2023-10-27 07:39 | Install | 1
1 | System <unset> | 2023-10-27 07:35 | Install | 337
history list
查看第五个操作相关信息
[root@wenzi ~]#yum history info 5
Transaction ID : 5
Begin time : Fri Dec 22 17:27:14 2023
Begin rpmdb : 356:f520c5f69b5d3c84d32c8eb318d93fbef8e5683a
End time : 17:27:15 2023 (1 seconds)
End rpmdb : 361:9ed70742b0ae77a10989afaf91ae18d2027b6cf4
User : root <root>
Return-Code : Success
Command Line : -y install httpd
Transaction performed with:
Installed rpm-4.11.3-45.el7.x86_64 @anaconda
Installed yum-3.4.3-168.el7.centos.noarch @anaconda
Installed yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch @anaconda
Packages Altered:
Dep-Install apr-1.4.8-7.el7.x86_64 @base
Dep-Install apr-util-1.5.2-6.el7_9.1.x86_64 @updates
Install httpd-2.4.6-99.el7.centos.1.x86_64 @updates
Dep-Install httpd-tools-2.4.6-99.el7.centos.1.x86_64 @updates
Dep-Install mailcap-2.1.41-2.el7.noarch @base
history info
撤销第五个的操作
[root@wenzi ~]#yum history undo 5 -y
Undoing transaction 5, from Fri Dec 22 17:27:14 2023
Dep-Install apr-1.4.8-7.el7.x86_64 @base
Dep-Install apr-util-1.5.2-6.el7_9.1.x86_64 @updates
Install httpd-2.4.6-99.el7.centos.1.x86_64 @updates
Dep-Install httpd-tools-2.4.6-99.el7.centos.1.x86_64 @updates
Dep-Install mailcap-2.1.41-2.el7.noarch @base
...
Removed:
apr.x86_64 0:1.4.8-7.el7 apr-util.x86_64 0:1.5.2-6.el7_9.1 httpd.x86_64 0:2.4.6-99.el7.centos.1 httpd-tools.x86_64 0:2.4.6-99.el7.centos.1 mailcap.noarch 0:2.1.41-2.el7
Complete!
重新执行第五个操作
[root@wenzi ~]#yum history redo 5 -y
Repeating transaction 5, from Fri Dec 22 17:27:14 2023
Dep-Install apr-1.4.8-7.el7.x86_64 @base
Dep-Install apr-util-1.5.2-6.el7_9.1.x86_64 @updates
Install httpd-2.4.6-99.el7.centos.1.x86_64 @updates
Dep-Install httpd-tools-2.4.6-99.el7.centos.1.x86_64 @updates
Dep-Install mailcap-2.1.41-2.el7.noarch @base
....
Installed:
httpd.x86_64 0:2.4.6-99.el7.centos.1
Dependency Installed:
apr.x86_64 0:1.4.8-7.el7 apr-util.x86_64 0:1.5.2-6.el7_9.1 httpd-tools.x86_64 0:2.4.6-99.el7.centos.1 mailcap.noarch 0:2.1.41-2.el7
Complete!
yum软件群组
命令:yum [群组功能] [软件群组]
选项参数:
grouplist:列出所有可用的软件群组
groupinfo:后接群组名,可以知道该群组内含的所有软件名
groupinstall:安装整个群组软件
groupupdate:升级某个软件群组
groupremove:移除某个软件群组
dpkg
类似rpm,不能自动解决依赖
列出当前已安装的软件包
dpkg -l 类似rpm -qa
列出某个软件包的详细信息
dpkd -s 包名 类型rpm -qi
列出某个软件包内的文件
dpkg -L 包名 类似rpm -ql
列出某个文件来自哪个软件包
dpkg -S 包名 类似rpm -qf
[root@wenzi ~]#dpkg -S /bin/ls
coreutils: /bin/ls
apt
安装软件包
安装软件指定版本需要 apt install nginx=1.17.10-0ubuntu1
显示软件可安装的版本
[root@wenzi ~]#apt-cache madison tree
tree | 2.0.2-1 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/universe amd64 Packages
tree | 2.0.2-1 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/universe Sources
[root@wenzi ~]#apt -y install tree=2.0.2-1
移除软件包
[root@wenzi ~]#apt remove tree
移除软件包及配置文件
[root@wenzi ~]#apt purge tree
刷新存储库索引
类似 yum clean all;yum makecache
[root@wenzi ~]#apt update
升级所有可升级的软件包
[root@wenzi ~]#apt upgrade
自动删除无用包并解决依赖关系(常用)
[root@wenzi ~]#apt autoremove tree
在升级软件包时自动处理依赖关系
[root@wenzi ~]#apt full-upgrade
显示软件列表
[root@wenzi ~]#apt list tree
Listing... Done
tree/jammy 2.0.2-1 amd64
搜索软件
[root@wenzi ~]#apt search tree
Sorting... Done
Full Text Search... Done
altree-examples/jammy 1.3.2-1build2 all
example files for ALTree
查看某个安装包的详细信息
[root@wenzi ~]#apt show tree
Package: tree
Version: 2.0.2-1
Priority: optional
Section: universe/utils
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Florian Ernst <florian@debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 116 kB
Depends: libc6 (>= 2.34)
Homepage: http://mama.indstate.edu/users/ice/tree/
Task: xubuntu-desktop, lubuntu-desktop, ubuntu-mate-core, ubuntu-mate-desktop, ubuntu-budgie-desktop, ubuntu-budgie-desktop-raspi
Download-Size: 47.9 kB
APT-Sources: https://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/universe amd64 Packages
Description: displays an indented directory tree, in color
Tree is a recursive directory listing command that produces a depth indented
listing of files, which is colorized ala dircolors if the LS_COLORS environment
variable is set and output is to tty.
实现私有yum仓库
下载所有yum仓库的相关包和meta数据
- CentOS8:dnf reposync --repoid=repoid --download-metadata -p /path
- CentOS7:yum reposync --repoid=repoid --download-metadata -p /path
创建私有yum仓库:createrepo [选项] 目录
实验
以192.168.28.10为局域网yum仓库服务器,将本地光盘的BaseOS、AppSteam及阿里云的Extras、Epel制作成私有仓库
----------服务器端----------
安装httpd,关键目录 /var/www/html
[root@centos8 ~]#yum -y install httpd
[root@centos8 ~]#systemctl enable --now httpd
将光盘/dev/sr0挂载至/data
[root@centos8 ~]#mount /dev/sr0 /data/
将本地光盘内BaseOS和AppStream复制到web服务器
[root@centos8 ~]#cp -a /data/{BaseOS,AppStream} /var/www/html/centos/8/
将aliyun的extras epel下载到局域网web服务器
[root@centos8 ~]#dnf reposync --repoid=extras --download-metadata -p /var/www/html/centos/8;dnf reposync --repoid=epel --download-metadata -p /var/www/html/centos/8
重启httpd
[root@centos8 ~]#systemctl restart httpd
----------客户端----------
先屏蔽自身的yum仓库。再加入私有yum仓库
[root@centos8 ~]#vim /etc/yum.repos.d/cs.repo
[BaseOS]
name=wenzi BaseOS
baseurl=http://192.168.28.10:/centos/8/BaseOS
gpgcheck=0
[AppStream]
name=wenzi AppStream
baseurl=http://192.168.28.10:/centos/8/AppStream
gpgcheck=0
[Extras]
name=wenzi Extras
baseurl=http://192.168.28.10:/centos/8/extras
gpgcheck=0
[epel]
name=wenzi epel
baseurl=http://192.168.28.10:/centos/8/epel
gpgcheck=0
[root@centos8 yum.repos.d]#dnf clean all;dnf makecache
验证
[root@centos8 ~]#dnf -y install htop
Last metadata expiration check: 0:02:18 ago on Sat 23 Dec 2023 12:32:13 AM CST.
Dependencies resolved.
=============================================================================================================================================================================================
Package Architecture Version Repository Size
...
Installed:
htop-3.2.1-1.el8.x86_64
Complete!
系统安装后常用初始化步骤
1.最小化安装
2.关闭防火墙
systemctl disable --now firewalld
3.关闭SELinux
vim /etc/selinux/config
SELINUX=disabled
reboot
4.实现邮件通信
yum -y install postfix mailx
systemctl enable --now postfix
5.yum 源
6.常用软件:
yum -y install bash-completion psmisc lrzsz tree man-pages redhat-lsb-core zip unzip bzip2 wget tcpdump ftp rsync vim lsof
7.网卡NAT
8.时间同步
源码编译安装nginx
[root@centos8 data]#vim nginx_install.sh
#!/bin/bash
#********************************************************************
#FileName: nginx_install.sh
#Version: 1.0
#Date: 2023-12-23
#Author: wenzi
#Description: 源码编译安装nginx
#********************************************************************
nginx_version=1.24.0
nginx_file=nginx-${nginx_version}.tar.gz
install_dir=/apps/nginx
color_green="echo -e \E[1;32m"
color_yellow="echo -e \E[1;33m"
color_red="echo -e \E[1;31m"
end="\E[0m"
cpus=`grep -c processor /proc/cpuinfo`
#安装依赖,关闭防火墙,selinux
env_init () {
. /etc/os-release
if [[ $ID =~ centos|rocky ]];then
systemctl disable --now firewalld > /dev/null
yum install -y gcc make wget zlib-devel pcre-devel openssl-devel > /dev/null
elif [ $ID = "ubuntu" ];then
apt update > /dev/null
apt install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev > /dev/null
else
${color_red}"暂不支持此系统"${end}
eixt 11
fi
}
#下载源码包
download_nginx () {
if [ ! -f ${nginx_file} ];then
wget http://nginx.org/download/${nginx_file} || { $color_red"下载失败"$end;exit 12; }
tar -zx -f ${nginx_file} -C /usr/local/src/
fi
}
#编译安装
make_install () {
cd /usr/local/src/nginx-${nginx_version}
./configure --prefix=${install_dir} --with-http_ssl_module > /dev/null
make -j ${cpus} > /dev/null && make install > /dev/null
}
#链接nginx二进制文件
ln_binaryprogram () {
ln -s ${install_dir}/sbin/nginx /usr/local/bin/
}
#检查nginx安装情况
check_nginx () {
if `/usr/local/bin/nginx`;then
${color_green}"nginx安装成功"${end}
${color_green}"访问首页 http://`hostname -I` 验证"${end}
fi
}
env_init && ${color_green}"依赖准备完毕!"${end}
download_nginx && ${color_green}"源码包准备完毕!"${end}
make_install && ${color_green}"编译安装完毕!"${end}
ln_binaryprogram
check_nginx
OSI七层模型
开放式通信系统互联。由上至下依次是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。层级越高,离用户越近。
7 | 应用层 Application Layer |
6 | 表示层 Presentation Layer |
5 | 会话层 Session Layer |
4 | 传输层 Transport Layer |
3 | 网络层 Network Layer |
2 | 数据链路层 Data Link Layer |
1 | 物理层 Physical Layer |
物理层
数据形式
比特流 Bit
功能
负责设备之间的实际物理连接。在物理设备上传输原始的比特(Bit)流。
协议
RJ45、RS232
设备
中继器、集线器
数据链路层
数据链路层包括两个子层:
- 第一层称为逻辑链路控制层,负责将数据包传输到接收网络层,从报头中识别网络层协议地址,并提供流量控制。
- 第二层称为媒体访问控制层,是网络的逻辑链路控制层和物理层之间的连接层,该层用于通过网络传输数据包。
数据形式
数据帧 Frames
功能
负责在相邻的节点间传输数据帧。物理寻址、数据成帧、错误检测。
协议
HDLC、PPP、IEEE802.3系列
设备
网卡、网桥、二层交换机
网络层
数据形式
数据包 Packages
功能
负责在不同网络之间传输数据包。地址管理、路由选择
协议
ICMP、IP、RIP、BGP等
设备
路由器、防火墙、三层交换机
传输层
数据形式
TPDU:传输协议数据单元。或 数据段 Segments
功能
负责在网络中的不同主机之间提供端到端的数据传输。
协议
TCP、UDP
会话层
数据形式
SPDU:会话协议数据单元
功能
负责在网络中的两个节点之间建立、管理和终止会话。
表示层
数据形式
PPDU:表示协议数据单元
功能
负责确保传输的数据可以被接收端的系统理解。数据加密/解密、数据压缩
应用层
数据形式
APDU:应用协议数据单元
功能
负责为网络应用提供服务。
协议
Http、FTP、Telnet、POP3、SMTP、SSH
调整动态端口范围
如:20000 ~ 60000
echo 20000 60000 > /proc/sys/net/ipv4/ip_local_port_range
TCP包头结构
字段 | 长度 | 解释 |
源端口 | 16位 | 消息发送方主机端口。 由此可知计算机端口号个数为2^16=65536个。0-65535 计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信 |
目的端口 | 16位 | 消息接收方主机端口 |
序号 | 32位 | 表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从 0 开始 |
确认号 | 32位 | 接收方期望收到发送方下一个报文段的第一个字节数据的编号 |
数据偏移 | 4位 | TCP报文段的首部长度。 它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远;该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是 TCP首部最大60字节 |
保留 | 6位 | 保留,目前置为0 |
URG | 1位 | 当URG =1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据) |
ACK | 1位 | 只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。当收到报文需要向发送方发送确认报文时应设置ACK=1 |
PSH | 1位 | 提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果PSH=1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中 |
RST | 1位 | 当RST=1时,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段 |
SYN | 1位 | 在建立连接时使用,用来同步序号。 当SYN=1,ACK=0时,表示这是一个请求建立连接的报 文段; 当SYN=1,ACK=1时,表示对方同意建立连接; SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段 |
FIN | 1位 | 表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段 |
窗口 | 16位 | 表示现在允许对方发送的数据量,即从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据 |
校验和 | 16位 | 校验报文是否发生错误 |
紧急指针 | 16位 | 标记紧急数据在数据字段中的位置(紧急数据放在本报文段数据的最前面) |
选项(长度可变) | 不确定 | 其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节 |
填充 | 不确定 | 使整个首部长度为4字节的整数倍 |
其中 选项 字段包含
最大报文段长度MSS | 指明自己期望对方发送TCP报文段时那个数据字段的长度。通常1460字节 |
窗口扩大Window Scale | 为了扩大窗口。由于TCP首部的窗口大小字段长度是16位,所以其表示的最大数是65535。但是随着时延和带宽比较大的通信产生(如卫星通信),需要更大的窗口来满足性能和吞吐率 |
时间戳Timestamps | 可用来计算RTT(往返时间),发送方发送TCP报文时,把当前的时间值放入时间戳字段,接收方收到后发送确认报文时,把这个时间戳字段的值复制到确认报文中,当发送方收到确认报文后即可计算出RTT |
TCP三次握手
三次握手的本质是确认通信双方收发数据的能力
第一次握手:
客户端要向服务端发起连接请求,首先客户端随机生成一个起始序列号ISN(比如是100),那客户端向服务端发送的报文段包含SYN标志位(也就是SYN=1),序列号seq=100。
第二次握手:
服务端收到客户端发过来的报文后,发现SYN=1,知道这是一个连接请求,于是将客户端的起始序列号100存起来,并且随机生成一个服务端的起始序列号(比如是300)。然后给客户端回复一段报文,回复报文包含SYN和ACK标志(也就是SYN=1,ACK=1)、序列号seq=300、确认号ack=101(客户端发过来的序列号+1)。
第三次握手:
客户端收到服务端的回复后发现ACK=1并且ack=101,于是知道服务端已经收到了序列号为100的那段报文;同时发现SYN=1,知道了服务端同意了这次连接,于是就将服务端的序列号300给存下来。然后客户端再回复一段报文给服务端,报文包含ACK标志位(ACK=1)、ack=301(服务端序列号+1)、seq=101(第一次握手时发送报文是占据一个序列号的,所以这次seq就从101开始,需要注意的是不携带数据的ACK报文是不占据序列号的,所以后面第一次正式发送数据时seq还是101)。当服务端收到报文后发现ACK=1并且ack=301,就知道客户端收到序列号为300的报文了,就这样客户端和服务端通过TCP建立了连接。
TCP四次挥手
四次挥手的目的是关闭一个连接
第一次挥手:
当客户端的数据都传输完成后,客户端向服务端发出连接释放报文(当然数据没发完时也可以发送连接释放报文并停止发送数据),释放连接报文包含FIN标志位(FIN=1)、序列号seq=1101(100+1+1000,其中的1是建立连接时占的一个序列号)。需要注意的是客户端发出FIN报文段后只是不能发数据了,但是还可以正常收数据;另外FIN报文段即使不携带数据也要占据一个序列号。
第二次挥手:
服务端收到客户端发的FIN报文后给客户端回复确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=1102(客户端FIN报文序列号1101+1)、序列号seq=2300(300+2000)。此时服务端处于关闭等待状态,而不是立马给客户端发FIN报文,这个状态还要持续一段时间,因为服务端可能还有数据没发完。
第三次挥手:
服务端将最后数据(比如50个字节)发送完毕后就向客户端发出连接释放报文,报文包含FIN和ACK标志位(FIN=1,ACK=1)、确认号和第二次挥手一样ack=1102、序列号seq=2350(2300+50)。
第四次挥手:
客户端收到服务端发的FIN报文后,向服务端发出确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=2351、序列号seq=1102。注意客户端发出确认报文后不是立马释放TCP连接,而是要经过2MSL(最长报文段寿命的2倍时长)后才释放TCP连接。而服务端一旦收到客户端发出的确认报文就会立马释放TCP连接,所以服务端结束TCP连接的时间要比客户端早一些。
相关问题
为什么TCP连接的时候是3次?2次不可以吗?
因为需要考虑连接时丢包的问题,如果只握手2次,第二次握手时如果服务端发给客户端的确认报文段丢失,此时服务端已经准备好了收发数(可以理解服务端已经连接成功)据,而客户端一直没收到服务端的确认报文,所以客户端就不知道服务端是否已经准备好了(可以理解为客户端未连接成功),这种情况下客户端不会给服务端发数据,也会忽略服务端发过来的数据。
如果是三次握手,即便发生丢包也不会有问题,比如如果第三次握手客户端发的确认ack报文丢失,服务端在一段时间内没有收到确认ack报文的话就会重新进行第二次握手,也就是服务端会重发SYN报文段,客户端收到重发的报文段后会再次给服务端发送确认ack报文。
为什么TCP连接的时候是3次,关闭的时候却是4次?
因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。而客户端发出FIN报文时只能保证客户端没有数据发了,服务端还有没有数据发客户端是不知道的。而服务端收到客户端的FIN报文后只能先回复客户端一个确认报文来告诉客户端我服务端已经收到你的FIN报文了,但我服务端还有一些数据没发完,等这些数据发完了服务端才能给客户端发FIN报文(所以不能一次性将确认报文和FIN报文发给客户端,就是这里多出来了一次)。
为什么客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接?
这里同样是要考虑丢包的问题,如果第四次挥手的报文丢失,服务端没收到确认ack报文就会重发第三次挥手的报文,这样报文一去一回最长时间就是2MSL,所以需要等这么长时间来确认服务端确实已经收到了。
如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP设有一个保活计时器,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
网络中两台主机通信的完整过程
主机A查看自己的ARP缓存,检查是否有主机B的IP到MAC的映射
- 如果有映射,构造报文,目的IP为主机B的IP,源IP为主机A的IP,目的MAC为主机B的MAC,源MAC为主机A的MAC,将报文发送给二层交换机,交换机进行MAC地址表学习,将主机A的MAC和报文入端端口号记录下来,然后交换机查看自己的MAC转发表,检查是否有主机B的MAC到端口的映射
- 如果有映射,获取对应的端口,将报文从此端口转发出去,报文到达主机B。
- 如果无映射,采用洪泛的形式广播报文,主机B收到报文后向主机A回复,交换机进行MAC表学习,将主机B的MAC和报文入端端口号记录下来。
- 如果无映射,主机A需要发送ARP请求,以获取主机B的MAC,将报文发往交换机,交换机采用洪泛的形式广播报文,主机B收到广播报文后,在自己的ARP缓存表中写入主机A的IP到MAC的映射,将自己的MAC封装到ARP回复报文中,单播给主机A,主机A获取到主机B的MAC后,在自己的ARP缓存表中写入主机B的IP到MAC的映射,构造报文发送给主机B,后续过程同上
IP地址
组成
- 网络地址:标识网络,每个网段分配一个网络ID
- 主机地址:标识单个主机,由组织分配给各设备
分类
分类 | 固定 | 网络位 | 主机位 | 范围 | 网络数 | 主机数 | 默认子网掩码 |
A类 | 0 | 8 | 24 | 0.0.0.0 至 127.255.255.255 | 2^7-2 | 2^24-2 | /24 |
B类 | 10 | 16 | 16 | 128.0.0.0 至 191.255.255.255 | 2^14-2 | 2^16-2 | /16 |
C类 | 110 | 24 | 8 | 192.0.0.0 至 223.255.255.255 | 2^21-2 | 2^8-2 | /8 |
D类组播 | 1110 | 不区分 网络地址 和 主机地址 | 224.0.0.0 至 239.255.255.255 | ||||
E类 保留 | 11110 | 240.0.0.0 至 255.255.255.255 |
私网地址
- 10.x.x.x
- 172.16.x.x ~ 172.31.x.x
- 192.168.x.x
特殊地址
- 0.0.0.0:表示所有未知的主机和目的网络。“未知”是指在本机的路由表里没有特定条目指明如何到达。
- 255.255.255.255:有限广播地址,理论上与本主机同一广播域的主机都能收到这样的广播消息。
- 127.0.0.1 ~ 127.255.255.254:本机回环地址,主要用于测试。
- 169.254.x.x:如果主机上的IP地址为自动获取,而又无法从DHCP获取地址,则取此范围内的一个IP。
- 224.0.0.0 ~ 239.255.255.255:组播地址。224.0.0.1指所有主机;224.0.0.2指所有路由器;224.0.0.5指OSPF路由器;224.0.0.12代表DHCP服务器/中继代理;224.0.0.18代表VRRP协议
- 主机位全0:表示网络地址
- 主机位全1:表示广播
计算主机数、子网掩码
相关公式
一个网络中最多的主机数
2^主机位数-2
网段数
2^可变网络位数
网络ID
IP和子网掩码相与
判断两个IP是否在同一网络
用主机A的子网掩码分别和主机A的IP、主机B的IP相与,结果相同则是同一网络,不同则不同网络。
案例
一、201.222.200.111/18 的子网掩码及主机数
子网掩码:18=16+2=255.255.0.0+192.0=255.255.192.0
主机数:2^14-2=16382
二、当A(10.0.1.1/16)与B(10.0.2.2/24)通信,A如何判断是否在同一个网段?A和B能否通信
使用A的子网掩码分别和AIP、BIP相与,结果为10.0.0.0,在同一网段,可通信
三、将10.0.0.0/8划分32个子网,求每个子网的掩码,主机数。
32=2^n,可知n=5,所以子网掩码为8+5=13=255.248.0.0,主机数为2^19-2
配置网络
nmcli
是一个命令行工具,用于控制NetworkManager,它是CentOS 7和Red Hat Enterprise Linux 7等系统中默认的网络管理工具。
语法
nmcli [options] object {command | help}
object 常用的是 connection 和 device。
Device(设备)是指网络接口,是物理设备,例如网卡、无线网卡等。NetworkManager可以自动检测和配置这些设备。
Connection(连接)是逻辑设置,用于描述如何配置Device(设备)。一个Connection可以应用到多个Device上,但同一时间只能启用其中一个Connection。Connection包含了诸如IP地址、子网掩码、网关等网络参数的配置。
一、查看网卡信息
查看所有网络连接
[root@wenzi ~]# nmcli con show
NAME UUID TYPE DEVICE
System ens160 96649f5b-1c86-4cea-aa1e-366223abaea8 ethernet ens160
查看活跃的网络连接
[root@wenzi ~]# nmcli con show --active
NAME UUID TYPE DEVICE
System ens160 96649f5b-1c86-4cea-aa1e-366223abaea8 ethernet ens160
查看指定网络连接的详细信息
[root@wenzi ~]# nmcli con show "System ens160"
connection.id: System ens160
connection.uuid: 96649f5b-1c86-4cea-aa1e-366223abaea8
connection.stable-id: --
connection.type: 802-3-etherne
...
查看所有网络设备
[root@wenzi ~]# nmcli dev show
GENERAL.DEVICE: ens160
GENERAL.TYPE: ethernet
GENERAL.HWADDR: 00:0C:29:1B:12:DA
...
GENERAL.DEVICE: lo
GENERAL.TYPE: loopback
GENERAL.HWADDR: 00:00:00:00:00:00
GENERAL.MTU: 65536
查看指定网络设备的详细信息
[root@wenzi ~]# nmcli dev show ens160
GENERAL.DEVICE: ens160
GENERAL.TYPE: ethernet
GENERAL.HWADDR: 00:0C:29:1B:12:DA
GENERAL.MTU: 1500
...
二、改变网卡状态
停用指定的网络连接
[root@wenzi ~]# nmcli con down "System ens160"
启用指定的网络连接
[root@wenzi ~]# nmcli con up "System ens160"
删除指定的网络连接
[root@wenzi ~]# nmcli con delete "System ens160"
停用指定网络设备
[root@wenzi ~]# nmcli device disconnect ens160
启用指定网络设备
[root@wenzi ~]# nmcli device connect ens160
删除指定的网络设备
[root@wenzi ~]# nmcli device delete ens160
重新加载网络配置
[root@wenzi ~]# nmcli con reload
三、新增网卡配置文件
nmcli con add ...会自动生成新的网卡配置文件,名字为ifcfg-[con-name],即下面的ifcfg-ens00
[root@wenzi ~]# nmcli con add type ethernet con-name ens00 ifname ens00 ipv4.method manual connection.autoconnect yes ipv4.addresses 192.168.28.165/24 ipv4.gateway 192.168.28.2 ipv4.dns 223.5.5.5 +ipv4.dns 119.29.29.29
[root@wenzi ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens00
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.28.165
PREFIX=24
GATEWAY=192.168.28.2
DNS1=223.5.5.5
DNS2=119.29.29.29
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens00
UUID=e4b5bd14-e321-4a9a-a8a9-13226a209c5e
DEVICE=ens00
ONBOOT=yes
三、修改网卡配置文件
一、通过nmcli命令 nmcli con mod ens00 .... ,修改后需要执行 nmcli con up ens00 使配置生效。
二、手动修改ifcfg-ens00配置文件,修改后需要执行 nmcli con reload && nmcli con up ens00 使配置生效
添加第二个IP
[root@wenzi ~]# nmcli con mod ens00 +ipv4.addresses 192.168.28.166/24
删除第二个IP
[root@wenzi ~]# nmcli con mod ens00 -ipv4.addresses 192.168.28.166/24
添加第二个DNS
[root@wenzi ~]# nmcli con mod ens00 +ipv4.dns 223.5.5.5
删除第二个DNS
[root@wenzi ~]# nmcli con mod ens00 -ipv4.dns 223.5.5.5
网卡配置文件格式
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0" #网络接口名
HWADDR="00:0C:29:E5:8D:44" #网卡MAC地址
TYPE="Ethernet" #网络接口类型,此处是以太网
UUID="8d0680d1-36ff-4a3f-ac93-5ca2b335094d" #网络接口唯一标识符
ONBOOT="yes" #开机自动启用此网卡
BOOTPROTO="static" #静态地址
IPADDR=192.168.28.163 #IP地址
PREFIX=24 #子网掩码
GATEWAY=192.168.28.2 #网关
DNS1=223.5.5.5 #首选DNS服务器地址
DNS2=119.29.29.29 #备用DNS服务器地址
实现聚合链路bond0
此实验通过vmware实现,已有网卡ens33,IP:192.168.28.20/24,用于远程连接。现通过vmware编辑配置增加两块网卡,要实现bond,需要新增三个网卡配置文件,其中两个为两块网卡各自的配置文件,第三个实现bond的网卡配置文件。
已有网卡ens33
[root@wenzi ~]# nmcli con show
NAME UUID TYPE DEVICE
ens33 039c247d-11cc-4cee-8562-01f309f0332a ethernet ens33
增加两块新网卡
[root@wenzi ~]# nmcli con show
NAME UUID TYPE DEVICE
Wired connection 1 f1dae0f1-4f4a-3846-99ca-47fe07f3c366 ethernet ens36
Wired connection 2 26a3351a-f2da-3bf1-945d-d1ce635280ea ethernet ens37
ens33 039c247d-11cc-4cee-8562-01f309f0332a ethernet ens33
[root@wenzi network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:28:cd:91 brd ff:ff:ff:ff:ff:ff
inet 192.168.28.20/24 brd 192.168.28.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe28:cd91/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:28:cd:9b brd ff:ff:ff:ff:ff:ff
inet6 fe80::dbfd:7bfc:db95:521f/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:28:cd:a5 brd ff:ff:ff:ff:ff:ff
inet6 fe80::642:a4de:332c:551c/64 scope link noprefixroute
valid_lft forever preferred_lft forever
bond0网卡配置
[root@wenzi network-scripts]# cat ifcfg-bond0
NAME=bond0
DEVICE=bond0
TYPE=bond
BOOTPROTO=none
IPADDR=192.168.28.50
PREFIX=24
BONDING_OPTS="mode=1 miimon=100 fail_over_mac=1"
ens36网卡配置
[root@wenzi network-scripts]# cat ifcfg-ens36
NAME=ens36
DEVICE=ens36
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
ens37网卡配置
[root@wenzi network-scripts]# cat ifcfg-ens37
NAME=ens37
DEVICE=ens37
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
重新加载网卡配置
[root@wenzi network-scripts]# nmcli con reload
[root@wenzi network-scripts]# nmcli con show
NAME UUID TYPE DEVICE
Wired connection 1 f1dae0f1-4f4a-3846-99ca-47fe07f3c366 ethernet ens36
Wired connection 2 26a3351a-f2da-3bf1-945d-d1ce635280ea ethernet ens37
ens33 039c247d-11cc-4cee-8562-01f309f0332a ethernet ens33
bond0 ad33d8b0-1f7b-cab9-9447-ba07f855b143 bond bond0
ens36 418da202-9a8c-b73c-e8a1-397e00f3c6b2 ethernet --
ens37 4a5516a4-dfa4-24af-b1c4-e843e312e2fd ethernet --
启用ens36 ens37连接
[root@wenzi network-scripts]# nmcli con up ens36
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/30)
[root@wenzi network-scripts]# nmcli con up ens37
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/31)
[root@wenzi network-scripts]# nmcli con show
NAME UUID TYPE DEVICE
ens33 039c247d-11cc-4cee-8562-01f309f0332a ethernet ens33
bond0 ad33d8b0-1f7b-cab9-9447-ba07f855b143 bond bond0
ens36 418da202-9a8c-b73c-e8a1-397e00f3c6b2 ethernet ens36
ens37 4a5516a4-dfa4-24af-b1c4-e843e312e2fd ethernet ens37
Wired connection 1 f1dae0f1-4f4a-3846-99ca-47fe07f3c366 ethernet --
Wired connection 2 26a3351a-f2da-3bf1-945d-d1ce635280ea ethernet --
[root@wenzi network-scripts]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup) (fail_over_mac active)
Primary Slave: None
Currently Active Slave: ens36 现在使用的是ens36,ens37是备用
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: ens36
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:28:cd:9b
Slave queue ID: 0
Slave Interface: ens37
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:28:cd:a5
Slave queue ID: 0
用其它机器测试
[root@centos8 ~]# ping 192.168.28.50
PING 192.168.28.50 (192.168.28.50) 56(84) bytes of data.
64 bytes from 192.168.28.50: icmp_seq=1 ttl=64 time=0.201 ms
64 bytes from 192.168.28.50: icmp_seq=2 ttl=64 time=0.272 ms
64 bytes from 192.168.28.50: icmp_seq=3 ttl=64 time=0.242 ms
...
模拟故障,删除ens36
[root@wenzi network-scripts]# nmcli con show
NAME UUID TYPE DEVICE
ens33 039c247d-11cc-4cee-8562-01f309f0332a ethernet ens33
bond0 ad33d8b0-1f7b-cab9-9447-ba07f855b143 bond bond0
ens37 4a5516a4-dfa4-24af-b1c4-e843e312e2fd ethernet ens37
ens36 418da202-9a8c-b73c-e8a1-397e00f3c6b2 ethernet --
Wired connection 2 26a3351a-f2da-3bf1-945d-d1ce635280ea ethernet --
[root@wenzi network-scripts]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup) (fail_over_mac active)
Primary Slave: None
Currently Active Slave: ens37
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: ens37
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:28:cd:a5
Slave queue ID: 0
观察测试端ping信息,出现了短暂延时,但未丢包
64 bytes from 192.168.28.50: icmp_seq=52 ttl=64 time=0.350 ms
64 bytes from 192.168.28.50: icmp_seq=53 ttl=64 time=0.412 ms
64 bytes from 192.168.28.50: icmp_seq=54 ttl=64 time=1.11 ms
64 bytes from 192.168.28.50: icmp_seq=55 ttl=64 time=0.347 ms
64 bytes from 192.168.28.50: icmp_seq=56 ttl=64 time=0.299 ms
通过ifconfig命令查找IP
[root@centos8 ~]#ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.28.10 netmask 255.255.255.0 broadcast 192.168.28.255
inet6 fe80::b9d1:63f8:6e81:2a32 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:3a:01:ff txqueuelen 1000 (Ethernet)
RX packets 99 bytes 13244 (12.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 103 bytes 22070 (21.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@centos8 ~]#ifconfig ens160 | awk '/netmask/{print $2}'
192.168.28.10
脚本检测当前网络在线主机
[root@centos8 data]#cat check.sh
#!/bin/bash
#********************************************************************
#FileName: check.sh
#Version: 1.0
#Date: 2023-12-26
#Author: wenzi
#Description: This is description
#********************************************************************
net=192.168.28
for i in {1..254};do
{
ping -c 1 -w 1 ${net}.${i} > /dev/null && echo ${net}.${i} is up || echo ${net}.${i} is down
}&
done
wait