====== CentOS 6下KVM环境的安装和配置 ====== KVM是Kernel-based Virtual Machine的缩写,是虚拟化的一种实现方案。本文主要参考[[http://www.redhat.com|RedHat]]虚拟化方面的官方文档: * [[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/index.html|Virtualization Administration Guide]] * [[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Getting_Started_Guide/index.html|Virtualization Getting Started Guide]] * [[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/index.html|Virtualization Host Configuration and Guest Installation Guide]] * [[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Security_Guide/index.html|Virtualization Security Guide]] 更多信息均可以从官网获得,下面只简要说明处理步骤。 ===== 安装软件包 ===== 除了基本的KVM软件包,也同时安装一些管理工具: yum install kvm yum install virt-manager libvirt libvirt-python python-virtinst libvirt-client 各个软件包的详细说明,可参阅:[[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/sect-Virtualization_Host_Configuration_and_Guest_Installation_Guide-Host_Installation-Installing_KVM_packages_on_an_existing_Red_Hat_Enterprise_Linux_system.html|Installing virtualization packages on an existing Red Hat Enterprise Linux system]]。 KVM包含全套的命令行工具,如果在图形界面下,使用virt-manager是最简单的方式。 ===== SELinux ===== SELinux是无法回避的一套安全机制,详细信息可参考官方文档[[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/index.html|Security-Enhanced Linux]]。很多人图省事,简单的禁用了它。个人不建议这么做,相反,还安装如下的一些软件包,方便管理: yum install policycoreutils-python yum install setroubleshoot yum install setroubleshoot-server yum install setools-console 同时,启用auditd服务,记录安全日志,以便能更容易找到解决方案: chkconfig auditd on ===== 存储 ===== KVM支持本地和网络的存储,每种又支持很多模式。详细说明可参阅:[[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/chap-Virtualization_Administration_Guide-Storage_Concepts.html|Storage concepts]]。 最简单的本地存储模式就是文件系统目录,本地存储缺省目录在/var/lib/libvirt/images/下。在[[.:platform|虚拟机学习平台的搭建]]一文中已准备好了一个文件系统/raid0,通过virt-manager将其添加到存储池里,以后就可以利用这块存储空间来建立虚拟机了。 对于比较简单的NFS网络模式,需要注意的是,要让虚拟机能利用远端服务器的NFS存储,需要设置SELinux: /usr/sbin/setsebool -P virt_use_nfs=1 NFS对网络要求很高,这也是在[[.:platform|虚拟机学习平台的搭建]]一文中提到至少千兆网卡的原因,百兆网络的速度还不如一些本地移动设备。 ===== 网络 ===== ==== 虚拟网络 ==== 每个虚拟网络就好比是一台交换机(switch),使用同一个虚拟网络的虚拟机就如同接在同一台交换机上,彼此可以互相通信。 KVM支持多种虚拟网络模式: * NAT模式(缺省),虚拟机通过IP伪装与外界通信,外界无法访问虚拟机; * Routed模式,虚拟网络如同一台路由器,路由设置正确后,内外可互访; * Isolated模式,虚拟机只能与宿主机以及同一个虚拟网络上的其他虚拟机通信。 有关虚拟网络的详细说明,可参阅:[[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/chap-Virtualization_Administration_Guide-Virtual_Networking.html|Virtual Networking]]。 ==== 桥接模式 ==== 还有一种模式称为桥接(bridge)模式,此模式下,虚拟机就如同一台真实的物理机器展现在外界。 要配置桥接模式,需要禁用NetworkManager,恢复传统的网络配置模式: chkconfig NetworkManager off chkconfig network on service NetworkManager stop 编辑桥接对应的物理网卡配置文件(以eth0为例)/etc/sysconfig/network-scripts/ifcfg-eth0: DEVICE="eth0" ONBOOT=yes HWADDR=8C:89:A5:56:2C:B2 BRIDGE=br0 这里只需指定物理地址和桥接设备名称br0,详细的网络参数下面设置。 新建桥接设备配置文件/etc/sysconfig/network-scripts/ifcfg-br0: DEVICE="br0" TYPE=Bridge BOOTPROTO=none ONBOOT=yes DELAY=0 IPADDR=192.168.176.20 PREFIX=24 GATEWAY=192.168.176.1 DNS1=192.168.176.1 DEFROUTE=yes 注意“TYPE=Bridge”的大小写,其余都是传统的网络参数了。 完毕启动网络: service network start 针对桥接,需要修改防火墙设置,让所有桥接数据都forward通过: iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT service iptables save service iptables restart 显示桥接状态: brctl show 有关桥接网络的详细说明,可参阅:[[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/sect-Virtualization_Host_Configuration_and_Guest_Installation_Guide-Network_Configuration-Network_Configuration-Bridged_networking_with_libvirt.html|Bridged networking with libvirt]]。 ===== 应用 ===== 一些应用案例(不断更新): [[.:net_simulation | 用KVM虚拟机模拟网络环境]] [[.:hadoop | Hadoop集群环境的模拟]] [[.:openmpi | OpenMPI并行环境的模拟]] [[.:mongodb | MongoDB数据库集群的模拟]] {{tag>CentOS 虚拟化}}