知识点: (1)了解zabbix分布式监控系统。
技能点: (1)掌握zabbix分布式监控系统的搭建。 (2)掌握zabbix分布式监控系统的使用
。
1.规划节点
安装CentOS7.2-1511操作系统,云主机类型使用1vcpu/2G内存/20G硬盘。节点规划见表1-1。
表1-1 节点规划
| IP | 主机名 | 节点 |
|–|--|–|
| 192.168.20.10 | zabbix-server |server节点
| 192.168.20.20 | zabbix-agent | agent节点
2.基础环境准备
(1)IP地址配置
安装最小化CentOS 7.2-1511操作系统,配置两个节点的主机名与IP地址,并使用远程终端工具进行连接,示例代码如下:
Zabbix-server节点修改IP:
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=eno16777736 UUID=6599ef4f-5b4d-4215-bdae-7048b00510ba DEVICE=eno16777736 ONBOOT=yes IPADDR=192.168.20.10 PREFIX=24 Zabbix-agent节点修改IP: [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736 TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=eno16777736 UUID=6599ef4f-5b4d-4215-bdae-7048b00510ba DEVICE=eno16777736 ONBOOT=yes IPADDR=192.168.20.20 PREFIX=24修改完两个节点的IP地址后,使用远程工具连接虚拟机。
(2)配置主机名
节点配置主机名:
[root@localhost ~]# hostnamectl set-hostname zabbix-server //退出并重新连接虚拟机 [root@user1 ~]# hostnamectl Static hostname: zabbix-server Icon name: computer-vm Chassis: vm Machine ID: 17d24d21f1c34b699c19d5e84762b3fe Boot ID: 6ea800f863564e11afc5d91d65fafb3f Virtualization: vmware Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-327.el7.x86_64 [root@localhost ~]# hostnamectl set-hostname zabbix-agent //退出并重新连接虚拟机 [root@user2 ~]# hostnamectl Static hostname: zabbix-agent Icon name: computer-vm Chassis: vm Machine ID: 17d24d21f1c34b699c19d5e84762b3fe Boot ID: d6c808d94d6b4501b5ad740429e23aa4 Virtualization: vmware Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-327.el7.x86_64 Architecture: x86-64(3)Yum源配置
将提供的CentOS-7-x86_64-DVD-1511.iso镜像和zabbix文件夹上传至zabbix-server节点的/opt目录下。
在zabbix-server节点创建挂载目录:
[root@zabbix-server ~]# mkdir -p /opt/centos将CentOS-7-x86_64-DVD-1511.iso挂载到/opt/centos目录:
[root@zabbix-server opt]# mount CentOS-7-x86_64-DVD-1511.iso centos/ mount: /dev/loop0 is write-protected, mounting read-only挂载好iso文件后,将/etc/yum.repo.d目录下的所有文件移动到/media下。
[root@zabbix-server ~]# mv /etc/yum.repos.d/* /media/ 在/etc/yum.repo.d目录下创建local.repo文件,文件内容如下: [root@zabbix-server ~]# cat /etc/yum.repos.d/local.repo [centos] name=centos baseurl=file:///opt/centos gpgcheck=0 enabled=1 [zabbix] name=zabbix baseurl=file:///opt/zabbix gpgcheck=0 enabled=1接下来配置zabbix-agent节点的YUM源。首先在zabbix-server节点上安装vsftpd服务。
[root@zabbix-server ~]# yum install vsftpd -y修改vsftpd服务的配置文件vsftpd.conf,在配置文件的最上面,添加一行代码,命令如下:
[root@zabbix-server ~]# vi /etc/vsftpd/vsftpd.conf anon_root=/opt # Example config file /etc/vsftpd/vsftpd.conf # # The default compiled in settings are fairly paranoid. This sample file保存修改并退出,启动vsftpd服务,命令如下:
[root@zabbix-server ~]# systemctl start vsftpd [root@zabbix-server ~]# systemctl status vsftpd vsftpd.service - Vsftpd ftp daemon Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled) Active: active (running) since Fri 2019-10-04 19:04:54 UTC; 5s ago Process: 10014 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS) Main PID: 10015 (vsftpd) CGroup: /system.slice/vsftpd.service └─10015 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf Oct 04 19:04:54 zabbix-server systemd[1]: Started Vsftpd ftp daemon.到zabbix-agent节点上,首先将/etc/yum.repo.d目录下的所有文件移动到/media目录下,然后创建local.repo文件,文件内容如下所示:
[root@zabbix-agent ~]# mv /etc/yum.repos.d/* /media/ [root@zabbix-agent ~]# vi /etc/yum.repos.d/local.repo [centos] name=centos baseurl=ftp://192.168.20.10/centos gpgcheck=0 enabled=1 [zabbix] name=zabbix baseurl=ftp://192.168.20.10/zabbix gpgcheck=0 enabled=1至此,2个节点的Yum源全部配置完毕。
(4)安装LAMP+Zabbix服务(在zabbix-server节点执行)
安装httpd服务,命令如下:
[root@zabbix-server ~]# yum install httpd -y安装数据库服务,命令如下:
[root@zabbix-server ~]# yum install -y mariadb-server mariadb安装Zabbix服务,命令如下:
[root@zabbix-server ~]# yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server升级trousers服务,命令如下:
[root@zabbix-server ~]# yum install trousers -yzabbix分布式监控系统简介
Zabbix是一个用于网络,操作系统和应用程序的开源监控软件,由拉脱维亚的Alexei Vladishev创建。它旨在监视和跟踪各种网络服务,服务器和其他网络硬件的状态。
Zabbix可以使用MySQL,MariaDB,PostgreSQL,SQLite,Oracle或IBM DB2来存储数据。它的后端用C语言编写,Web前端用PHP编写。Zabbix提供多种监控选项:
简单检查可以验证标准服务(如SMTP或HTTP)的可用性和响应性,而无需在受监视主机上安装任何软件。
还可以在UNIX和Windows主机上安装Zabbix 代理,以监视CPU负载,网络利用率,磁盘空间等统计信息。
作为在主机上安装代理的替代方法,Zabbix支持通过SNMP,TCP和ICMP检查以及IPMI,JMX,SSH,Telnet和使用自定义参数进行监控。Zabbix支持各种近实时通知机制,包括XMPP。
zabbix由2部分构成,zabbix server与可选组件zabbix agent。
zabbix分布式监控系统部署
1.配置并启动Zabbix服务
(1)启动httpd服务
使用命令启动httpd服务,并设置开机自启,最后查看运行状态。命令如下:
[root@zabbix-server ~]# systemctl start httpd [root@zabbix-server ~]# systemctl enable httpd ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service' [root@zabbix-server ~]# systemctl status httpd httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled) Active: active (running) since Fri 2019-10-04 19:34:32 UTC; 27s ago Docs: man:httpd(8) man:apachectl(8) Main PID: 10215 (httpd) Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec" CGroup: /system.slice/httpd.service ├─10215 /usr/sbin/httpd -DFOREGROUND ├─10217 /usr/sbin/httpd -DFOREGROUND ├─10218 /usr/sbin/httpd -DFOREGROUND ├─10219 /usr/sbin/httpd -DFOREGROUND ├─10220 /usr/sbin/httpd -DFOREGROUND └─10221 /usr/sbin/httpd -DFOREGROUND Oct 04 19:34:31 zabbix-server systemd[1]: Starting The Apache HTTP Server... Oct 04 19:34:32 zabbix-server httpd[10215]: AH00557: httpd: apr_sockaddr_info_get() fa...er Oct 04 19:34:32 zabbix-server httpd[10215]: AH00558: httpd: Could not reliably determi...ge Oct 04 19:34:32 zabbix-server systemd[1]: Started The Apache HTTP Server. Hint: Some lines were ellipsized, use -l to show in full.(2)启动并配置数据库服务
启动数据库服务,并设置开机自启,命令如下:
[root@zabbix-server ~]# systemctl start mariadb [root@zabbix-server ~]# systemctl enable mariadb ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'登录数据库,创建zabbix库(中文编码格式),命令如下:
[root@zabbix-server ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.44-MariaDB MariaDB Server Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin; Query OK, 1 row affected (0.00 sec)授予zabbix用户的访问权限,命令如下:
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@'%' identified by 'zabbix'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix'; Query OK, 0 rows affected (0.00 sec)退出数据库,进入到/usr/share/doc/zabbix-server-mysql-3.4.15/目录,导入数据库文件,命令如下:
MariaDB [(none)]> Ctrl-C -- exit! Aborted [root@zabbix-server ~]# cd /usr/share/doc/zabbix-server-mysql-3.4.15/ [root@zabbix-server zabbix-server-mysql-3.4.15]# ll total 2120 -rw-r--r-- 1 root root 98 Nov 12 2018 AUTHORS -rw-r--r-- 1 root root 866545 Nov 12 2018 ChangeLog -rw-r--r-- 1 root root 17990 Nov 12 2018 COPYING -rw-r--r-- 1 root root 1267039 Nov 12 2018 create.sql.gz -rw-r--r-- 1 root root 52 Nov 12 2018 NEWS -rw-r--r-- 1 root root 1062 Nov 12 2018 README [root@zabbix-server zabbix-server-mysql-3.4.15]# zcat create.sql.gz |mysql -uroot zabbix至此,数据库配置完毕。
(3)设置时区
编辑/etc/php.ini文件,设置时区,在[Date]字段下,设置date.timezone=PRC,命令如下:
[root@zabbix-server ~]# vi /etc/php.ini [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = PRC 编辑/etc/httpd/conf.d/zabbix.conf文件,修改时区,修改php_value date.timezone 为Asia/Shanghai,命令如下: [root@zabbix-server ~]# vi /etc/httpd/conf.d/zabbix.conf <IfModule mod_php5.c> php_value max_execution_time 300 php_value memory_limit 128M php_value post_max_size 16M php_value upload_max_filesize 2M php_value max_input_time 300 php_value max_input_vars 10000 php_value always_populate_raw_post_data -1 # php_value date.timezone Europe/Riga php_value date.timezone Asia/Shanghai </IfModule>修改完配置文件后重启httpd服务,命令如下:
[root@zabbix-server ~]# systemctl restart httpd(4)修改Zabbix配置文件并启动
修改/etc/zabbix/zabbix_server.conf配置文件,修改完的配置文件如下所示:
[root@zabbix-server ~]# vi /etc/zabbix/zabbix_server.conf [root@zabbix-server ~]# grep -n '^'[a-Z] /etc/zabbix/zabbix_server.conf 38:LogFile=/var/log/zabbix/zabbix_server.log 49:LogFileSize=0 72:PidFile=/var/run/zabbix/zabbix_server.pid 82:SocketDir=/var/run/zabbix 91:DBHost=localhost 100:DBName=zabbix 116:DBUser=zabbix 124:DBPassword=zabbix 132:DBSocket=/var/lib/mysql/mysql.sock 330:SNMPTrapperFile=/var/log/snmptrap/snmptrap.log 447:Timeout=4 489:AlertScriptsPath=/usr/lib/zabbix/alertscripts 499:ExternalScripts=/usr/lib/zabbix/externalscripts 535:LogSlowQueries=30002.启动Zabbix服务
[root@zabbix-server ~]# systemctl start zabbix-server查看端口号,验证zabbix-server的服务端口10051是否存在,命令如下:
[root@zabbix-server ~]# netstat -ntpl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 10611/zabbix_server tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 10510/mysqld tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 975/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 886/master tcp6 0 0 :::10051 :::* LISTEN 10611/zabbix_server tcp6 0 0 :::80 :::* LISTEN 10579/httpd tcp6 0 0 :::21 :::* LISTEN 10015/vsftpd tcp6 0 0 :::22 :::* LISTEN 975/sshd tcp6 0 0 ::1:25 :::* LISTEN 886/master至此,Zabbix监控服务的server端配置完毕,接下来需要在Web界面操作。
3.使用Zabbix服务
(1)登录界面
在浏览器访问192.168.20.10/zabbix,进入Zabbix安装向导,单击右下角“Next step”按钮,进入下一步操作,如图4-6-1所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200903204420555.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDAzMzQ2Nw==,size_16,color_FFFFFF,t_70#pic_center)图1-3-1 Zabbix安装向导
显示PHP版本信息等内容,然后单击右下角“Next step”按钮,进入下一步操作,如图4-6-2所示:
图1-3-2 显示PHP版本信息
填写连接数据库的必要信息,Password为zabbix,填写内容如图4-6-3所示,填写完毕后单击右下角“Next step”按钮,进行下一步操作。
图1-3-3 填写连接数据库的信息
填写Zabbix服务端的详细信息,内容如图4-6-4所示,Name字段可以随意填写,是给监控平台起个名字。然后单击右下角“Next step”按钮,进行下一步操作。
图1-3-4填写Zabbix服务端的详细信息
平台配置概况如图4-6-5所示,确认后单击右下角“Next step”按钮。
图1-3-5 平台配置概况
安装Zabbix,安装成功后,单击右下角“Finish”按钮,结束安装,如图4-6-6所示。
图1-3-6 结束配置
单击“Finish”按钮后,进入登录界面,使用默认的用户名和密码Admin/zabbix登录,如图4-6-7所示。
图1-3-7 登录Zabbix平台
进入Zabbix主页,如图1-3-8所示。
图1-3-8 Zabbix主页
(2)中文界面
单击右上角的头像按钮,进入设置界面,如图4-6-9所示。
图1-3-9 用户界面
将“Language”一栏修改为“Chinexe(zh CN)”,然后单击下方“Update”按钮,如图4-6-10所示。
图1-3-10 修改界面配置
中文界面的Zabbix监控界面已配置完成,如图4-6-11所示。
图1-3-11 配置完成
(3)添加被监控机器
回到zabbix-agent节点,安装zabbix-agent服务,命令如下:
[root@zabbix-agent ~]# yum install -y zabbix-agent修改/etc/zabbix/zabbix_agentd.conf配置文件,配置zabbix-agent,修改如下:
[root@zabbix-agent ~]# vi /etc/zabbix/zabbix_agentd.conf [root@zabbix-agent ~]# grep -n '^'[a-Z] /etc/zabbix/zabbix_agentd.conf 13:PidFile=/var/run/zabbix/zabbix_agentd.pid 32:LogFile=/var/log/zabbix/zabbix_agentd.log 43:LogFileSize=0 97:Server=192.168.20.10 138:ServerActive=192.168.20.10 149:Hostname=Zabbix-agent 267:Include=/etc/zabbix/zabbix_agentd.d/*.conf启动zabbix-agent服务,并查看10050端口是否存在,命令如下:
[root@zabbix-agent ~]# systemctl start zabbix-agent [root@zabbix-agent ~]# netstat -ntpl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 10613/zabbix_agentd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 979/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 899/master tcp6 0 0 :::10050 :::* LISTEN 10613/zabbix_agentd tcp6 0 0 :::22 :::* LISTEN 979/sshd tcp6 0 0 ::1:25 :::* LISTEN 899/master回到Web界面,选择菜单栏“配置”→“主机”→“创建主机”命令,会跳转到如图4-6-12所示的配置主机的页面。
图1-3-12 创建主机
填写信息,将zabbix-agent节点添加到被监控机器,填写信息如图4-6-13所示。然后单击下方“添加”按钮。
图1-3-13 添加被监控机器
添加完毕后如图4-6-14所示。
图1-3-14 添加结果
添加监控项,单击“zabbix-agent”名称,然后单击“模板”标签,进行添加模板操作界面,如图4-6-15所示。
图1-3-15 添加监控模板
单击图4-6-15中的“选择”按钮,进行监控模板添加,在跳转界面勾选用户想要监控的复选框,然后单击下方“选择”按钮,如图4-6-16所示。
图1-3-16 选择监控模板
选择完模板后,如图1-3-17所示。
图1-3-17 模板选择完毕
单击“添加”按钮,显示链接的模板,然后单击“更新”按钮,如图4-6-18所示。
图1-3-18 更新模板
单击“更新”按钮后,zabbix-agent节点被添加到监控中,如图4-6-19所示。
图1-3-19 更新结果
(4)监控机器
在最上面的选择菜单栏中“监测中”→“图形”命令,群组选择Linux server,主机选择zabbix-agent,图形选择需要显示的监控项,此处选择为CPU jumps,如图4-6-20所示。
图1-3-20 显示的监控项
需要被监控的主机,首先安装zabbix-agent服务,然后修改配置文件并启动服务。登录Zabbix的Web界面,添加主机,并添加监控模板。成功添加后,就可以通过Zabbix界面进行主机的监控。
KVM虚拟化技术
案例描述
1、了解虚拟化技术及KVM虚拟化技术相关知识点。
2、了解KVM组建的安装及利用KVM技术启动虚拟机。
3、完成以下知识和技能点:
知识点:
● 了解KVM虚拟化的使用坏境。
● 了解KVM虚拟化的工作方式。
● 了解KVM虚拟化的优势与特点。
技能点:
● 掌握KVM的安装环境配置。
● 掌握KVM在CentOS 6.5上的安装方法和步骤。
● 掌握KVM可视化管理工具的安装方法和步骤。
● 掌握KVM远程连接软件的安装连接方法。
案例准备
规划节点准备两台Linux操作系统,一台为Centos7,另一台为Centos6.5,规划节点见表1-1,表1-2。
IP
主机名
节点
自行分配
localhost
单节点服务器
表1-1
IP
主机名
节点
自行分配
localhost
单节点服务器
表1-2
2.基础环境准备
(1)IP地址配置
安装最小化CentOS 7.2操作系统,配置单节点IP地址,并使用远程终端工具进行连接,示例代码如下:
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 TYPE=Ethernet BOOTPROTO=static //地址分配改为静态模式 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=eno16777736 UUID=d487d944-e79c-49a7-ad62-78d328d45760 DEVICE=eno16777736 ONBOOT=yes //设置系统启动时激活网卡 IPADDR=192.168.20.10 GATEWAY=192.168.20.2 PREFIX=24 [root@localhost ~]# systemctl restart network
案例实施
实验一 KVM介绍
1、认识虚拟化
(1)什么是虚拟化技术?
虚拟化(Virtualization)在计算机中是一个广义的术语,是将计算机的各类物理资源,比如网络、内存、存储等,加以抽象、转换后呈现给用户,使得用户以更好的方式来使用这些资源。如图1-1 虚拟化示意图。
图1-1 虚拟化示意图
(2)虚拟化的分类
虚拟化可分为桌面虚拟化、应用虚拟化、服务器虚拟化、网络虚拟化与存储虚拟化。
l桌面虚拟化:将原本在本地计算机上安装的桌面系统统一在后端数据中心进行部署和管理。用户可以通过任何设备在任何地点与任何时间访问自己的桌面系统环境。
l应用虚拟化:将原本安装在本地计算机操作系统上的应用程序统一运行于后台终端服务器上。
l服务器虚拟化:将服务器的物理资源等抽象成逻辑资源,形成一个动态管理的“资源池”,并创建合适的虚拟服务器。实现服务器的资源整合,提升资源利用率,最终更好的适应IT业务的变化。
2、认识KVM虚拟化
(1)什么是KVM虚拟化?
Kernel-based Virtual machine(基于内核的虚拟机),是一个开源软件,基于内核的虚拟化技术,通过优化内核来使用虚拟技术,该内核模块使得 Linux 变成了一个Hypervisor,虚拟机使用 Linux 自身的调度器进行管理。
KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。
(2)KVM虚拟化技术应用领域及未来发展
KVM虚拟化技术已经在业内受到了大力支持。两大巨头RedHat与IBM公司已经建立合作伙伴关系,展望未来这两家公司还为企业级虚拟项目管理器、IBM Tivoli以及IBM Director开发新的应用接口,已解决云计算技术的引入、数据中心自动化、虚拟存储及网络等各种问题。
目前KVM与VMware、HyperV等产品相比,处在一个比较优势的环境下,因为它汲取了其他虚拟化技术的优点,并且在推出时性能就非常的优异,受到一致好评,国内新一代公有云技术则全部采用KVM做为底层的虚拟化引擎,KVM已经成为开源解决方案的主流选择。
3、KVM虚拟机两种网络模式
(1)NAT的概念
NAT(Network Address Translation,网络地址转换)指在专用网内部的一些主机本来已经分配到了本地IP地址(即本地局域网IP),但现在又想和因特网上的主机通信时,可使用NAT方法解决两者之间的通信问题。
NAT的实现通信有三种:
l静态转换(Static Nat)
静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。
l动态转换(Dynamic Nat)
动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。
l端口多路复用(OverLoad)
端口多路复用(Port address Translation,PAT)是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation)。采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对因特尔的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自网络的攻击。因此,目前网络中应用最多的就是端口多路复用方式。
这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
另外,这种通过使用少量的公有IP地址代表较多的私有IP地址的方式,将有助于减缓可用的IP地址空间的枯竭。在RFC1632中有对NAT的说明。
(2)NAT网络原理
众所周知,IPV4(Internet Protocol Version 4,网际协议版本4)的地址资源已近乎枯竭,而NAT使内网的多个主机可以共用一个IP地址接入网络,这样有助于节约IP地址资源,这也是NAT最主要的作用。
另外,通过NAT访问外部网络的内部主机,其内部IP对外是不可见的,这就隐藏了NAT内部网络拓扑结构和IP信息,也就能够避免内部主机受到外部网络的攻击。客观事物总是有正反两面性的,没有任何技术是十全十美的。NAT技术隐藏了内部主机细节从而提高了安全性,但是如果NAT内的主机作为Web或数据库服务器需要接受来自外部网络的主动连接,这时NAT就出现了局限性。不过,可以在拥有外网IP的主机上使用Iptables等工具实现端口映射,从而使外网对这个外网IP某个端口的访问被重新映射到NAT内网某个主机的相应端口上。
在QEMU-KVM中,默认使用IP伪装的方式去实现NAT,而不是使用SNAT (Source-NAT,源地址转换)或DNAT(Destination-NAT,目的地址转换)的方式。
在KVM中配置客户机的NAT网络方式,需要在宿主机中运行一个DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)服务器给宿主机分配NAT内网的IP地址,可以使用DNSMASQ工具来实现。在KVM中,DHCP服务器为客户机提供服务的基本架构。
NAT方式是KVM安装后的默认方式。它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。
检查当前的网络设置。
default active yes yes 注意:default是宿主机安装虚拟机支持模块的时候自动安装的。
(3)Bridge网络原理
在QEMU-KVM的网络使用中,Bridge(网桥)模式可以让客户机和宿主机共享一个物理网络设备连接网络,客户机有自己独立的IP地址,可以直接连接与宿主机一模一样的网络,客户机可以访问外部网络,外部网络也可以直接访问客户机(就像访问普通物理主机一样)。即使宿主机只有一个网卡设备,使用Bridge模式也可让多个客户机与宿主机共享网络设备,Bridge模式使用非常方便,应用也非常广泛。
桥接网络被用作把一个物理设备复制到一台虚拟机上。网桥多用作高级设置,特别是主机有多个网络接口的情况。网桥的基本原理就是创建一个桥接接口br0,在物理网卡和虚拟网络接口之间传递数据,如图1-2。
图1-2
(4)Bridge模式脚本编写
l qemu-ifup脚本的示例
在客户机启动网络前,执行的脚本配置的选项是script(默认路径为/etc/qemu-ifup),一般在该脚本中会去创建一个TAP设备并将其与Bridge绑定起来。其中$1是QEMU-KVM命令工具传递给脚本的参数,它是客户机使用的TAP设备名称(如tap0、tap1等,也或者是前面提及的ifname选项的值)。
另外,其中tunctl命令这一行是不需要的,因为qemu-bridge-helper程序已经创建好TAP设备,这里列出来只是为了再次确保,因为在一些版本较旧的QEMU-KVM中可能没有自动创建TAP设备。
QEMU-KVM安装和启动虚拟系统需要和外界通信,那么就是必须需要设置桥接,在这个脚本中实现了TAP的虚拟网卡设置由DOWN转为UP状态,如果想与外界通信,则可以手动执行生效。脚本中,需要把虚拟的TAP网卡桥接到br0的设备上与外界通信。
#!/bin/bash switch=br0 if [ -n $1 ];then ifconfig $1 up sleep 1 brctl addif $switch $1 exit 0 else echo “Error: No Specifed interface.” exit 1 fi
l qemu-ifdown脚本示例
由于QEMU-KVM工具在客户机关闭时会去解除TAP设备与Bridge的绑定,也会自动删除已不再使用的TAP设备,所以qemu-ifdown这个脚本不是必需的,最好设置为downscript=no。如下代码所示,列出了一个qemu-ifdown脚本的示例,是为了说明清理Bridge模式网络环境的步骤,在QEMU-KVM没有自动处理时可以使用。
#vi /etc/qemu-ifdown #!/bin/bash switch=br0 if [ -n “$1” ]; then tunctl -d $1 brctl delif ${switch} $1 ip link set $1 down exit 0 else echo “Error: no interface specified” exit 1 fi
实验二 配置KVM虚拟使用NAT模式
1、环境配置
(1)开启虚拟化环境
图1-3 单击编辑虚拟机设置
图1-4单机处理器
图1-5 勾选虚拟化引擎三个选项
(2)配置本地yum源
[root@localhost ~]# mv /etc/yum.repos.d/* /media/
[root@localhost ~]# vi /etc/yum.repos.d/local.repo
[centos]
name=centos
baseurl=file:///mnt
gpgcheck=0
enabled=1
[root@localhost ~]# mount /dev/sr0 /mnt/
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: centos
…(后面省略)…
[root@localhost ~]# yum repolist
Loaded plugins: fastestmirror
centos | 3.6 kB 00:00:00
(1/2): centos/group_gz | 155 kB 00:00:00
(2/2): centos/primary_db | 2.8 MB 00:00:00
Determining fastest mirrors
repo id repo name status
centos centos 3,723
repolist: 3,723
(3)临时关闭selinux及防火墙
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
(4)安装KVM组件
[root@localhost ~]# yum install qemu-kvm openssl libvirt -y
(5)启动启动libvirtd服务
[root@localhost ~]# systemctl start libvirtd
(6)将/usr/libexec/qemu-kvm链接为/usr/bin/qemu-kvm:
[root@localhost ~]# ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm
(7)将cirros-0.3.3-x86_64-disk.img镜像与qemu-ifup-NAT脚本文件上传到系统/root目录下,并将脚本赋予执行权限
[root@localhost ~]# ls
anaconda-ks.cfg cirros-0.3.3-x86_64-disk.img qemu-ifup-NAT.txt
[root@localhost ~]# chmod +x qemu-ifup-NAT.txt
[root@localhost ~]# ll
total 12988
-rw-------. 1 root root 958 Apr 30 13:15 anaconda-ks.cfg
-rw-r–r--. 1 root root 13287936 Oct 14 2019 cirros-0.3.3-x86_64-disk.img
-rwxr-xr-x. 1 root root 2094 Oct 6 2019 qemu-ifup-NAT.txt
2、启动虚拟机
(1)通过qemu-kvm命令启动KVM虚拟机,预计等待十分钟,用户名:cirros,密码是:cubswin:)
[root@localhost ~]# qemu-kvm -m 1024 -drive file=/root/cirros-0.3.3-x86_64-disk.img,if=virtio -net nic,model=virtio -net tap,script=/root/qemu-ifup-NAT.txt -nographic -vnc :1
图1-6
(2)通过命令查看网卡信息、执行关机命令
图1-7
实验三 配置KVM虚拟机使用Bridge网络
1、配置基本环境
(1)安装brctl和tunctl命令行工具,要采用Bridge模式的网络配置,首先需要安装两个RPM包,即bridge-utils和tuned,它们提供所需的brctl和tunctl命令行工具
[root@localhost ~]# yum install bridge-utils tunctl
(2)查看tun模块是否加载
[root@localhost ~]# lsmod |grep tun
tun 17095 2 vhost_net
(3)创建bridge
[root@localhost ~]# brctl addbr br0
[root@localhost ~]# brctl addif br0 eth0
(4)创建对应的网桥IP,删除eth0网口的IP地址,如下代码所示。
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=none TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=no DRIDGE=br0 [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-br0 //自己创建 DEVICE=br0 TYPE=bridge ONBOOT=yes NM_CONTROLLED=no BOOTPROTO=static IPADDR=30.8.0.120 NETMASK=255.255.255.0 GATEWAY=30.8.0.1 DNS1=114.114.114.114
(5)重启网络,同时查看网络和网桥的配置信息
[root@localhost~]#service network restart
Shutting down interface bre: [OK]
Shutting down interface eth0: [OK]
Shutting down loopback interface: [OK]
Bringing up loopback interface: [OK]
Bringing up interface bro:Determining if ip address36.8.6.120is already in use for devicebr0… [OK]
Bringingup interface eth0: [OK]
[root@localhost ~]# ip addr list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:ec:49:15 brd ff:ff:ff:ff:ff:ff
inet6 fe80::20c:29ff:feec:4915/64 scope link
valid_lft forever preferred_lft forever
3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
link/ether 52:54:00:00:49:aa brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 500
link/ether 52:54:00:00:49:aa brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
link/ether 00:0c:29:ec:49:15 brd ff:ff:ff:ff:ff:ff
inet 30.8.0.120/24 brd 30.8.0.255 scope global br0
inet6 fe80::20c:29ff:feec:4915/64 scope link
valid_lft forever preferred_lft forever
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
30.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1005 0 0 br0
0.0.0.0 30.8.0.1 0.0.0.0 UG 0 0 0 br0
[root@localhost ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29ec4915 no eth0
virbr0 8000.5254000049aa yes virbr0-nic
2、启动虚拟机
(1)上传cirros镜像,并使用命令启动虚拟机
[root@localhost ~]#qemu-kvm -m 512 -drive file=cirros-0.3.3-x86_64-disk.img,if=virtio -net nic,model=virtio -net tap,script=/root/qemu-ifup -nographic -vnc :2
(2)查看br0桥。
[root@localhost ~]# brctl show br0 bridge name bridge id STP enabled interfaces br0 8000.000c2982d685 no eth0 tap0
这样就设置一个桥接的网络,查看网桥的接口信息可以看到默认已经绑定到br0桥。该配置表示连接宿主机的TAP网络接口到n号VLAN中,并且使用file和dfile两个脚本在启动7客户机时配置网络,并在关闭客户机时取消网络配置。TAP参数,表明使用TAP设备。TAP是虚拟网络设备,它仿真了一个数据链路层设备,它像以太网的数据帧一样处理第二层数据包,而TUN与TAP类似,也是一种虚拟网络设备,它是对网络层设备的仿真。TAP用于创建一个网桥,而TUN与路由相关。vlan=n设罝该设备VLAN编号,默认值为0。
实验四 KVM可视化管理工具
1、KVM环境配置
(1)在桌面右击选择open in terminal配置网卡信息,并使用远程终端工具进行链接
图1-8
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:02:48:95
TYPE=Ethernet
UUID=bb484c6b-cd67-4768-bb59-6f7d3a6cc0e3
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.20.10
GATEWAY=192.168.20.2
PREFIX=24
[root@localhost ~]# service network restart
Shutting down interface eth0: Device state: 3 (disconnected)
[ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: Active connection state: activated
Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/2
[ OK ]
(2)修改内核模式为兼容内核启动
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# vi /boot/grub/grub.conf
generated by anaconda
do not have to rerun grub after making changes to this file
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=1 //将default=0,修改成default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-431.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=128M rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-431.el6.x86_64.img
(3)临时关闭selinux及清除防火墙规则
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
[root@localhost ~]# chkconfig ip6tables
[root@localhost ~]# chkconfig iptables
(4)查看是否支持虚拟机
[root@localhost ~]# egrep -c ‘(vmx|svm)’ /proc/cpuinfo
2
如果执行这条命令的返回结果为0,则表示CPU不支持虚拟化;如果返回结果为1或者大于1的数字,则表示CPU支持虚拟化。其中vmx为Intel的CPU指令集,svm为AMD的CPU指令集。
2、安装KVM
(1)安装KVM软件包
[root@localhost ~]# yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python virt-manager libvirt-client virt-install virt-viewer -y
[root@localhost ~]# yum -y install libguestfs-tools
(2)查看虚拟机环境
[root@localhost ~]# service libvirtd start
Starting libvirtd daemon:
[root@localhost ~]# /etc/init.d/libvirtd restart
Stopping libvirtd daemon: [ OK ]
Starting libvirtd daemon: [ OK ]
[root@localhost ~]# virsh -c qemu:///system list
Id Name State
[root@localhost ~]# lsmod |grep kvm
kvm_intel 54285 0
kvm 333172 1 kvm_intel
[root@localhost ~]# virsh --version
0.10.2
[root@localhost ~]# virt-install --version
0.600.0
[root@localhost ~]# ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm
3、使用rpm安装 virt-manager
[root@localhost ~]# rpm -qa |grep virt-manager
virt-manager-0.9.0-19.el6.x86_64
4、virt-manager的使用
(1)登录CentOS 6.5的图形用户界面中,在主页面中选择“Applications→System Tools→Virtual Machine Manager”菜单命令
图1-9
(2)上传Centos7镜像到/root目录下,配置并创建新虚拟机
图1-10
(3)选择启动镜像
图1-11
(4)选择内存
图1-12
(5)选择磁盘空间大小
图1-13
(6)完成配置
图1-14
(7)进入Centos7安装界面
图1-15
(8)选择系统语言为English
图1-16
(9)选择磁盘
图1-17
图1-18
(10)配置root用户登陆密码,密码为000000
图1-19
图1-20
(11)安装后登录系统命令行页面
图1-21
(12)完成配置完成之后,Libvirt和virt-manager工具会默认创建以客户机名称来命名的客户机的XML 配置文件和磁盘镜像文件,查看XML配置和镜像文件的命令行
[root@localhost ~]# cd /etc/libvirt/qemu/.
[root@localhost qemu]# ll
total 8
-rw------- 1 root root 2405 May 9 05:48 demo.xml
drwx------ 3 root root 4096 May 9 04:43 networks
实验五 远程连接(VNC)
1、VNC简介
VNC(Virtual Network Computing)是一款优秀的远程控制工具软件,它是基于UNIX和Linux操作系统的免费的开放源码软件,远程控制能力强大,高效实用,其性能可以和Windows和MAC中的任何远程控制软件相媲美。
VNC基本上是由两部分组成:一部分是客户端的应用程序(vncviewer);另外一部分是服务器端的应用程序(vncserver)。VNC的基本运行原理和Windows下的一些远程控制软件很相像。VNC的图形用户界面十分友好,看上去和Windows下的软件界面也很类似。在任何安装了vncviewer的Linux平台的计算机都能十分方便地和安装了vncserver的计算机相互连接。另外,服务器端还内建了Java Web接口,这样用户通过服务器端对其他计算机的操作就能通过Netscape显示出来了,这样的操作过程和显示方式比较直观方便。VNC是远程连入操作系统,所有操作在UNIX、Linux主机服务端进行,即使操作过程中本地电脑与操作主机网络断开,也不影响操作的顺利进行。
2、安装VNC服务
[root@localhost ~]# yum install tigervnc-server tigervnc -y
3、配置vncserver密码
密码为123456
[root@localhost ~]# vncserver
You will require a password to access your desktops.
Password:
Verify:
xauth: creating new authority file /root/.Xauthority
New ‘localhost.localdomain:1 (root)’ desktop is localhost.localdomain:1
Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/localhost.localdomain:1.log
4、配置VNC
为防止黑屏,需要修改/root/.vnc/xstartup
[root@localhost ~]# vi /root/.vnc/xstartup
#!/bin/sh
[ -r /etc/sysconfig/i18n ] && . /etc/sysconfig/i18n
export LANG
export SYSFONT
vncconfig -iconic &
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
OS=uname -s
if [ $OS = ‘Linux’ ]; then
case “$WINDOWMANAGER” in
gnome)
if [ -e /etc/SuSE-release ]; then
PATH=$PATH:/opt/gnome/bin
export PATH
fi
;;
esac
fi
if [ -x /etc/X11/xinit/xinitrc ]; then
exec /etc/X11/xinit/xinitrc
fi
if [ -f /etc/X11/xinit/xinitrc ]; then
exec sh /etc/X11/xinit/xinitrc
fi
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
#xterm -geometry 80x24+10+10 -ls -title “$VNCDESKTOP Desktop” & //注释
#twm & //注释
gnome-session & //添加
5、修改vncservers配置文件
[root@localhost ~]# vi /etc/sysconfig/vncservers
variable is a list of display:user pairs.
lines below to start a VNC server on display :2
‘myusername’ (adjust this to your own). You will also
VNC password; run ‘man vncpasswd’ to see how
SERVICE if your local area network is
http://kbase.redhat.com/faq/docs/DOC-7028
“-nolisten tcp” to prevent X connections to your VNC server via TCP.
“-localhost” to prevent remote VNC clients connecting except when
through a secure tunnel. See the “-via” option in the
manual page.
VNCSERVERS=“2:root” //取消注释,并修改
VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost" //取消注释
[root@localhost ~]# source /etc/sysconfig/vncservers
6、修改xstartup权限
[root@localhost ~]# chmod 777 /root/.vnc/xstartup
7、修改iptables配置文件第十行内容,并重启
[root@localhost ~]# vi /etc/sysconfig/iptables
configuration written by system-config-firewall
customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp --dport 5900:5903 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
[root@localhost ~]# service iptables restart
iptables: Setting chains to policy ACCEPT: nat mangle filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: [ OK ]
8、启动VNC服务器
[root@localhost ~]# /etc/init.d/vncserver start
Starting VNC server: 2:root
New ‘localhost.localdomain:2 (root)’ desktop is localhost.localdomain:2
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/localhost.localdomain:2.log
[ OK ]
9、登录VNC客户端
l在vncview下进行登录时首先要保证虚拟机的VNC连接是否已被启用,如图1-22
l输入地址时,保证IP地址与端口号同时书写,端口号为5900与VNC序号组合在一起的,VNC序号可执行vncserver进行查看,如图1-23、图1-24
l登录后页面如图1-25
图1-22
图1-23
图1-24
图1-25