用KVM虚拟化网络服务
2016-11-26
引言:最近,单位购进一台配置较高的服务器,准备将单位重要的网络服务安装在这一台服务器上,同时要兼顾维护方便。笔者决定采用服务器虚拟化来解决。由于单位的门户网站、数据中心和电子邮件都是基于Linux系统,从兼容性和经济性方面考虑,笔者准备采用基于Linux系统的KVM解决方案。
单位的服务器设备大都是2009年左右采购的,早已进入淘汰期,受经费的限制,一直没有得到更新。虽然在管理员的精心维护之下,这些设备大部分还在正常运行,但由于单位的门户网站、数据中心、电子邮件等重要服务都安装在这些设备之上,管理维护的压力越来越大。不久前,单位终于购进了两台配置较高的服务 器(E5-2620V3×2,64G,1T×6),除有一台必须安装指定服务外,还有一台服务器可以自由支配。怎样将单位重要的网络服务安装在一台服务器上面,同时又要兼顾维护方便呢?笔者不禁打起了服务器虚拟化的主意。
目前,常见的服务器虚拟化解决方案有基于Linux系统的KVM,基于Windows系统的Hyper-V,以及适合任何系统的老牌虚拟化软件VMware。由于单位的门户网站、数据中心和电子邮件都是基于Linux系统,从兼容性和经济性方面考虑,笔者准备采用基于Linux系统的KVM解决方案。
安装配置KVM服务器
KVM服务器系统我们准备采用最新的CentOS7,CentOS是 RHEL(Red Hat Enterprise Linux)源代码再编译的产物,而且在RHEL的基础上修正了不少已知的Bug,相对于其他Linux发行版,其稳定性值得信赖。
1.安装CentOS系统
从CentOS官方网站下载最新的DVD版本,刻录DVD光盘或者写入优盘进行系统安装。在安装过程中我们需要注意以下几点:系统默认语言尽量选择英语,如果选择中文,将来使用VNC远程管理的时候会出现乱码。软件选择使用“最小虚拟化主机”(如图1),其他软件需要的时候再安装。手动配置硬盘分区,根据自己的需要,可以为虚拟机划分单独的硬盘空间(比如划分单独的/data分区)。
系统安装完毕以后,首先运行yum update更新一下系统,将系统升级到最新,然后运行以下命令,查看是否已经在BIOS中开启了VT。
# lsmod|grep kvm
如果在命令输出中包含kvm 525409 1 kvm_intel等字样,说明已经开启了VT,否则就要重启系统进入BIOS进行设置,启动VT功能。
2.配置桥接网络
KVM虚拟机支持多种网络模式,比较常用的是Bridged(桥接模式)和NAT(网络地址转换模式),我们需要虚拟机具备和独立主机相同的功能,可以与其他机器互相访问,所以在这里我们选择Bridged(桥接模式)。
图1 选择最小虚拟化主机安装模式
(1)复制ifcfg-enp2s0f0(每台服务器的网卡名称不一样,以自己的名称为准)配置文件为 ifcfg-br0,并将ifcfg-br0修改为如下配置:
TYPE=Bridge
#桥接模式
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=10.7.3.220
#服务器的IP地址
NETMASK=255.255.255.0
GATEWAY=10.7.3.1
#网关地址
(2) 原 网 卡ifcfgenp2s0f0配置文件只需要保留以下内容,其他全部注释掉:
NAME= enp2s0f0
DEVICE= enp2s0f0
ONBOOT=yes
BRIDGE=br0
(3)重启网络让桥接模式生效
# service network restart
3.安装图形界面
作为网络服务器,一般不用安装图形界面,但考虑到使用virt-manager在图形界面下管理虚拟机非常方便,加之以后可能需要使用VNC远程管理KVM服务器,所以安装一个最基本的图形界面还是非常有必要的。
(1)安装virt-manager管理工具
# yum install virtmanager
(2)安装图形界面
# yum groupinstall"X Window System"
# yum install gnome-classic-session gnometerminal nautilus-openterminal control-center liberation-mono-fonts
(3)设置系统默认启动图形界面
# unlink /etc/systemd/system/default.target
# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
如果不想让KVM服务器默认启动图形界面,这一步可以不做设置,当需要启用图形界面的时候,输入startx即可。
(4)重新启动系统
# reboot
服务器重启之后,我们就有一个具备图形界面的KVM服务器了。
转化物理机为KVM虚拟机
KVM服务器安装完毕以后,就可以根据需要建立自己的虚拟机了。如何将正在运行的服务器平滑地迁移到KVM虚拟机,这是我们面临的一个大问题。所幸,RedHat已经为我们研发了virt-p2v这个将物理机转化为虚拟机的工具,它可以通过SSH连接物理机和转化服务器(转化服务器也可以安装在KVM服务器上面)对目标服务器进行在线迁移。
图2 配置连接转化服务器所需账号
图3 配置虚拟机各项参数
1.准备迁移环境
(1)安装转化服务器
# yum install virtv2v
转化服务器可以单独安装,也可以和KVM服务器安装在一起,为方便起见,我们将转化服务器安装在KVM服务器上面。
(2)制作virt-p2v迁移工具
从 这 个 网 站(http://oirase.annexia.org/virtp2v/)下载最新的P2V光盘镜像文件,然后刻录光盘或者写入优盘待用。
(3)配置转化服务器sshd服务
修 改/etc/ssh/sshd_config配置文件,并做如下修改:
AllowTcpForwarding yes #允许tcp转发
PermitRootLogin yes #允许root用户登录
启动sshd服务
# systemctl start sshd.service
查看sshd运行状态
# netstat -anput|grep ssh
2.迁移目标服务器
将P2V工具光盘或者优盘接入目标服务器,然后设置目标服务器从光盘或者优盘启动,进入P2V配置界面(如图2),输入转化服务器IP地址、用户名和密码(在这里我们使用root账号),勾选“Use sudo when running virt-v2v”,然后点击左下角的“Configure network...”为P2V工具设置一个可用的局域网IP地址。最后,点击“Test connection”检查一下SSH是否可以连接,如果出现“connected to the conversion server”的提示,说明P2V工具已经成功连接到转化服务器。
点击“next”进入配置虚拟机界面(如图 3),在这里我们可以根据自己的实际情况,配置虚拟机的名称、CPU数量和内存大小,勾选需要进行转化的目标服务器上的所有磁盘和网络接口(如果P2V工具使用优盘启动,不要勾选转化优盘)。
需要特别注意的是,在Virt-v2v输出选项卡中,Output to支持很多类型,比较常用的是local和libvirt。如果转化服务器和KVM服务器安装在一起,libvirt选项可以直接生成正常运行的虚拟机;如果你想指定存放路径,手工添加虚拟机,可以选择local类型,然后在Output storage里面指定路径。Output format支持raw和qcow2两种虚拟文件格式,P2V工具默认输出raw格式,不要试图修改输出格式为qcow2,否则会在转化过程中出错。如果想在虚拟机中使用qcow2格式,可以在转化完成后再进行设置。这里我们选择输出类型为libvirt,其他选项保持默认即可,注意勾选“Enable server-side debugging”选项,以便出错时我们可以进行调试工作。
虚拟机配置全部完成后,就可以点击“Start conversion”按钮进行转化了,根据网络速度和硬件配置的不同,转化物理机所需的时间也不尽相同,一般说来,一块300GB容量的磁盘需要转化8-10个小时的时间。您可以根据自己的实际情况,安排在晚上或者周末进行服务器的迁移工作,尽量减少服务器的宕机时间。一旦迁移工作完成,应该马上关闭目标服务器,如无必要就不要再重新启动它。
登录KVM服务器,会发现我们转化物理机生成的虚拟机已经可以正常运行了,只是它的虚拟文件系统是raw格式,如果需要快照功能,那么qcow2格式也许更加适合你,两种虚拟文件格式的性能差距已经很小,qcow2格式完全可以满足我们的需要。使用如下命令可以将raw格式的虚拟文件转换成qcow2格式:
# Qemu-img convert-f raw -O qcow2 raw文件名 qcow2文件名
虚拟文件格式转换完成后,记着在虚拟机的虚拟硬件列表中将虚拟磁盘的格式由raw更改为qcow2,然后重新启动虚拟机。
安装配置远程管理工具
到目前为止,我们已经有了一台正常运行的KVM服务器,通过virt-manager软件,可以在图形界面下完成对虚拟机的克隆、安装、调试和开关机等绝大部分操作。不过,这些操作必须在机房里才可以进行,安装维护极为不便,为此我们需要安装VNC远程管理工具。
1.安装配置VNC服务器
(1)安装VNC服务器
# yum install tigervnc-server -y
(2)修改VNC配置
VNC配置文件在/etc/systemd/system目录下,我们可以将 /lib/systemd/sytem/vncserver@.service模板文件复制一份到该目录下并修改名称。
# cp /lib/systemd/system/vncserver@.service/etc/systemd/system/vncserver@:1.service
然后打开配置文件/etc/systemd/system/vncserver@:1.service替换掉默认用户名,找到下面这一行:
ExecStart=/sbin/runuser -l <USER> -c"/usr/bin/vncserver %i"
PIDFile=/home/<USER>/.vnc/%H%i.pid
这里需要用root账号登录,所以替换成:
ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i"
PIDFile=/root/.vnc/%H%i.pid
不建议使用普通账号登录VNC,因为容易产生各种错误。
(3)重新加载systemd
# systemctl daemonreload
(4)设置VNC密码
# vncpasswd
确保输入的密码多于6个字符。
(5)关闭和禁止防火墙
# systemctl stop firewalld.service
图4 使用VNC客户端连接KVM服务器
#关闭防火墙
# systemctl disable firewalld.service
#禁止开机启动防火墙
(6)开启VNC服务
# systemctl enable vncserver@:1.service #开机自动启动VNC服务
# systemctl start vncserver@:1.service #启动VNC服务
(7)使用客户端连接VNC
现在,VNC服务器的安装已经完成,不过要连接到VNC服务器,我们还需要在本地计算机上安装仅供连接远程计算机使用的VNC客户端。你可以用像Tightvnc viewer和Realvnc viewer此类的客户端来连接到VNC服务器(如图4)。
如果需要更多的用户连接VNC服务器,那就需要创建新的配置文件和端口。请返回到第二步,添加一个新的用户和端口。你需要创建类似vncserver@:x.service的配置文件,并替换该文件里的用户名和之后步骤里相应的文件名、端口号,并确保登录VNC服务器用的是之前配置VNC密码的那个用户名。
2.其他常用命令
(1)自动开启虚拟服务
# Systemctl enable libvirtd
(2)查看虚拟机名称及状态
# virsh list --all
(3)让虚拟机开机自动启动
# virsh autostart 虚拟机名称
设置完成后,可以在/etc/libvirt/qemu/autostart下看到已设置自动启动的KVM配置文件链接。
经验总结
经过一段时间的运行,证明虚拟化技术具备很多独特的优势,网络管理和维护变得非常简单,可以减轻网络管理人员的工作压力。对于很多基层单位来说,网络服务虚拟化是一个不错的选择。