一、linux桌面系统及vnc安装

1、桌面安装

[root@localhost ~]# yum -y install gdlibjpeg libjpeg-devel libpng libpng-devel freetype-devel 

  [root@localhost ~]# yum -y install autoconfbison automake zlib* fiex* libxml* ncurses-   devel libmcrypt* libtool-ltdl-devel*


在字符界面下安装Gnome桌面,你需要安装两个组。

  [root@localhost ~]# yum groupinstall"X Window System"
  [root@localhost ~]# yum groupinstall"Desktop"

启动Gnome桌面

Startx

2、vnc服务安装

yum install –y tigervnc-server


若想用其他用户连接vnc则添加连接vnc的用户,默认为root用户

vi /etc/sysconfig/vncservers vnc 配置文件
VNCSERVERS=”1:root” (桌面号:用户)
VNCSERVERARGS[2]="-geometry 800x600-nolisten tcp -localhost"


必须明白:vncserver在调用的时候,会根据你的配置来启用server端的监听端口端口默认是从5900开始,再加上你的桌面号。比如你的桌面号为1,则vnc的连接端口号为5900+1=5901,如果使用浏览器访问的话,则端口号为 5800+桌面号

vncpasswd 为登陆用户设置密码

修改桌面 cd ~/.vnc

vi xstartup

gnome-session & 使用gnome桌面

#twm & 禁用默认桌面

service vncserver start

chkconfig vncserver on

启动vnc 报错:

[root@slavetwo ~]# vncserver

WARNING: The first attempt to start Xvnc failed,possibly because the font

catalog is not properly configured.  Attempting to determine an appropriate

font path for this system and restart Xvncusing that font path ...

Could not start Xvnc.....................

[dix] Could not init font path elementcatalogue:/etc/X11/fontpath.d, removing from list!

[dix] Could not init font path elementbuilt-ins, removing from list!

Fatal server error:

could not open default font 'fixed'

处理方法:

yum install libXfont xorg-x11-xinitxorg-x11-fonts-Type1


二、kvm安装

安装环境centos6.3 _X64

1、修改内核模式为兼容模式

default=1

实战kvm_第1张图片

2、关闭selinux

3、关闭防火墙

4、虚拟化环境配置

查看是否支持虚拟化

#egerp ‘(vmx|svm)’ /proc/cpuinfo


5、kvm软件包安装

  yum install kvm kmod-kvm qemu kvm-qemu-img virt-viewervirt-manager libvirt libvirt-python python-virtinst tunctl bridge-utilsqemu-kvm-tools virt-v2v libguestfs-tools
  yum groupinstall KVM


6、查看虚拟化环境

service libvirtd restart
virsh –c qemu:///system list


wKiom1LKbsSB4929AAAgN-A4nmc231.jpg

7、查看kvm模块支持

lsmod | grep kvm

8、查看虚拟工具版本

virsh –version

wKioL1LKbuTBkYGRAAAgCILCszo907.jpg

9、手动配置虚拟网桥

关闭networkmanaer 服务,关闭了networkmanger,才能通过service network restart 来管理网络

chkconfig NetworkManager off

service NetworkManager stop

wKiom1LKb4LhxFPNAAAu6xsrwto647.jpg

创建br0网桥

cd /etc/syscofigure/network-script

cp ifcfg-eth0 ifcfg-br0

vi ifcfg-br0

DEVICE=br0

ONBOOT=yes

TYPE=Bridge

BOOTPROTO=static

IPADDR=10.1.6.209

NETMASK=255.255.255.0

GATEWAY=10.1.6.251

DNS1=202.106.0.20

STP=on

DELAY=0

  Vi ifcfg-eth0

  DEVICE=em1

BOOTPROTO=none

UUID="3515f9c6-502a-46d4-b9c8-3b36f2435eb8"

ONBOOT=yes

BRIDGE=br0

TYPE=Ethernet

重启网络服务

查看网桥ifconfig

实战kvm_第2张图片

 开启网络转发功能

 echo 1 > /proc/sys/net/ipv4/ip_forward


 检查桥接网络

 brctl show

wKioL1LKb_nAx2-FAABEa7KRyIA770.jpg

10、创建一个虚拟机

chkconfig libvirtd on
virsh-install 
–name=hadoop1 
–ram=2048 
–vcpus=4 
–disk path=/data/kvm/hadoop1.img,size=20 
–network bridge=br0 
–graphics vnc,password=123456,port=5092 
–force 
–autostart 
–cdrom=/data/software/CentOS-6.3-x86_64-bin-DVD1.iso
修改vi /etc/libvirt/qemu.conf
vnc_listen=”0.0.0.0”
vi /etc/libvirt/qemu/hadoop1.xml


重启虚拟机virsh restart hadoop1

11、通过远程桌面连接工具连接虚拟机

实战kvm_第3张图片

实战kvm_第4张图片

到此可以在虚拟机上安装系统了,系统安装完成后在客户机上执行

chkconfig acpid on;service acpid restart,这样关闭域才会生效

三、kvm的管理

1、kvm虚拟机默认配置文件位置: /etc/libvirt/qemu

2、virsh–help帮助

3、kvm虚拟机状态查看

virsh list –all

4、开启、关闭虚拟机,强制关闭电源

virsh start hadoop1

virsh shutdown hadoop1

virsh destroy hadoop1

5、克隆虚拟机,修改配置文件后通过配置文件启动虚拟机

方法一:

virt-clone –o hadoop1 –n hadoop2 –f /data/kvm/hadoop2.img

注意新生产虚拟机后需要修改hadoop2.xml的域名、uuid、镜像位置、vnc端口、mac地址(新生产虚拟机的mac地址与原始虚拟机相同,注意修改网卡、虚拟机配置文件mac的一致).

virsh create /etc/libvirt/qemu/hadoop2.xml

以hadoop2.xml的配置文件启动虚拟机

方法二:

复制配置文件与磁盘文件克隆

virsh shutdown hadoop1

virsh dumpxml hadoop1 >/etc/libvirtd/qemu/hadoop2.xml

cp /data/kvm/hadoop1.p_w_picpath /data/kvm/hadoop2.p_w_picpath

virsh define /etc/libvritd/qemu/hadoop2.xml

克隆多个虚拟机网络方面可能的报错:

device eth0 does not seem tobe present, delaying initialization

原因分析: 很多Linuxdistribution使用udev动态管理设备文件,并根据设备的信息对其进行持久化命名。例如在centos中,udev会在系统引导的过程中识别网卡,将mac地址和网卡名称对应起来记录在udev的规则脚本中。而kvm会自动生成虚拟机的mac地址。这样,由于基本系统的虚拟机已经记录了该虚拟机的网卡mac地址对应于网卡eth0,在克隆出的虚拟机中由于mac地址发生改变,udev会自动将该mac对应于网卡eth1。以此类推,udev会记录所有已经识别的mac与网卡名的关系,所以每次克隆网卡名称会自动加1,而其实kernel仅仅只识别到一张网卡,跟网卡名相关的网络配置也未发生任何变化。

解决方案:

udev将mac与网卡名称的对应关系保存在/etc/udev/rules.d/70-persistent-net.rules删除此文件,重启虚拟机,会自动生成这却的配置文件

6、配置开机启动虚拟机

virsh autostart hadoop2

7、导出kvm虚拟机配置文件

virsh dumpxml hadoop2 >/etc/libvirt/qemu/hadoop2.xml.bak

8、添加、删除、重定义虚拟机、编辑kvm虚拟机配置文件

只是删除了hadoop2的配置文件,磁盘文件并未删除

virsh undefined hadoop2

通过备份文件恢复原kvm虚拟机的定义

mv /etc/libvirt/qemu/hadoop2.xml.bak/etc/libvirt/qemu/hadoop2.xml

virsh define /etc/libvirt/qemu/hadoop2.xml

调用vi修改虚拟机配置文件,可以通过vi来修改保存但不建议直接使用

virsh edit hadoop2

四、kvm的时间配置

注:在虚拟化环境中,虚拟机在长时间运行过程中,时间会变慢,通常的作法是ntpdate定时与时间服务器进行时间同步的计划任务,KVM虚拟机默认采用utc时间需要专门修改,以及考虑kvm时间同步问题

1、kvm虚拟机采用utc时间(通用协调时间)与GMT(格林威治时间)相同,首先需要修改配置文件使虚拟机的时间与主机的时间同步

实战kvm_第5张图片

修改utc为localtime,保存退出重启虚拟机

实战kvm_第6张图片

2、关于kvm虚拟机时间问题解决思路

(1)虚拟机时间慢是所有虚拟化平台的一共性问题。

(2)解决时间的最终解决方法就是在生产环境中配置时间服务器,kvm虚拟化服务器与kvm机均都要配置时间同步的计划任务,这才是解决这一个问题最终解决方案。

示例:如果能访问互联网,最简单了,需要kvm虚拟机与主机时间同步,但是运行一段时间会慢,一定要做时间同步,特别是对时间敏感的环境。

crontab-e

01*/3 * * * /usr/sbin/ntpdate ntp.fudan.edu.cn >> /dev/null 2>&1

五、kvm 虚拟机镜像格式转换、快照备份

kvm虚拟机默认使用raw格式的镜像格式,性能最好,速度最快,它的缺点就是不支持一些新的功能,如支持镜像,zlib磁盘压缩,AES加密等。

1、查看当前虚拟机镜像格式、虚拟机镜像格式转换

 qemu-img info hadoop1.img

wKiom1LKcOrzBp_GAAA0xj0A1iE570.jpg

raw格式转换成qcow2

virshshutdown hadoop1

qemu-imgconvert –f raw –o qcow2 hadoop1.img hadoop1.qcow2

-f 原镜像格式

-O 目标镜像格式(大写o)


wKioL1LKcN2DxeMzAABSfnLfOMU549.jpg

修改虚拟机配置文件,虚拟机镜像格式及镜像名wKiom1LKcOrzqQarAABXFuMfSpg306.jpg2、虚拟机快照管理

对hadoop1虚拟机创建快照

virsh snapshot-create-as –domain hadoop1 –namehadoop1_snap.20131213

报错:raw格式无法实现快照

wKioL1LKcN7A2i7nAAArw8_jbac864.jpg

六、为虚拟机增加磁盘空间

增加磁盘的格式为sda/vda

生成一块新的硬盘

qemu-imgcreate –f raw /data/kvm/diskone.img 10G

将磁盘附加到虚拟机上

virshattach-disk –domain hadoop3 –source=/data/kvm/diskone.img

登陆hadoop3

fdisk–l

实战kvm_第7张图片

mkdir-p /mnt/adddiskone

挂载磁盘mount/dev/vda /mnt/adddiskone

df查看硬盘过载情况实战kvm_第8张图片


kvm优化八方面


kvm优化:


一,由于不是vps商,只有少量的2个kvm我们完全可以在kvm宿主机中关闭Kernel SamePage Merging(KSM),开启会浪费内核资源。echo 0 > /sys/kernel/mm/ksm/run

或者chkconfig ksm off    chkconfig ksmtuned off


二,2、KVM Huge Page Backed MemoryX86 CPU通常使用4Kb内存页,使用巨页,KVM的虚拟机的页表将使用更少的内存,并且将提高CPU的效率。最高情况下,可以提高20%的效率!使用方法:


mount -t hugetlbfs hugetlbfs /dev/hugepages

sysctl vm.nr_hugepages=516

qemu-kvm - qemu-kvm -mem-path /dev/hugepages


三,宿主文件系统使用ext4,开启noatime


四,virtio是KVM的半虚拟化机制,用以提高IO性能,使用virtio可以显著提高KVM性能。


五,开启writeback选项:

-drive file=debian.img,if=virtio,index=0,media=disk,format=qcow2,cache=writeback


六,虚拟机磁盘格式选择qcow2 + 预分配 preallocation-metadata


七,关闭所有kvm宿主机种的无用进程,只保留ssh。                            


八,定制内核,把io调度调成noop,去除无关驱动,功能。


九,开启内核preemption抢占。



kvm IO优化的措施, KVM优化措施

(1)采用virtio磁盘控制器

kvm设计了virtio类型的磁盘控制器,是针对磁盘和网络的一个半虚拟化接口,以提高效率为目的。

Linux内核中已经集成进去了,window平台的话,必须安装相应的驱动:http://libvirt.org/windows.html


   

   

         


   

 

(2)预分配策略

对于qcow2的镜像:

qemu-img create -f qcow2 -o preallocation=metadata centos_test0_preallc.qcow2 20G

对于已有的镜像可以做如下的转换,来实现预分配

qemu-img convert -f qcow2 -O qcow2 -o preallocation=metadata centos_test0_nopreallc.qcow2        centos_test0_preallc.qcow2

(3)禁用缓存模式

 

   

   

   

(4) 在虚拟机中elevator=noop 宿主机中elevator=deadline

(5) 文件系统noatime, nodiratime


Kernel SamePage Merging(KSM)

在CentOS下KSM是打开的,Debian下KSM是关闭的。KSM的原理,是多个进程中,Linux将内核相似的内存页合并成一个内存页。这个特性,被KVM用来减少多个相似的虚拟机的内存占用,提高内存的使用效率。由于内存是共享的,所以多个虚拟机使用的内存减少了。这个特性,对于虚拟机使用相同镜像和操作系统时,效果更加明显。

但是,事情总是有代价的,使用这个特性,都要增加内核开销,用时间换空间。所以为了提高效率,可以将这个特性关闭。方法是:

两种关闭方式:

echo 0 > /sys/kernel/mm/ksm/run或者

hkconfig ksm off

chkconfig ksmtuned off另外,如果要使用KSM特性,也可以对参数进行调优。

具体参见:

http://www.linuxtopia.org/online ... ation_chap-KSM.html

2、KVM Huge Page Backed Memory

intel 的X86 CPU通常使用4Kb内存页,当是经过配置,也能够使用巨页(huge page):

(4MB on x86_32, 2MB on x86_64 and x86_32 PAE)

使用巨页,KVM的虚拟机的页表将使用更少的内存,并且将提高CPU的效率。最高情况下,可以提高20%的效率!

使用方法,需要三部:

mount -t hugetlbfs hugetlbfs /dev/hugepages

#保留一些内存给巨页

sysctl vm.nr_hugepages=516

#给 kvm 传递参数 hugepages

qemu-kvm - qemu-kvm -mem-path /dev/hugepages其中第三步,也可以在配置文件里加入:

验证方式,当虚拟机正常启动以后,在虚拟机里查看:

cat /proc/meminfo |grep -i HugePages_Free3、sheepdog 存储的使用

taobao有已经在sheepdog上做了很多工作,代码贡献量已经排在最前面。

taobao已经在95个物理机和950个虚拟机的环境下,做了测试。