通过《KVM虚拟化解决方案系列之KVM架构篇》我们了解了KVM的基本架构之后,那么接下来继续介绍如何使用KVM来搭建自己的虚拟化环境,搭建环境如表1所示。


表1. KVM搭建环境

主机名

角色

操作系统

IP地址

备注

kvm01

KVM主机1

CentOS-7-x86_64-DVD-1810.ISO

192.168.150.151

kvm02

KVM主机2

ubuntu-20.04.3-desktop-amd64

192.168.150.152

本篇将介绍如何通过一整套的流程和方法来搭建KVM环境,其中包括硬件系统配置、宿主机操作系统安装、KVM安装、QEMU安装、qemu-kvm/qemu-img组件安装、启动第一个KVM虚拟机。

1. 硬件系统配置

1.1. 如果使用物理机搭建KVM,请在BIOS打开VT和VT-d功能

以Intel架构服务器为例,要想使用KVM功能,首先需要处理器支持VT技术,除此之外还需要在BIOS中打开VT功能。目前,大部分服务器的BIOS都默认都打开了VT功能了。

在BIOS中,VT的标识通常为“Intel® Virtualization Technology”或“Intel® VT-d”等类似的字样。除了支持必需的处理器虚拟化扩展以外,如果服务器芯片还支持VT-d(Virtualization Technology for Directed I/O),也建议在BIOS中打开,因为如果I/O设备需要直通虚拟机的话,是需要VT-d支持的,比如说GPU直通某虚拟机就使用到了VT-d了。

第一步:在BIOS中将VT和VT-d设置为Enabled,如图1所示

kvm如何打开bios kvm设置bios_云计算


图1. 在BIOS中打开VT和VT-d

第二步:保存BIOS配置并退出,系统重启后生效

第三步:通过Linux查看CPU是否支持硬件虚拟化

如果你的宿主机已经安装了Linux操作系统,可以通过/proc/cpuinfo文件中的CPU特性标志位(flags)来查看CPU目前是否支持硬件虚拟化。在x86和x86-64平台中,Intel系列CPU支持虚拟化的标志位“vmx”。在AMD系列CPU的标志位“svm”。
如果你使用的是Intel架构服务器,命令行执行如下所列:

[root@localhost ~]# grep vmx /proc/cpuinfo              # “vmx”信息显示CPU支持虚拟化
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 arat spec_ctrl intel_stibp flush_l1d arch_capabilities

如果你使用的是AMD架构服务器,命令行执行如下所列:

[root@localhost ~]# grep svm /proc/cpuinfo

1.2. 如果使用虚拟机搭建KVM,请勾选“虚拟化Intel VT-x/EPT或AMD-V/RVI(V)”

如果是使用VMware Workstation搭建KVMM,首选需要打开VMware虚拟化引擎,即勾选虚拟化引擎的所有选型,如图2所示。

kvm如何打开bios kvm设置bios_kvm如何打开bios_02


图2. 在VMware中打开虚拟化引擎

2. 宿主机操作系统安装

KVM是基于内核的虚拟化技术,要搭建KVM虚拟化环境,还需要给宿主机安装一个Linux操作系统。在国内,企业常用的Linux操作系统包括RHEL、CentOS以及Ubuntu等,因此宿主机的操作系统选择CentOS和Ubuntu。注意,Proxmox VE虚拟化工具只能安装在Debian Linux之上,关于Debian的安装会在Proxmox VE虚拟化工具的章节中讲到,这里不演示宿主机安装Debian系统。

2.1. 宿主机安装CentOS操作系统

本篇宿主机采用VMware Workstation虚拟机的方式来安装CentOS操作系统,操作系统的安装文件为CentOS-7-x86_64-DVD-1810.ISO。

2.1.1. CentOS系统安装

第一步,创建CentOS镜像存储文件夹和VMware虚拟机磁盘存储文件夹

在本地电脑桌面创建一个“CentOS”文件夹,然后将CentOS-7-x86_64-DVD-1810.ISO镜像复制到“CentOS”文件夹中,如图3所示。

kvm如何打开bios kvm设置bios_linux_03


图3. 创建CentOS镜像文件夹

在本地电脑D盘中创建一个“虚拟机OS存储/CentOS”文件夹,用于存放稍后创建的VMware虚拟机文件,如图4所示。

kvm如何打开bios kvm设置bios_kvm如何打开bios_04


图4. 创建CentOS虚拟机文件夹

第二步,创建新的虚拟机并编辑虚拟机相关配置

打开VMware Workstation虚拟机,点击“创建新的虚拟机”按钮,创建CentOS虚拟机,如图5所示,选择“典型”模式创建虚拟机。

kvm如何打开bios kvm设置bios_虚拟化_05


图5. 典型模式安装

继续点击“下一步”,转跳到图6界面,选择“稍后安装操作系统(S)”。

kvm如何打开bios kvm设置bios_云计算_06


图6. 稍后选择ISO镜像

继续点击“下一步”,转跳到图7界面,选择“Linux”和“CentOS 7 64位”,因为我们要安装的CentOS操作系统的版本是CentOS-7-x86_64-DVD-1810.ISO。

kvm如何打开bios kvm设置bios_linux_07


图7. 选择CentOS版本

继续点击“下一步”,转跳到图8界面,输入虚拟机名称,名称可按个人习惯去起,选择虚拟机文件存储路径。

kvm如何打开bios kvm设置bios_kvm如何打开bios_08


图8. 虚拟机名称以及存储路径

继续点击“下一步”,转跳到图9界面,分配虚拟机磁盘大小,由于是演示环境,分配40G空间足够使用了。

kvm如何打开bios kvm设置bios_虚拟化_09


图9. 分配虚拟机磁盘

第三步,开启VMware虚拟机的虚拟引擎

继续点击“下一步”,转跳到图10界面,再点击“自定义硬件”按钮,进一步编辑配置。

kvm如何打开bios kvm设置bios_linux_10


图10. 进一步编辑虚拟机

选择“内存”选项,给虚拟机分配4G内存,如图11所示。如果你的本地机有足够的内存,也可以给虚拟机分配8G内存,如果没有足够的内存,可以分配2G或者1G内存,丰俭由人。

kvm如何打开bios kvm设置bios_虚拟化_11


图11. 给虚拟机分配内存

继续选择“处理器”选项,给虚拟机分配vCPU,同时开启虚拟化引擎,如图12所示。

kvm如何打开bios kvm设置bios_linux_12


图12. 分配vCPU及开启虚拟化引擎

继续选择“新CD/DVD”选项,再点击“浏览”按钮,选择CentOS镜像,该镜像存放在我们刚才创建在桌面的“CentOS”文件夹中,如图13所示。

kvm如何打开bios kvm设置bios_linux_13


图13. 选择CentOS镜像

继续选择“网络适配器”选项,选择“桥接模式”的网络连接方式,如图14所示。

kvm如何打开bios kvm设置bios_kvm如何打开bios_14


图14. 选择桥接模式

虚拟机创建以及编辑完成,点击“完成”按钮,如图15所示。

kvm如何打开bios kvm设置bios_kvm如何打开bios_15


图15. 虚拟机创建完成

第三步,开启虚拟机,进入CentOS操作系统安装界面,选择“Install CentOS 7”,按回车键继续,如图16所示

kvm如何打开bios kvm设置bios_kvm如何打开bios_16


图16. 选择Install CentOS 7安装方式

第四步,选择CentOS 7操作系统语言,这里我们选择中文简体,按“继续”按钮,如图17所示

kvm如何打开bios kvm设置bios_CentOS_17


图17. 选择中文语言

第五步,接着进入到了CentOS 7安装核心配置界面,如图18所示

“本地化”组可根据实际情况选择即可。“软件”组中的“安装源”、“软件选择”以及“系统”组中的“安装位置”、“网络和主机名”等选项需要做参数配置。

kvm如何打开bios kvm设置bios_linux_18


图18. 核心配置界面

第六步,点击“安装源”选项,进入安装源配置界面,CentOS 7支持多种安装源,可根据实际情况进行选择,如图19所示

选择“自动检测到的安装介质”,然后点击“验证”按钮来检测一下安装介质是否正常,最后单击“完成”按钮。

kvm如何打开bios kvm设置bios_虚拟化_19


图19. 配置安装源

第七步,点击“软件选择”选项,进入软件选择配置界面,如图20所示。

默认情况下采用“最小安装”,因为我们在后续需要使用图形用户界面(GUI)安装和配置虚拟机,因此选择“带GUI的服务器”,最后点击“完成”按钮。

kvm如何打开bios kvm设置bios_kvm如何打开bios_20


图20. 配置软件选择

第八步,点击“安装位置”选项,进入安装位置配置界面,如图21所示

CentOS 7支持多种安装方式,这里我们选择在本地硬盘安装,同时选择“自动配置分区”,最后点击“完成”按钮。

kvm如何打开bios kvm设置bios_CentOS_21


图21. 配置安装位置

第九步,点击“网络和主机名”选项,进入网络和主机名配置界面,如图22所示

选择左侧的网卡,点击“配置”按钮,为网卡配置IP地址、子网掩码、网关以及DNS等,最后点击“保存”按钮。

kvm如何打开bios kvm设置bios_kvm如何打开bios_22


图22. 配置网卡信息

第十步,配置主机名和启动网卡,如图23所示

主机名称为“kvm01”,在主机名称中输入“kvm01.localdomain”,点击“应用”,让新主机名生效。同时点击网卡的启动按钮,打开网卡,最后点击“完成”按钮。

kvm如何打开bios kvm设置bios_云计算_23


图23. 配置主机名和启用网卡

第十一步,基本配置信息完成之后,就可以开始安装了,点击“开始安装”按钮,如图24所示

kvm如何打开bios kvm设置bios_CentOS_24


图24. 开始安装系统

第十二步,进入用户设置界面,为root用户设置密码和创建非root用户,如图25所示

点击“ROOT密码”进入root密码配置界面。注意,这里不创建非root用户,这是一个可选项,但是建议大家创建非root用户。

kvm如何打开bios kvm设置bios_CentOS_25


图25. 用户设置界面

第十三步,设置root用户的密码,设置完成之后,点击“完成”按钮,如图26所示

kvm如何打开bios kvm设置bios_云计算_26


图26. 设置root密码

第十四步,安装完成之后,CentOS服务器重启,接受许可之后,点击“完成配置”按钮,如图27所示。

kvm如何打开bios kvm设置bios_云计算_27


图27. 完成系统配置

第十五步,在图形用户界面打开终端命令窗口,命令可正常使用,如图28所示。至此,CentOS系统安装完成。

kvm如何打开bios kvm设置bios_kvm如何打开bios_28


图28. 完成系统安装

2.1.2. 基本的网络配置

第一步,使用命令“ip addr”查看当前网络情况

我们在CentOS 7的安装过程中,设置好了网卡的IP地址、子网掩码、网关以及DNS等配置信息,如下所示。

[root@kvm01 ~]# ip addr
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:ea:7e:95 brd ff:ff:ff:ff:ff:ff
    inet 192.168.150.151/24 brd 192.168.150.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fd3a:b661:7f13::24b/128 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fd3a:b661:7f13:0:3c29:223d:540:3045/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::ac3c:7790:a394:f23e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:b3:8d:c9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:b3:8d:c9 brd ff:ff:ff:ff:ff:ff

第二步,使用ping命令检测能否访问互联网

[root@kvm01 ~]# ping www.baidu.com
PING www.a.shifen.com (163.177.151.110) 56(84) bytes of data.
64 bytes from 163.177.151.110 (163.177.151.110): icmp_seq=1 ttl=53 time=11.3 ms
64 bytes from 163.177.151.110 (163.177.151.110): icmp_seq=2 ttl=53 time=11.0 ms
64 bytes from 163.177.151.110 (163.177.151.110): icmp_seq=3 ttl=53 time=11.1 ms
64 bytes from 163.177.151.110 (163.177.151.110): icmp_seq=4 ttl=53 time=9.83 ms

2.1.3. 开启SSH服务远程登录

CentOS 7系统默认情况下,已经开启了SSH服务远程登录,使用SSH工具如Xshell、CRT等就可以远程登录,如图29所示。

kvm如何打开bios kvm设置bios_云计算_29


图29. Xshell登录CentOS

2.1.4. 修改CentOS系统YUM软件源

每个Linux操作系统厂商都会提供自己的YUM软件源,通过YUM源可以方便、快捷地安装软件包,同时可以解决软件包的依赖问题。但是这些Linux操作系统厂商基本上是国外的,所以YUM软件源仓库都是国外的站点,访问速度很慢,有时候下载到一半就断线,导致软件更新失败。所以我们有必要把YUM软件源仓库调整为国内的阿里云或阿里云的YUM源,这样软件更新和升级效率会更高。同时,后续安装使用KVM也需要外部的YUM源,所以学习修改YUM源非常重要。

第一步,使用命令“ls /ect/yum.repos.d”查看系统默认的YUM源文件

[root@kvm01 ~]# ls /etc/yum.repos.d/
CentOS-Base.repo  CentOS-CR.repo  CentOS-Debuginfo.repo  CentOS-fasttrack.repo  CentOS-Media.repo  CentOS-Sources.repo  CentOS-Vault.repo

第二步,使用命令“cat /etc/yum.repos.d/CentOS-Base.repo”查看系统默认的YUM源文件信息

从输出的信息可以看到,YUM源文件的地址为mirrorlist.centos.org,这个地址是CentOS官方的服务器,从国内访问CentOS官方的服务器的速度比较慢,有时候会断线。

[root@kvm01 ~]# cat /etc/yum.repos.d/CentOS-Base.repo 
# CentOS-Base.repo
……(省略)
#
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
……(省略)

第三步,使用命令“ping www.aliyun.com”检测CentOS服务器与阿里云的连通性

如果CentOS服务器不能访问阿里云,就无法使用阿里云的YUM软件源,所以要确保CentOS服务器到阿里云的连通性。

[root@kvm01 ~]# ping www.aliyun.com
PING na61-na62.wagbridge.alibaba.aliyun.com.gds.alibabadns.com (203.119.207.129) 56(84) bytes of data.
64 bytes from 203.119.207.129 (203.119.207.129): icmp_seq=1 ttl=86 time=47.4 ms
64 bytes from 203.119.207.129 (203.119.207.129): icmp_seq=2 ttl=86 time=47.4 ms
64 bytes from 203.119.207.129 (203.119.207.129): icmp_seq=3 ttl=86 time=48.5 ms
64 bytes from 203.119.207.129 (203.119.207.129): icmp_seq=4 ttl=86 time=48.5 ms

第四步,使用命令“mv /etc/yum.repos.d/CentOS-*.repo /tmp”将原有的YUM源文件备份到/tmp

[root@kvm01 ~]# cd /etc/yum.repos.d/
[root@kvm01 yum.repos.d]# ls
CentOS-Base.repo  CentOS-CR.repo  CentOS-Debuginfo.repo  CentOS-fasttrack.repo  CentOS-Media.repo  CentOS-Sources.repo  CentOS-Vault.repo
[root@kvm01 yum.repos.d]# 
[root@kvm01 yum.repos.d]# mv /etc/yum.repos.d/CentOS-*.repo /tmp
[root@kvm01 yum.repos.d]# ls

第五步,使用命令“wget http://mirrors.aliyun.com/repo/Centos-7.repo”下载阿里云的CentOS系统YUM源文件

[root@kvm01 yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-7.repo
--2021-10-15 19:10:01--  http://mirrors.aliyun.com/repo/Centos-7.repo
正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 121.31.229.244, 116.162.112.221, 36.248.25.178, ...
正在连接 mirrors.aliyun.com (mirrors.aliyun.com)|121.31.229.244|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:2523 (2.5K) [application/octet-stream]
正在保存至: “Centos-7.repo”

100%[========================================================================================================================>] 2,523       --.-K/s 用时 0s      

2021-10-15 19:10:02 (177 MB/s) - 已保存 “Centos-7.repo” [2523/2523])

[root@kvm01 yum.repos.d]# ls                            # YUM源文件下载成功
Centos-7.repo

第六步,使用命令“cat /etc/yum.repos.d/Centos-7.repo”查看YUM源文件的详细信息

根据输出的信息可以看到,YUM源的访问地址是mirrors.aliyun.com,也就是使用了阿里云YUM源了。

[root@kvm01 yum.repos.d]# cat /etc/yum.repos.d/Centos-7.repo 
# CentOS-Base.repo
……(省略)
#
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
 
#released updates 
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
 
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
 
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
 
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

第七步,使用命令“yum clean all”清除原有的YUM缓存

[root@kvm01 yum.repos.d]# yum clean all
已加载插件:fastestmirror, langpacks
正在清理软件源: base extras updates
Cleaning up list of fastest mirrors

第八步,使用命令“yum makecache”生成新的YUM缓存

[root@kvm01 yum.repos.d]# yum makecache 
已加载插件:fastestmirror, langpacks
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     
base/7/x86_64/primary_db       FAILED                                          
http://mirrors.cloud.aliyuncs.com/centos/7/os/x86_64/repodata/6d0c3a488c282fe537794b5946b01e28c7f44db79097bb06826e1c0c88bad5ef-primary.sqlite.bz2: [Errno 14] curl#6 - "Could not resolve host: mirrors.cloud.aliyuncs.com; Unknown error"
正在尝试其它镜像。
……(省略)

第九步,使用命令“yum update”更新YUM源

[root@kvm01 yum.repos.d]# yum update

至此,CentOS操作系统的默认YUM源修改成了阿里云YUM源,且能正常使用。

2.1.5. 安装ifconfig命令工具

CentOS 7开始弃用“ifconfig”命令,改用“ip addr”命令,有些人因为个人使用习惯问题,仍然在使用ifconfig。要在CentOS 7中使用ifconfig命令,需要安装net-tools网络工具。

我们可以通过yum命令的search选项来对ifconfig软件包进行搜索,该指令可以查找显示出相关的软件有哪些。

[root@kvm01 ~]# yum search ifconfig
已加载插件:fastestmirror, langpacks
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Loading mirror speeds from cached hostfile
 * base: mirrors.163.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
================================================================ 匹配:ifconfig ================================================================
net-tools.x86_64 : Basic networking tools

结合上面的信息,即通过运行 yum search ifconfig提示我们:安装ifconfig包只需要安装net-tools.x86_64即可。

[root@kvm01 ~]# yum install net-tools.x86_64
已加载插件:fastestmirror, langpacks
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Loading mirror speeds from cached hostfile
 * base: mirrors.163.com
 * extras: mirrors.163.com
 * updates: mirrors.163.com
软件包 net-tools-2.0-0.25.20131004git.el7.x86_64 已安装并且是最新版本
无须任何处理

安装完成之后,接下来,我们检测下ifconfig工具能否正常使用,如下所示:

[root@kvm01 ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.150.151  netmask 255.255.255.0  broadcast 192.168.150.255
        inet6 fe80::ac3c:7790:a394:f23e  prefixlen 64  scopeid 0x20<link>
        inet6 fd3a:b661:7f13::24b  prefixlen 128  scopeid 0x0<global>
        inet6 fd3a:b661:7f13:0:3c29:223d:540:3045  prefixlen 64  scopeid 0x0<global>
        ether 00:0c:29:ea:7e:95  txqueuelen 1000  (Ethernet)
        RX packets 1072007  bytes 1602189438 (1.4 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 514109  bytes 41269959 (39.3 MiB)
        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

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:b3:8d:c9  txqueuelen 1000  (Ethernet)
        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

2.1.6. 配置NTP时间同步服务器

Linux操作系统和虚拟化平台的时间不同步会导致很多问题,尤其是虚拟化平台使用了集群功能、分布式存储功能等,那么搭建NTP服务器就非常重要了。NTP服务器可以是物理服务器,也可以是虚拟机。

服务器端NTP配置(蓝颜色)

第一步,使用命令“yum install ntp ntpdata”在CentOS 7服务器中安装ntp服务和ntpdate工具

[root@kvm01 ~]# yum install ntp ntpdata
已加载插件:fastestmirror, langpacks
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Loading mirror speeds from cached hostfile
……(以下内容省略)

第二步,使用ping命令检测本地NTP服务器与公用NTP服务器的连通性

使用阿里云NTP服务器作为公用的NTP服务器,CentOS 7 服务器作为本地NTP服务器在必要时刻需要向公用NTP服务器同步时间,因此必需确保本地NTP服务器与阿里云NTP服务器之前的互联互通。

[root@kvm01 ~]# ping ntp.aliyun.com
PING ntp.aliyun.com (203.107.6.88) 56(84) bytes of data.
64 bytes from 203.107.6.88 (203.107.6.88): icmp_seq=1 ttl=53 time=51.8 ms
64 bytes from 203.107.6.88 (203.107.6.88): icmp_seq=2 ttl=53 time=51.8 ms
64 bytes from 203.107.6.88 (203.107.6.88): icmp_seq=3 ttl=53 time=51.5 ms

[root@kvm01 ~]# ping ntp1.aliyun.com
PING ntp1.aliyun.com (120.25.115.20) 56(84) bytes of data.
64 bytes from 120.25.115.20 (120.25.115.20): icmp_seq=1 ttl=52 time=5.83 ms
64 bytes from 120.25.115.20 (120.25.115.20): icmp_seq=2 ttl=52 time=6.73 ms
64 bytes from 120.25.115.20 (120.25.115.20): icmp_seq=3 ttl=52 time=7.33 ms

第三步,修改ntp配置文件/etc/ntp.conf,将配置文件的默认NTP服务器地址注销

[root@kvm01 ~]# vim /etc/ntp.conf 
……(省略)
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# server 0.centos.pool.ntp.org iburst                 # 注销默认的centosntp服务器
# server 1.centos.pool.ntp.org iburst                 # 注销默认的centosntp服务器
# server 2.centos.pool.ntp.org iburst                 # 注销默认的centosntp服务器
# server 3.centos.pool.ntp.org iburst                 # 注销默认的centosntp服务器

第四步,修改ntp配置文件/etc/ntp.conf,新增如下配置

[root@kvm01 ~]# vim /etc/ntp.conf 

#日志文件
logfile /var/log/ntpd.log

#授权192.168.150.0网段上所有机器可以从这台机器上查询和时间同步
restrict 192.168.150.0 mask 225.225.225.0 nomotify notrap

#时间服务器列表
server ntp1.aliyun.com                         
server ntp2.aliyun.com
server ntp3.aliyun.com

#当外部时间不可用时,使用本地时间
server 127.0.0.1
fudge 127.0.0.1 stratum 10

#允许上层时间服务器主动修改本机时间
restrict ntp1.aliyun.com  nomodify notrap noquery
restrict ntp2.aliyun.com  nomodify notrap noquery
restrict ntp3.aliyun.com  nomodify notrap noquery

第五步,保存退出,重启ntp服务、加入开机自启动

[root@kvm01 ~]# systemctl disable chronyd      #关闭chrony自启动功能,否则NTP服务自启动失败
[root@kvm01 ~]# systemctl enable ntpd
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
[root@kvm01 ~]# systemctl restart ntpd

第六步,查询下当前的NTP服务器源信息

其中120.25.115.20和203.107.6.88是阿里云NTP服务器的IP地址。

[root@kvm01 ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*120.25.115.20   10.137.53.7      2 u   35   64   17   11.436   -0.857   4.066
 203.107.6.88    10.137.38.86     2 u   33   64   17   44.415    3.242   4.605
 localhost       .INIT.          16 l    -   64    0    0.000    0.000   0.000

第七步,启动ntp服务时,先手动同步下本地时间,注意这是本地NTP服务器与公用NTP服务器同步时间

[root@kvm01 ~]# ntpdate -u ntp1.aliyun.com
16 Oct 08:36:05 ntpdate[29087]: adjust time server 120.25.115.20 offset 0.004865 sec

第八步,查询ntp同步时间是否启动,如果出现以下命令执行结果,说明同步时间启动成功

[root@kvm01 ~]# ntpstat
synchronised to NTP server (120.25.115.20) at stratum 3
   time correct to within 13 ms
   polling server every 64 s

第九步,做为NTP服务器,需要在防火墙中开启放行ntp服务,否则NTP客户端无法同步时间

[root@kvm01 ~]# firewall-cmd --add-service=ntp --permanent 
[root@kvm01 ~]# firewall-cmd --reload

Linux客户端NTP配置(蓝颜色)

Linux客户端的NTP配置与服务器端NTP配置几乎一模一样,因为本地NTP服务器(192.168.150.151)其实也是公用NTP服务器的客户端。唯一不同的是在最后一步,无需在防火墙中开启放行ntp服务,我这里演示的是Debinn Linux客户端。

第一步,客户端安装ntp和ntpdate组件

root@pve:~# apt-get install ntp
root@pve:~# apt-get install ntpdate

第二步,使用ping命令检测客户端到本地NTP服务器的连通性

本地NTP服务器的IP地址是192.168.150.151,需确保NTP客户端与本地NTP服务器的连通性

root@pve:~# ping 192.168.150.151
PING 192.168.150.151 (192.168.150.151) 56(84) bytes of data.
64 bytes from 192.168.150.151: icmp_seq=1 ttl=64 time=4.70 ms
64 bytes from 192.168.150.151: icmp_seq=2 ttl=64 time=1.20 ms
64 bytes from 192.168.150.151: icmp_seq=3 ttl=64 time=1.48 ms

第三步,修改客户端配置文件/etc/ntp.conf,注销原有的NTP服务器

root@pve:~# vim /etc/ntp.conf
# pool 0.debian.pool.ntp.org iburst
# pool 1.debian.pool.ntp.org iburst
# pool 2.debian.pool.ntp.org iburst
# pool 3.debian.pool.ntp.org iburst

第四步,修改客户端配置文件/etc/ntp.conf,新增如下配置

root@pve:~# vim /etc/ntp.conf
#ntp服务器地址
pool 192.168.150.151

#允许上层时间服务器主动修改本机时间
restrict 192.168.150.151 nomodify notrap noquery 
#当外部时间不可用时,使用本地时间
pool 127.0.0.1      #本地时钟
fudge 127.0.0.1 stratum 10

第六步,保存退出,重启ntp服务、加入开机自启动

root@pve:~# service ntp start
root@pve:~# service ntp restart

第七步,查询下当前的NTP源信息,其中192.168.150.1是CentOS NTP服务器的IP地址

root@pve:~# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 192.168.150.151 .POOL.          16 p    -   64    0    0.000   +0.000   0.000
 127.0.0.1       .POOL.          16 p    -   64    0    0.000   +0.000   0.000

Linux客户端与NTP服务器测试(蓝色字体)

第一步,选择一台Linux主机作为客户端,使用命令“data”查看时间

root@pve:~# date
Sat 16 Oct 2021 09:05:48 AM CST

第二步,同步客户端与NTP服务器端的时间

root@pve:~# ntpdate -d 192.168.150.151
16 Oct 15:53:31 ntpdate[10432]: ntpdate 4.2.8p15@1.3728-o Wed Sep 23 11:46:38 UTC 2020 (1)
Looking for host 192.168.150.151 and service ntp
192.168.150.151 reversed to pve.local
host found : pve.local
transmit(192.168.150.151)
receive(192.168.150.151)
transmit(192.168.150.151)
receive(192.168.150.151)
transmit(192.168.150.151)
receive(192.168.150.151)
transmit(192.168.150.151)
receive(192.168.150.151)

server 192.168.150.151, port 123
stratum 3, precision -25, leap 00, trust 000
refid [120.25.115.20], root delay 0.006226, root dispersion 0.017593
reference time:      e5150300.1cc3bebd  Sat, Oct 16 2021 15:51:28.112
originate timestamp: e5150381.d4b56738  Sat, Oct 16 2021 15:53:37.830
transmit timestamp:  e5150381.d4162fc2  Sat, Oct 16 2021 15:53:37.828
filter delay:  0.03215    0.03011    0.03143    0.02934   
               ----       ----       ----       ----      
filter offset: -0.000538  +0.000440  +0.000617  +0.000077 
               ----       ----       ----       ----      
delay 0.02934, dispersion 0.00037, offset +0.000077

16 Oct 15:53:37 ntpdate[10432]: adjust time server 192.168.150.151 offset +0.000077 sec

Win 10客户端NTP配置以及与NTP服务器测试(蓝色字体)

第一步,使用ping命令检测Win10客户端与NTP服务器端网络连通性

C:\Users\lishe>ping 192.168.150.151
正在 Ping 192.168.150.151 具有 32 字节的数据:
来自 192.168.150.151 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.150.151 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.150.151 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.150.151 的回复: 字节=32 时间=1ms TTL=64

第二步,打开Win10客户的NTP时钟设置界面,点击“更改设置”,如图30所示

kvm如何打开bios kvm设置bios_kvm如何打开bios_30


图30. Win10客户端时间配置

第三步,将NTP服务器修改为192.168.150.151,点击“立即更新”按钮,如图31所示

kvm如何打开bios kvm设置bios_kvm如何打开bios_31


图31. 修改Win10客户端NTP服务器

第四步,Win10客户端与NTP服务器192.168.150.151时间同步成功,如图32所示

kvm如何打开bios kvm设置bios_云计算_32


图32. Win10客户端与NTP服务器时间同步成功

至此,NTP服务器和NTP客户端都搭建完成,并且可以正常使用。