深度實踐KVM筆記


深度實踐KVM筆記

 

 

 

libvirt(virt-install,API,服務,virsh)-》qemu(qemu-kvm進程,qemu-img)-》KVM虛擬機-》kvm.ko 內核模塊  P7

/etc/init.d/libvirtd
virsh

 

 

騰訊雲一樣要自己手動進入虛擬機擴容




第3章   CPU,內存虛擬化技術


CPU 的嵌套技術nested特性,使用kvm虛擬機在理論上可以無限嵌套下去,只要物理機性能足夠 P23
numastat          P25
                           node0
numa_hit                 4309388
numa_miss                      0
numa_foreign                   0
interleave_hit             18480
local_node               4309388
other_node                     0


numactl  --hardware
available: 1 nodes (0)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
node 0 size: 4095 MB
node 0 free: 3034 MB
node distances:
node   0
  0:  10

 
Linux系統默認是打開自動numa平衡策略,關閉Linux系統的自動numa平衡   P25
echo 0 >/proc/sys/kernel/numa_balancing #關閉
echo 1 >/proc/sys/kernel/numa_balancing  #開啟


virsh  numatune設置虛擬機的numa配置


CPU熱添加是centos7的一個新特性,物理機和虛擬機都必須是centos7,windows虛擬機必須是windows2012標准版或數據中心版 P32

cat /proc/interrupts   在虛擬機里面查看當前系統有多少個cpu   P33
cat /proc/cpuinfo  
echo 1 >   /sys/devices/system/cpu/cpu3/online   在虛擬機里面激活第4個cpu
echo 0 >   /sys/devices/system/cpu/cpu3/online   在虛擬機里面關閉第4個cpu




KSM技術  P39
KSM:kernel  samepage  merging,將相同內存頁進行合並
KSM服務
ksmtuned服務
service ksm start
service ksmtuned start
chkconfig ksm on
chkconfig ksmtuned on
cat   /sys/kernel/mm/ksm/*   查看ksm的運行情況




巨型頁large page技術 P44
X86默認的內存頁是4KB,但也可以使用2MB或1GB的巨型頁
kvm虛擬機可以通過分配巨型頁提升性能,centos5需要手動開啟巨型頁,centos6有一種透明巨型頁面的技術,默認開啟巨型頁,並可以自動調整
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
三個選項
always  總是使用巨型頁
madvise  避免改變內存占用
never  不使用巨型頁
cat /proc/meminfo|grep -i huge
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
cat /proc/sys/vm/nr_hugepages
0
修改巨型頁的pagesize,N是巨型頁的pagesize
sysctl  vm.nr_hugepages=N   
掛載巨型頁
mount -t  hugetlbfs  hugetlbfs  /dev/hugepages




第4章   網絡虛擬化技術
半虛擬化網卡
解決全虛擬化網卡效率低下的一個辦法就是使用半虛擬化驅動程序Virtio。
要使用Virtio需要在宿主機和客戶機分別安裝Virtio驅動。
Linux內核從2.6.24開始支持Virtio,現在的內核版本一般是2.6.32,只需要較新的Linux內核即可,不需要安裝
在宿主機和客戶機執行下面命令,如果有Virtio字樣輸出證明支持Virtio,如果是windows,需要安裝Virtio驅動
 grep -i  Virtio /boot/config-2.6.32-504.el6.x86_64
CONFIG_NET_9P_VIRTIO=m
CONFIG_VIRTIO_BLK=m
CONFIG_SCSI_VIRTIO=m
CONFIG_VIRTIO_NET=m
CONFIG_VIRTIO_CONSOLE=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_VIRTIO=m
CONFIG_VIRTIO_RING=m
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_BALLOON=m

配置半虛擬化網卡的方法
在虛擬機的xml配置文件里找到interface節,修改model type為Virtio
 <interface type='bridge'>
      <mac address='52:54:00:28:a9:12'/>
      <source bridge='br0'/>
      <model type='e1000'/>  全虛擬化網卡     <model type='virtio'/>  半虛擬化網卡  沒有指定網卡的model默認是8139全虛擬化網卡,e1000是intel公司的千兆網卡,8139是百兆網卡
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

步驟:

lspci   #修改之前
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 03)
00:04.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)
00:04.1 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)
00:04.2 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)
00:04.7 USB controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)
00:05.0 RAM memory: Red Hat, Inc Virtio memory balloon
1、虛擬機關機


2、修改xml配置文件
virsh edit gzxtest01

 <interface type='bridge'>
      <mac address='52:54:00:c9:60:0b'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>


3、虛擬機開機
virsh  start  gzxtest01


lspci   #修改之后
00:03.0 Ethernet controller: Red Hat, Inc Virtio network device
00:04.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)
00:04.1 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)
00:04.2 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)
00:04.7 USB controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)
00:05.0 RAM memory: Red Hat, Inc Virtio memory balloon


看到這個提示Ethernet controller: Red Hat, Inc Virtio network device表示已經使用Virtio網卡



在virt-install 安裝的時候,不能指定model=Virtio網卡
Starting install...
ERROR    internal error process exited while connecting to monitor: char device redirected to /dev/pts/4
2016-08-11T02:42:41.500805Z qemu-kvm: -device Virtio,netdev=hostnet0,id=net0,mac=52:54:00:7d:a3:18,bus=pci.0,addr=0x3: Parameter 'driver' expects a driver name
Try with argument '?' for a list.

 
Windows   P63
Virtio驅動網卡在2014年10月之后工作很穩定,沒有網絡閃斷情況,可以在生產環境使用
Linux
Linux內核默認集成Virtio驅動,大部分Linux發行版可以直接使用Virtio驅動網卡。RHEL5.4之后建議使用Virtio網卡


vhost_net技術  P66
運行一台虛擬機是由用戶空間的QEMU和內核空間的KVM共同完成,QEMU模擬各種設備提供給虛擬機,KVM負責模擬CPU和內存
Virtio的后端處理程序一般有用戶空間的QEMU提供,為了進一步減少延遲,比較新的內核中已經增加了一個vhost_net的驅動模塊,在內核中
實現了Virtio的后端處理程序
vhost_net配置
虛擬機的xml配置文件默認就是使用vhost_net
<interface type='bridge'>   #接口方式橋接
      <mac address='52:54:00:28:a9:12'/>
      <source bridge='br0'/>
      <driver name='vhost'/> #driver name這個可加可不加
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>


數據包從虛擬機到物理機的過程

virtio原理 前端

virtio原理 后端




網卡的中斷和多隊列
中斷優化腳本效果測試   P68
mpstat -P ALL  5 2  
Linux 2.6.32-504.el6.x86_64 (gzxkvm53)     08/12/2016     _x86_64_    (4 CPU)

10:36:09 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
10:36:09 AM  all    0.00    0.00    0.01    0.07    0.00    0.00    0.00    0.03   99.88
10:36:09 AM    0    0.00    0.00    0.01    0.09    0.00    0.00    0.00    0.04   99.86
10:36:09 AM    1    0.01    0.00    0.03    0.08    0.00    0.00    0.00    0.06   99.82
10:36:09 AM    2    0.00    0.00    0.00    0.07    0.00    0.00    0.00    0.02   99.91
10:36:09 AM    3    0.00    0.00    0.00    0.05    0.00    0.00    0.00    0.02   99.92

以上顯示機器有四個邏輯CPU
它顯示了系統中 CPU 的各種統計信息。–P ALL 選項指示該命令顯示所有 CPU 的統計信息,  
而不只是特定 CPU 的統計信息。參數 5 2 指示該命令每隔 5 秒運行一次,共運行 2 次。


mpstat 可以顯示每個處理器的統計,  
而 vmstat 顯示所有處理器的統計。因此,編寫糟糕的應用程序(不使用多線程體系結構)可能會運行在一個多處理器機器上,  
而不使用所有處理器。從而導致一個 CPU 過載,而其他 CPU 卻很空閑。通過 mpstat 可以輕松診斷這些類型的問題
針對 Oracle 用戶的用法  
   與 vmstat 相似,mpstat 命令還產生與 CPU 有關的統計信息,因此所有與 CPU 問題有關的討論也都適用於 mpstat。  
當您看到較低的 %idle 數字時,您知道出現了 CPU 不足的問題。當您看到較高的 %iowait 數字時,  
您知道在當前負載下 I/O 子系統出現了某些問題。該信息對於解決 Oracle 數據庫性能問題非常方便


RSS需要網卡硬件的支持,在使用不支持RSS的網卡時,為了充分利用多核CPU,centos6.1開始提供了RPS和RFS功能 P69
而RSS僅僅是根據hash值確定處理器。
由於RFS/RSS都不能提供irq affinity hint,所以使用irqbalance足夠。

 
網卡PCI Passthrough技術   P71
物理網卡直接給虛擬機使用,性能幾乎達到物理網卡一樣
PCI Passthrough技術是虛擬化網卡的終極解決方案,能夠讓虛擬機獨占物理網卡,達到最優性能。
對宿主機的物理網卡數量有要求,目前主流服務器都有4塊以上的網卡,實際使用的時候,可以將1~2塊網卡通過PCI Passthrough技術分給網絡
壓力大的虛擬機

 

網卡綁定的7種模式   P80

http://www.cnblogs.com/MYSQLZOUQI/p/4255675.html(CentOS工作內容(六)雙網卡帶寬綁定bind  teaming)

mode=0 balance-rr 多端口輪詢發送數據包
mode=1 active-backup 主備模式,不需要交換機支持
mode=2 balance-xor 每個接口上傳輸每個數據包,具有容錯功能
mode=3 802.3ad 基於802.3ad IEEE802.3ad dynamic link aggreagtion 動態鏈路聚合,需要和交換機配合,功能不大,不建議使用
mode=4 balance-tlb 每塊網卡根據當前負載根據速度計算,分配外出流量,發送數據包自動負載均衡,接受數據包由current active slave負責,具容錯功能,其中一塊網卡失效依然可以繼續工作,不需要交換機支持
mode=5 broadcast 所有網卡一起收發網絡數據包,有容錯功能,其中一個網卡斷線依然可以工作,基於hash算法發送數據包
mode=6 balance-alb 針對ipv4做了優化,收發都可以自動負載均衡,有容錯功能,其中一個網卡斷線也可以工作,網卡驅動需支持setting hardware address功能,不需要交換機支持


 

第5章   kvm磁盤虛擬化技術和場景

qemu磁盤虛擬化方式 P83
qemu最初是一款軟件模擬器,所以qemu的磁盤都是通過軟件模擬的,后來qemu和kvm結合
性能有很大提升,磁盤和網卡一樣,也有了virtio這樣的半虛擬化技術
centos6.x只支持ide和virtio磁盤類型
centos7.x增加支持sata和virtio-scsi磁盤類型

virtio-scsi和virtio是半虛擬化磁盤

 

磁盤I/O從虛擬機到宿主機流向

 

虛擬機磁盤的緩存模式 P86
1、默認,不指定緩存模式的情況下,1.2版本qemu-kvm之前是writethough,1.2版本之后qemu-kvm, centos虛擬機默認的緩存模式就是none
2、writethough:使用O_DSYNC語義
3、writeback:不是O_DSYNC語義也不是O_DIRECT語義,虛擬機數據到達宿主機頁面緩存page cache就給虛擬機返回寫成功報告,頁面緩存機制管理數據的合並寫入宿主機存儲設備
4、none:使用O_DIRECT語義,I/O直接在qemu-kvm用戶空間緩存和宿主機存儲設備之間發生,要求I/O方式設置為aio=native,不能使用宿主機的page cache,相當於直接訪問磁盤,有優越性能
5、unsafe:跟writeback一樣,但是不能發出刷盤指令,只有在虛擬機被關閉時候才會將數據刷盤,不安全
6、directsync:同時使用O_DSYNC語義和O_DIRECT語義

緩存模式的數據一致性
writethough、none、directsync
能保證數據一致性,有一些文件系統不兼容none或directsync模式,這些文件系統不支持O_DIRECT語義

writeback
不能保證數據一致性,在數據報告寫完成和真正合並寫到存儲設備上一個時間窗口期,這種模式在宿主機故障時候會丟失數據,因為數據還存在在宿主機的page cache里


unsafe
不保證數據一致性,忽略刷盤指令,只有在虛擬機被關閉時候才會將數據刷盤,不安全

從數據測試來看,none方式的4K隨機讀寫都要比其他的緩存模式高,建虛擬機的時候使用默認緩存模式即可

 

 

虛擬機在線遷移支持情況 P89
1、有集群文件系統或共享存儲,並且標記為只讀模式
所有鏡像格式都支持,緩存模式檢查會忽略

2、本地盤
只有raw,qcow2,qed鏡像格式支持,緩存模式必須是none

一般使用:不使用共享存儲和集群文件系統,使用qcow2鏡像格式和none緩存模式,所以肯定支持在線遷移

none模式要求I/O方式設置為aio=native(全異步IO,不能使用page cache),如果是其他緩存模式,I/O方式會設置為aio=thread(線程池,同步IO)。
kvm虛擬機可以使用fdatasync()方式實現在宿主機上刷盤

Linux Native Aio 異步AIO的研究
http://www.cnblogs.com/MYSQLZOUQI/p/5792364.html

EXT4文件系統默認的刷盤周期是5秒

http://www.cnblogs.com/MYSQLZOUQI/p/5335649.html
內核緩沖區和磁盤文件同步的系統調用
sync:異步,針對整個塊緩沖區,系統的sync命令
fsync:同步阻塞 傳入文件描述符針對單個文件
fdatasync:跟fsync一樣,只是他只同步data,而不同步inode
msync:mmap方式 需要指定地址空間

 

 

QEMU支持的磁盤鏡像格式 P89
raw,cloop,cow,qcow,qcow2,vmdk,vdi,vpc vhd,dmg,nbd,parallels

raw:簡單二進制鏡像文件,一次性會把磁盤空間占用完,ext4和xfs文件系統都支持稀疏文件特性,windows的ntfs也支持稀疏文件
cloop:壓縮的loop格式,可直接引導光盤的一種鏡像格式
cow:寫時復制格式,因為歷史兼容問題還保留,這種格式不支持windows虛擬機
qcow:第一代qemu寫時復制格式,被qcow2替代,因為歷史原因還保留
qcow2:第二代qemu寫時復制格式,支持很多特性:例如快照,在不支持稀疏特性的文件系統上也支持精簡格式,AES加密,zlib壓縮,后備方式
vmdk:vmware產品的鏡像格式
vdi:virtual box鏡像格式
vpc vhd:微軟hyper-v鏡像格式
dmg:mac磁盤鏡像格式
nbd:網絡塊設備
parallels:半虛擬化鏡像格式

 

ls命令看到的是分配的大小而不是實際使用大小,du命令看到的是實際使用大小

 

鏡像格式轉換主要用於不同虛擬化產品的虛擬機鏡像轉化,比如將vmware的vmdk轉換為kvm專用的qcow2格式 P92

 

快照  qcow2文件格式才能創建快照   P93
qemu-img snapshot test.qcow2 -c testsnapshop1 創建一個叫testsnapshop1的快照,創建快照之后,test.qcow2鏡像文件不能刪除,還原快照和查看快照都是基於這個鏡像我呢件
qemu-img snapshot test.qcow2 -l 查看test.qcow2鏡像文件創建了多少個快照
qemu-img snapshot test.qcow2 -d testsnapshop1 刪除test.qcow2鏡像文件的名為testsnapshop1的快照
qemu-img snapshot test.qcow2 -a testsnapshop1 還原test.qcow2鏡像文件的名為testsnapshop1的快照,注意test.qcow2鏡像文件不能刪除

快照的原理是利用寫時復制技術,所以快照對性能有影響,生產環境建議最多創建一次快照

 

 

 

lvm關閉寫緩存的方法  P96

lvm的cache配置
建議將cache關閉,防止主機突然掉電造成數據丟失
默認是1為開啟狀態
cat lvm.conf |grep write_cache
    # Configuration option devices/write_cache_state.
    write_cache_state = 1


關閉/etc/lvm/lvm.conf文件中lvm的寫緩存
write_cache_state=0

然后清空cache_dir指向的目錄內容,默認路徑是/etc/lvm/cache
cache_dir="/etc/lvm/cache"
rm  -rf   /etc/lvm/cache/

clvm  P97
clvm是lvm的集群方式,一般用於集群的塊設備使用,主要是多了驗證功能,抑制兩台服務器同時對一個lv進行寫操作

 

塊對齊問題 P110

windows2008 server和windows7之后的系統默認都會有1MB的偏移量,解決了塊對齊問題
centos6和rhel6之后,和windows一樣都有一個1MB的偏移量,解決了塊對齊問題
解決塊對齊問題建議使用最新操作系統

 

ll /etc/lvm/
total 80
drwx------. 2 root root 4096 Oct 16 2014 archive
drwx------. 2 root root 4096 Oct 16 2014 backup
drwx------. 2 root root 4096 Oct 16 2014 cache
-rw-r--r--. 1 root root 58444 Oct 16 2014 lvm.conf
drwxr-xr-x. 2 root root 4096 Jul 10 2015 profile

 

 

生產環境中SSD使用要點 P123
簡單來說,SMART信息就是硬盤內部的一些計數器,這些計數器用來保存硬盤的使用情況,根據這些信息,我們可以預測磁盤的使用壽命以及損壞的情況。
Windows查看ssd硬盤的smart信息
Windows服務器不能用raid卡,因為raid卡會將硬盤的smart信息屏蔽
使用英特爾的專用ssd工具

Linux查看ssd硬盤的smart信息
可以通過raid卡讀取硬盤的smart信息

CentOS 系統自帶smartmontools軟件包,里面有一個smartctl工具,可以很方便的查看SMART相關信息
低端板載raid卡,LSI MPT RAID卡
第一塊硬盤
smartctl -a -i /dev/sda1

LSI Mega RAID卡(IBM,聯想,華為,浪潮,戴爾)
第一塊硬盤
smartctl -a -d megaRAID,0 /dev/sda

惠普服務器RAID卡,需要centos6.3以上
第一塊硬盤

smartctl -d sat+cciss,0 -a /dev/sda

 

 

ssd的smart信息解讀

media_wearout_indicator:使用耗費,100為沒有任何耗費,表示ssd上nand的擦寫次數程度,初始值為100,隨着擦寫次數的增加,開始線性遞減,一旦這個值降低到1
就不再降了,同時表示ssd上面已經有nand的擦寫次數達到了最大次數,這個時候建議備份數據,並更換ssd

reallocated_sector_ct:出廠后產生的壞塊個數,初始值為100,如果有壞塊,從1開始增加,每4個壞塊增加1


 

第6章   kvm虛擬機的資源限制

CGroups P127

kvm虛擬機的資源限制主要是通過CGroups 去配置,Libvirt在CGroups 上封裝了一層,也可以通過修改xml文件去做虛擬機的資源限制

CGroups 是Linux內核提供的一種可以限制,記錄,隔離進程組所使用的物理資源的機制,最初由google工程師提出,redhat在rhel6/centos6

中開始正式支持CGroups 

CGroups (control groups)是一種機制,它以分組的形式對進程使用系統資源的行為進行管理和控制,用戶通過CGroups 對所有進程進行分組,

再對該分組整體進行資源的分配和控制

 

 

使用CGroups 最簡單的方法是安裝libcgroups軟件包,該軟件包包含大量和CGroups 有關的命令和相關man page,
使用libcgroups提供的工具可以簡化過程並擴展功能。
yum install -y libcgroups

 

 

Linux生產環境限制網絡資源/網絡速度/網絡流量的3種方案 P144
1、通過TC限制虛擬機流量,TC是內核中一套限制網絡流量的機制
2、通過Libvirt限制虛擬機流量
3、通過iptables限制虛擬機流量

 

TC:traffic control,是Linux進行流量控制的工具,可以控制網絡接口發送數據速率
每個網絡接口都有一個隊列,用於管理和調度待發數據,TC的工作原理是通過設置不同類型的網絡接口隊列從而改變數據包發生速率和優先級
TC只能控制出口流量,入口流量不同通過TC控制

Libvirt實際也是使用TC限制虛擬機流量,因為TC只能限制出流量,不能限制入流量,所以通過Libvirt限制流量也只能限制出流量

iptables不能精確控制網速,只能控制包的個數,具體數據可以用mtu乘以包的個數計算,因為網絡協議是雙向的,即使配置是單向的,實際對流出和流入都有影響

 

流入和流出只是一個-s 和一個-d 不同

#限制流入方向   限制流量
# 限定每秒只轉發30個到達192.168.0.2的數據包(約每秒45KB 如果一個數據包是1.5KB)
iptables -A FORWARD  -d 192.168.0.2  -m limit --limit 30/sec --limit-burst 30 -j ACCEPT
iptables -A FORWARD -d 192.168.0.2 -j DROP #這句作用是超過限制的到達192.168.0.2的數據包不通過)



#限制流出方向   限制流量
# 限定每秒只轉發30個離開192.168.0.2的數據包(約每秒45KB 如果一個數據包是1.5KB)
iptables -A FORWARD  -s 192.168.0.2  -m limit --limit 30/sec --limit-burst 30 -j ACCEPT
iptables -A FORWARD -s 192.168.0.2 -j DROP #這句作用是超過限制的離開192.168.0.2的數據包不通過)


 

第7章   物理機轉虛擬機實踐

 

 

P2V方案  物理機轉虛擬機  P152
靜態方案:關機,克隆軟件克隆,在虛擬機上還原,kvm的virt-P2V,vmware esx3.5
動態方案:物理機處於運行狀態,使用專用agent將物理機在線復制到虛擬機中,vmware esx4.0以后采用這種方案

 

 

V2V方案   P160
最常用是vmware轉kvm
低版本的使用virt-P2V工具來操作
對於Hyper-v的虛擬機轉換,沒有直接轉換的工具,需要使用P2V的方法進行轉換,側面說明Hyper-V不是主流


 

第8章   KVM桌面虛擬化實踐 

centos6.5磁盤調度算法調整  P167

centos6.5默認的磁盤調度算法是CFQ 完全公平排隊算法 ,並不適合於SSD固態硬盤,工作原理是為IO請求進行排序和對鄰近IO請求進行合並
機械盤在響應IO請求時最大的耗時發生在機械臂尋道,排序正是為了減少尋道時間。

deadline算法 最終期限算法,工作原理跟CFQ一樣,同樣並不適合於SSD固態硬盤

Noop空操作算法,專為隨機訪問的塊設備而生的調度算法,工作原理是只做IO合並不做排序,適合於SSD固態硬盤

修改磁盤調度算法,把下面命令寫入/etc/rc.local永久生效
echo "noop" > /sys/block/vdc/queue/scheduler

騰訊雲
cat /sys/block/vdc/queue/scheduler
noop anticipatory deadline [cfq]


ll /sys/block/
total 0
lrwxrwxrwx 1 root root 0 Aug 31 22:02 loop0 -> ../devices/virtual/block/loop0
lrwxrwxrwx 1 root root 0 Aug 31 22:02 loop1 -> ../devices/virtual/block/loop1
lrwxrwxrwx 1 root root 0 Aug 31 22:02 loop2 -> ../devices/virtual/block/loop2
lrwxrwxrwx 1 root root 0 Aug 31 22:02 loop3 -> ../devices/virtual/block/loop3
lrwxrwxrwx 1 root root 0 Aug 31 22:02 loop4 -> ../devices/virtual/block/loop4
lrwxrwxrwx 1 root root 0 Aug 31 22:02 loop5 -> ../devices/virtual/block/loop5
lrwxrwxrwx 1 root root 0 Aug 31 22:02 loop6 -> ../devices/virtual/block/loop6
lrwxrwxrwx 1 root root 0 Aug 31 22:02 loop7 -> ../devices/virtual/block/loop7
lrwxrwxrwx 1 root root 0 Aug 31 22:02 ram0 -> ../devices/virtual/block/ram0
lrwxrwxrwx 1 root root 0 Aug 31 22:02 ram1 -> ../devices/virtual/block/ram1
lrwxrwxrwx 1 root root 0 Aug 31 22:02 ram10 -> ../devices/virtual/block/ram10
lrwxrwxrwx 1 root root 0 Aug 31 22:02 ram11 -> ../devices/virtual/block/ram11
lrwxrwxrwx 1 root root 0 Aug 31 22:02 ram12 -> ../devices/virtual/block/ram12
lrwxrwxrwx 1 root root 0 Aug 31 22:02 ram13 -> ../devices/virtual/block/ram13
lrwxrwxrwx 1 root root 0 Aug 31 22:02 ram14 -> ../devices/virtual/block/ram14
lrwxrwxrwx 1 root root 0 Aug 31 22:02 ram15 -> ../devices/virtual/block/ram15
lrwxrwxrwx 1 root root 0 Aug 31 22:02 ram2 -> ../devices/virtual/block/ram2
lrwxrwxrwx 1 root root 0 Aug 31 22:02 ram3 -> ../devices/virtual/block/ram3
lrwxrwxrwx 1 root root 0 Aug 31 22:02 ram4 -> ../devices/virtual/block/ram4
lrwxrwxrwx 1 root root 0 Aug 31 22:02 ram5 -> ../devices/virtual/block/ram5
lrwxrwxrwx 1 root root 0 Aug 31 22:02 ram6 -> ../devices/virtual/block/ram6
lrwxrwxrwx 1 root root 0 Aug 31 22:02 ram7 -> ../devices/virtual/block/ram7
lrwxrwxrwx 1 root root 0 Aug 31 22:02 ram8 -> ../devices/virtual/block/ram8
lrwxrwxrwx 1 root root 0 Aug 31 22:02 ram9 -> ../devices/virtual/block/ram9
lrwxrwxrwx 1 root root 0 Aug 31 22:02 vda -> ../devices/pci0000:00/0000:00:04.0/virtio1/block/vda
lrwxrwxrwx 1 root root 0 Aug 31 22:02 vdb -> ../devices/pci0000:00/0000:00:05.0/virtio2/block/vdb
lrwxrwxrwx 1 root root 0 Aug 31 22:02 vdc -> ../devices/pci0000:00/0000:00:06.0/virtio3/block/vdc

 


第10章 Ceph在kvm虛擬化中的應用和故障處理


centos6自帶的內核都是2.6.32-xxx版本 P222

btrfs為Ceph特別設計的文件系統,btrfs對內核有要求,推薦使用3.x的內核版本

 

 

 

升級系統內核
方法一
從Linux官網下載內核自己動手編譯安裝


方法二
安裝編譯好的Linux內核,例如ELRepo(Linux企業版的一個增強yum源,有編譯好的最新Linux內核)
http://elrepo.org/tiki/tiki-index.php
ELRepo提供兩種kernel版本,一個是kernel-lt,長期支持版,目前是3.10.60
另一個是kernel-ml,ml=main line,主線穩定是3.17.3
#To install ELRepo for RHEL-6, SL-6 or CentOS-6:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel -y install kernel-lt
內核升級完畢后,不會立即生效,還需要我們修改grub.conf文件,我們修改內核的啟動順序,默認啟動的順序應該為1,升級以后內核是往前面插入為0,如下:
vim /etc/grub.conf
default=0


重啟系統
reboot
查看當前內核版本
uname -r


https://www.kernel.org/

 


第13章 其他管理平台介紹

 

WebVirtMgr介紹
WebVirtMgr就是將VirtManager頁面化
WebVirtMgr幾乎是純python開發,前端基於python的django,后端基於Libvirt的python接口,風格也是python風格

使用了wsgi 模塊和gunicorn模塊

/usr/bin/python  /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.py

特點
基於Libvirt的連接

宿主機管理支持功能
虛擬機鏡像
虛擬機克隆
快照管理
日志管理


虛擬機管理支持功能
關閉虛擬機
安裝虛擬機
VNC網頁連接
創建快照



常見kvm管理平台簡單比較
openstack,cloudstack,opennebula,ovirt,convirt,webvirtmgr
穩定性,易用性,支持虛擬機規模,社區活躍性

 


第14章 業務性能評估和壓力模型建立

 

#通過判斷iostat文件是否存在來安裝sysstat包 P310

if [ ! -e /usr/bin/iostat ] ;then
yum install -y sysstat
else
echo 0
fi

 

 

 

%iowait值過高,可以磁盤存在IO瓶頸,如果%idle值高但系統響應慢,可能CPU等待分配內存,可以嘗試添加內存 P311
如果idle值持續低於10,則系統CPU處理能力相對較低,說明系統最需要解決CPU資源

 

windows虛擬機,由於驅動的關系,運行在kvm平台上的windows虛擬機網卡發包率遠遠不如Linux虛擬機,通過測試,大概是Linux虛擬機網卡發包率的1/3的性能 P317

 



第15章 宿主機選型和基礎性能測試



英特爾CPU產品線  P321
PC 酷睿:i3,i5,i7
SERVER 志強xeon:E3,E5,E7
平板:凌動
服務器志強CPU支持睿頻技術,可以理解為自動超頻,根據當前CPU任務量自動調整CPU主頻,睿頻技術可以細分到每個具體的CPU核上
比如E5-2640V2標稱主頻為2.0GHz,有8個核,可能有的核工作在1.2GHz,有的核工作在2.5GHz

intel志強CPU編號含義

E5-2640V2:E5產品線,最多兩顆CPU共同工作,CPU接口代號是6,CPU編號是40,V2是版本號



服務器內存類型和CPU平台是綁定的,一旦選擇了CPU,就只能選擇配套的內存類型  P322
目前最新的服務器上使用的是DDR4內存

一些廠商的入門級服務器使用的一般是普通PC的內存,不帶ECC功能,需要注意 P323

 

 

硬盤的接口
ATA:並口
SATA:串口
SCSI:小型機系統接口,使用較為先進的技術,轉速一般為15K轉
SAS:新一代SCSI技術,和sata硬盤相同,sas盤和sata盤共享相同的背板,但有更高的傳輸速度,比sata性能高3-5倍
FC:光纖通道接口

sas接口硬盤需要配置sas卡,超越桌面級硬盤並且壽命更長




raid卡選型 P326
支持的raid級別
緩存大小
是否帶電池

1、入門級raid卡,只支持raid1,raid0,raid10,不支持raid5,沒有緩存,沒有電池
2、支持raid5甚至raid6,有緩存和電池
有些新出的服務器的raid卡在硬件級別支持SSD做緩存



網卡選型  P327
目前常見服務器一般配置4個網口或8個網口,支持1GB/s,10GB/s,40GB/s的帶寬
千兆網卡建議選擇intel的I350網卡
萬兆網卡建議選擇intel的x520或x540網卡
因為這些網卡都支持SRIVO,SRIVO是非常好的虛擬化性能解決方案,hyper-v虛擬機默認已經支持SRIVO
選擇intel網卡,還因為intel有DPDK技術,DPDK技術是一套開發包,在內核,虛擬化層,Virtio接口都針對intel硬件做了有優化

 

 

內存測試 P331
虛擬機的內存占用和釋放需要在虛擬機上操作一次,還需要在宿主機上操作一次,即虛擬機的內存實際是被映射了兩次


一個虛擬機的IO性能收到很多層cache的影響
虛擬機 os的buffer cache
宿主機 os的buffer cache
raid卡的cache大小和模式
物理硬盤的cache

磁盤測試IO建議使用如下用例 P336
大塊連續讀 1MB ,順序讀
大塊連續寫 1MB ,順序寫
小塊隨機讀 4KB ,隨機讀
小塊隨機寫 4KB,隨機寫


磁盤IO測試工具
dd命令 P344
dd是系統自帶的命令,不需要單獨安裝,使用很方便,但是只能測試順序IO性能
使用oflag或iflag可以指定direct/sync/dsync模式,例如下面命令
測試4K塊大小文件的順序寫性能directio模式

dd if=/dev/zero of=/tmp/test.file bs=4k count=10000 oflag=direct

10000+0 records in
10000+0 records out
40960000 bytes (41 MB) copied, 35.2022 s, 1.2 MB/s

 


測試1m塊大小文件的順序寫性能directio模式

dd if=/dev/zero of=/mydata/test.file bs=1024k count=10000 oflag=direct 
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB) copied, 154.136 s, 68.0 MB/s

 


測試1m塊大小文件的順序讀性能directio模式

dd if=/mydata/test.file of=/dev/zero bs=1024k count=10000 iflag=direct 
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB) copied, 140.699 s, 74.5 MB/s

 

 


 

第16章 虛擬機鏡像制作、配置和測試

 

preallocation=metadata  作用 P347
qemu-img create -f qcow2 preallocation=metadata /images/vm1/redhat6.qcow2  100G
要加上preallocation=metadata 或者在virt-install命令參數中指明是qcow2格式,否則使用virt-install命令
安裝完成后虛擬機磁盤鏡像會變為raw格式

 

windows虛擬機配置建議表

win2008:cpu 2線程,內存2g,磁盤100g,virtio網卡

win2012r2:cpu 4線程,內存2g,磁盤100g,virtio網卡

 




第17章 單機虛擬化技術和生產環境實踐

對於網絡壓力大的業務,可以通過開啟網卡的SR-IOV(single-root IO virtuallization)
使虛擬機網絡性能得到非常高的提升,而SR-IOV目前的特性是不支持遷移的,非常適合單機虛擬化

虛擬機故障的兩種方案
1、將虛擬機鏡像文件復制到健康的宿主機上,遷移過程中虛擬機不可用
2、將宿主機硬盤拆下來換到備機上


冷遷移虛擬機需要注意新、老宿主機的網卡和網絡關系,需要一致,否則,網絡不同,虛擬機開機后網絡會不通


熱遷移:centos6.5之后支持無共享存儲的虛擬機熱遷移,無共享存儲需要先遷移磁盤,再遷移虛擬機內存,消耗時間更長

虛擬機備份:
1、虛擬機關機,然后將xml文件和鏡像文件復制到別的地方,然后虛擬機開機
virsh shutdown xx
virsh dumpxml gzxtest01 > ~/gzxtest01.xml
cp /data/kvmimg/gzxtest03.qcow2 /data/backup/
virsh start xx

2、使用libvirt提供的在線塊復制和在線外部快照

 


第18章 KVM虛擬化集群技術和應用場景

 

筆者在生產環境使用的集群有兩種存儲方式,即基於商業存儲和基於分布式開源文件系統  P386

在虛擬機系統里面,也可以配置應用層的高可用,做這樣配置的時候,注意主、備節點要放置到不同的宿主機上 P387

 

在線遷移不是災備手段   P388

在線遷移實際遷移的虛擬機的內存,當宿主機發生故障的時候,虛擬機的內存信息已經丟失,這時候是不能再去做虛擬機的在線遷移的,所以

在線遷移解決的是有計划的維護問題,如要升級宿主機內存,可以將宿主機上的虛擬機在線遷移到其他宿主機上,內存升級完成后,再將虛擬機在線遷移回來

 

商業存儲為雙控制器,分布式文件系統鏡像寫多份,網絡設備冗余 P388

 

IP SAN共享存儲   P39
SAN即區域存儲網絡,計算節點通過發送block io請求到存儲設備,最常見的就是用iscsi技術,計算節點通過scsi協議發出讀取數據的請求,並用
tcp/ip包封裝scsi包,就可以在tcp/ip網絡中進行傳輸,即scsi over tcp/ip

FC SAN共享存儲   心怡就是用FC SAN
計算節點需要安裝光纖接口的HBA卡 host bus adapter提供服務器內部的io通道和存儲系統的io通道之間的物理連接,為了冗余hba卡
一般有兩塊,分別接兩個光纖交換機,存儲一般有雙控制器,也分別接兩個光纖交換機,達到全冗余目標。FC SAN計算節點直接將io請求通過
fc網絡發送到存儲設備,性能非常高

 

 

關閉virbr0 P393
安裝和開啟libvirt的服務后會自動生成virbr0,宿主機上所有的虛擬機都通過virbr0連接起來,默認情況下virbr0使用的是NAT模式,所以,這種情況下
虛擬機通過宿主機才能訪問外網,生產環境一般虛擬機使用的是bridge方式(網橋),所以virbr0不是必須的,通過以下方式關閉virbr0:
virsh net-autostart default --disable
virsh net-destroy default
virsh net-undefine default


ifconfig -a
eth0 Link encap:Ethernet HWaddr 52:54:00:DE:ED:8B
inet addr:10.105.45.133 Bcast:10.105.63.255 Mask:255.255.192.0
inet6 addr: fe80::5054:ff:fede:ed8b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:38865079 errors:0 dropped:0 overruns:0 frame:0
TX packets:34128883 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:15055246737 (14.0 GiB) TX bytes:15988887722 (14.8 GiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:14592846 errors:0 dropped:0 overruns:0 frame:0
TX packets:14592846 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:922681363 (879.9 MiB) TX bytes:922681363 (879.9 MiB)

virbr0 Link encap:Ethernet HWaddr 52:54:00:A4:D8:58
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

virbr0-nic Link encap:Ethernet HWaddr 52:54:00:A4:D8:58
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

 

 

-----------------------------------------------------------------

多路徑multipath P395
配置multipath實現LUN設備名稱的持久化,為了提供冗余,服務器會通過多條線路和存儲連接,那么在系統中就會發現
多個存儲設備,實際上是一塊存儲設備,mulitpath多路徑服務主要解決這個問題,通過multipath服務,可以將特征相同
的多塊存儲設備聚合成一塊設備,然后給系統使用

#安裝multipath所需的安裝包
yum install -y  device-mapper-multipath   iscsi-initiator-utils  

#加載multipath模塊
modprobe dm-multipath
modprobe dm-round-robin
modprobe dm-service-time

#新建訪問接口文件,接口文件保存在/var/lib/iscsi/ifaces目錄中
iscsiadm  -m  iface  -I eth2 -o new
iscsiadm  -m  iface  -I eth3 -o new


#配置iface ,通過 eth2,eth3兩個接口訪問
iscsiadm  -m  iface  -I eth2  --op=update -n iface.net_ifacename  -v eth2
iscsiadm  -m  iface  -I eth3  --op=update -n iface.net_ifacename  -v eth3

略。。。

 

Windows2012R2下的multipath  MPIO

---------------------------------------------------------------------------------------

 

管理節點的配置 P398
默認情況下,每個PV中保存一份元數據,元數據以ASCII格式存儲,元數據在系統上會保持備份
在/etc/lvm/ 目錄下保持最新版本,在/etc/lvm/archive目錄下保存舊版本
在/etc/lvm/cache目錄下保存lvm文件緩存
通過pvcreate等操作將第一份數據覆蓋后,可通過第二份數據進行恢復,在集群中將元數據設置保存為兩份
命令如下
pvcreate --metadatacopies 2 /dev/mapper/ipsanmp1
vgcreate vmVG $PV

/etc/lvm/lvm.conf
locking_type參數
locking_type=1
1表示對vg有讀寫權限,4表示只讀權限

cd /etc/lvm/
[root@VM_45_133_centos lvm]# ll
total 80
drwx------. 2 root root 4096 Oct 16 2014 archive
drwx------. 2 root root 4096 Oct 16 2014 backup
drwx------. 2 root root 4096 Oct 16 2014 cache
-rw-r--r--. 1 root root 58444 Oct 16 2014 lvm.conf
drwxr-xr-x. 2 root root 4096 Jul 10 2015 profile

 

 

整個數據中心采用大二層架構,便於虛擬機主機的漂移和靈活性 P403
什么是VPC P403
vpc 虛擬私有雲 virtual private cloud,是公有雲上的一個網絡概念,相當於公有雲里面的一個內網,基於用戶划分內網
用戶選擇公有雲最大的顧慮是安全問題,公有雲安全包含兩個層面
1、數據安全:數據會不會竊取,丟失
2、服務安全:使用公有雲,依靠的是公有雲的服務支持,用戶擔心,如果公有雲出現大面積問題,是否會對自己服務造成影響

VPC實際上是基於網絡的安全解決方案,VPC將同一用戶的雲主機隔離在一個邏輯網絡內部,只有用戶自己能訪問自己的私有網絡
VPC使用場景
大量使用內網IP地址,只需將暴露的服務通過NAT映射出去,雲主機無公網IP
將VPC和自己的企業內網或者自己的私有數據中心打通,將公有雲變成自己私有雲的一部分
通過VPC的使用,可以從網絡層面大大提高用戶使用公有雲的安全性,做到只需暴露的暴露,不需暴露的完全在網絡層面關閉

 

IP地址划分
外網段
內網段
業務內網段
存儲段

 

 

 

虛擬機遷移管理   P405

 

動態遷移、在線遷移、熱遷移
熱遷移過程中如果斷網 可能會導致虛擬機無法啟動,最好用開一個網段做遷移
虛擬機在線遷移的認證方式 P399
TCP方式:走TCP通道,沒有加密,生產環境一般不用
SSH方式:走SSH通道,已加密,生產環境建議使用,需要宿主機配置免密碼SSH認證 (方法: 在遷移命令后面加 qemu+ssh://用戶@新宿主機IP:端口/system )
TLS方式:基於證書加密,生產環境建議使用

遷移工具
可以通過qemu層,也可以使用Libvirt工具遷移,Libvirt工具遷移支持加密和認證,安全性更好,一般生產環境使用Libvirt工具遷移
Libvirt工具遷移需要配置認證


基於共享存儲
1、遷移命令 virsh migrate ,10.10.10.20為目標宿主機的內網IP
virsh migrate --live --copy-storage-all --unsafe --persistent centos1 qemu+ssh://root@10.10.10.20:22/system


2、在源宿主機執行,會顯示paused狀態
virsh list --all


3、在目標宿主機執行,顯示遷移進度
tailf  /var/log/libvirt/qemu/gzxtest09.log

 

4、虛擬機遷移完成后,源宿主機為關機狀態,目標宿主機變為running狀態
virsh list --all #源宿主機

virsh list --all #目標宿主機

 

基於本地存儲 (存儲塊動態遷移技術,簡稱塊遷移)
基於本地存儲的在線遷移跟基於共享存儲的在線遷移方法一樣

 

靜態遷移、離線遷移、冷遷移  P407
基於共享存儲
基於共享存儲的離線遷移跟基於本地存儲方法一樣,只是不需要拷貝鏡像文件


基於本地存儲
1. 停用 虛擬機
[root@hkxvmm02 vmserver]# virsh list --all
Id Name State
----------------------------------------------------
9 hkwapp02 running
10 hkwapp03 running
13 hkxrmq01 running
16 hkwrdp01 running
18 hkxzbx01 running
- hkwsql04 shut off


2 .拷貝XML 和 鏡像文件 到新服務器

XML位置
/etc/libvirt/qemu/hkwsql04.xml

鏡像位置
/data/vmserver/hkwsql04.qcow2

修改xml文件中的鏡像位置,找到source file這一項
<driver name='qemu' type='qcow2' cache='none'/>
<source file='/data/vmserver/hkwsql04.qcow2'/>

 

 

3.在新服務器上重新定義虛擬機

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

7.重新啟動
# virsh start hkwsql04
Domain hkwsql04 started

[root@hkxvmm02 vmserver]# virsh list
Id Name State
----------------------------------------------------
1 hkwsql04 running

 

 

 

商業存儲的備份  P408
1、使用磁帶庫,成本低,但是備份過程時間長,效率低,虛擬磁帶庫,容量大
2、使用存儲的鏡像功能,多台存儲使用同步或異步方式進行備份,成本高,開通存儲的鏡像功能,效率高,容量小


第21章 虛擬化監控,報警與應急響應方案

 

物理內存的情況  P456
內核把內存頁分成以下不同的區(zone)
zone_dma:這個區用來執行dma操作,以便設備用來訪問
zone_normal:這個區給應用使用的頁
zone_highmem:高端內存,內核通過映射的方式使用,mmap

X86上zone_dma為0~16mb的內存范圍,zone_highmem為高於896mb的物理內存,中間的是zone_normal區



使用dmidecode命令可以查看物理內存的詳細信息
dmidecode
。。。
Physical Memory Array
    Location: System Board Or Motherboard
    Use: System Memory
    Error Correction Type: Single-bit ECC
    Maximum Capacity: 64 GB
    Error Information Handle: Not Provided
    Number Of Devices: 4

Handle 0x1100, DMI type 17, 40 bytes
Memory Device
    Array Handle: 0x1000
    Error Information Handle: Not Provided
    Total Width: 72 bits
    Data Width: 64 bits
    Size: 8192 MB
    Form Factor: DIMM
    Set: 1
    Locator: A1
    Bank Locator: Not Specified
    Type: DDR4
    Type Detail: Synchronous
    Speed: 2133 MHz
    Manufacturer: 00AD00000000
    Serial Number: 91411655
    Asset Tag: 00160200
    Part Number: HMA41GU7AFR8N-TF  
    Rank: 2
    Configured Clock Speed: 2133 MHz
    Minimum Voltage:  1.2 V
    Maximum Voltage:  1.2 V
    Configured Voltage:  1.2 V

Handle 0x1101, DMI type 17, 40 bytes
Memory Device
    Array Handle: 0x1000
    Error Information Handle: Not Provided
    Total Width: 72 bits
    Data Width: 64 bits
    Size: 8192 MB
    Form Factor: DIMM
    Set: 1
    Locator: A2
    Bank Locator: Not Specified
    Type: DDR4
    Type Detail: Synchronous
    Speed: 2133 MHz
    Manufacturer: 00CE00000800
    Serial Number: 732AF873
    Asset Tag: 00154200
    Part Number: M391A1G43DB0-CPB  
    Rank: 2
    Configured Clock Speed: 2133 MHz
    Minimum Voltage:  1.2 V
    Maximum Voltage:  1.2 V
    Configured Voltage:  1.2 V

Handle 0x1102, DMI type 17, 40 bytes
Memory Device
    Array Handle: 0x1000
    Error Information Handle: Not Provided
    Total Width: Unknown
    Data Width: Unknown
    Size: No Module Installed
    Form Factor: Unknown
    Set: 2
    Locator: A3
    Bank Locator: Not Specified
    Type: Unknown
    Type Detail: None
    Speed: Unknown
    Manufacturer: Not Specified
    Serial Number: Not Specified
    Asset Tag: Not Specified
    Part Number: Not Specified
    Rank: Unknown
    Configured Clock Speed: Unknown
    Minimum Voltage:  Unknown
    Maximum Voltage:  Unknown
    Configured Voltage:  Unknown

Handle 0x1103, DMI type 17, 40 bytes
Memory Device
    Array Handle: 0x1000
    Error Information Handle: Not Provided
    Total Width: Unknown
    Data Width: Unknown
    Size: No Module Installed
    Form Factor: Unknown
    Set: 2
    Locator: A4
    Bank Locator: Not Specified
    Type: Unknown
    Type Detail: None
    Speed: Unknown
    Manufacturer: Not Specified
    Serial Number: Not Specified
    Asset Tag: Not Specified
    Part Number: Not Specified
    Rank: Unknown
    Configured Clock Speed: Unknown
    Minimum Voltage:  Unknown
    Maximum Voltage:  Unknown
    Configured Voltage:  Unknown

Handle 0x1300, DMI type 19, 31 bytes


Maximum Capacity: 64 GB 服務器最大支持64g內存
Number Of Devices: 4 有4個內存插槽
Error Correction Type: Single-bit ECC  使用ecc糾錯技術
dmidecode |grep "Memory Device" |wc -l  有4個內存插槽
4
Memory Device
Size: 8192 MB   插槽1插了一條8g內存條
Type: DDR4       DDR4內存
Speed: 2133 MHz  頻率2G


Size: No Module Installed  表示這個插槽沒有插內存條





硬盤吞吐和利用率監控 P477
默認的zabbix監控模板中,對於磁盤只有對空間使用情況的監控,對於IO方面卻沒有自帶的“監控項”,並且每台服務器的磁盤
名稱可能不一樣(如 sda,hda,vda),所以需要用到zabbix的功能之一 的LLD發現磁盤並監控IO,他可以做到自適應不同的
磁盤名稱監控,原理是通過抓取系統文件cat /proc/diskstats 中的內容進行展示
cat /proc/diskstats
1 0 ram0 0 0 0 0 0 0 0 0 0 0 0
1 1 ram1 0 0 0 0 0 0 0 0 0 0 0
1 2 ram2 0 0 0 0 0 0 0 0 0 0 0
1 3 ram3 0 0 0 0 0 0 0 0 0 0 0
1 4 ram4 0 0 0 0 0 0 0 0 0 0 0
1 5 ram5 0 0 0 0 0 0 0 0 0 0 0
1 6 ram6 0 0 0 0 0 0 0 0 0 0 0
1 7 ram7 0 0 0 0 0 0 0 0 0 0 0
1 8 ram8 0 0 0 0 0 0 0 0 0 0 0
1 9 ram9 0 0 0 0 0 0 0 0 0 0 0
1 10 ram10 0 0 0 0 0 0 0 0 0 0 0
1 11 ram11 0 0 0 0 0 0 0 0 0 0 0
1 12 ram12 0 0 0 0 0 0 0 0 0 0 0
1 13 ram13 0 0 0 0 0 0 0 0 0 0 0
1 14 ram14 0 0 0 0 0 0 0 0 0 0 0
1 15 ram15 0 0 0 0 0 0 0 0 0 0 0
7 0 loop0 0 0 0 0 0 0 0 0 0 0 0
7 1 loop1 0 0 0 0 0 0 0 0 0 0 0
7 2 loop2 0 0 0 0 0 0 0 0 0 0 0
7 3 loop3 0 0 0 0 0 0 0 0 0 0 0
7 4 loop4 0 0 0 0 0 0 0 0 0 0 0
7 5 loop5 0 0 0 0 0 0 0 0 0 0 0
7 6 loop6 0 0 0 0 0 0 0 0 0 0 0
7 7 loop7 0 0 0 0 0 0 0 0 0 0 0
252 0 vda 17330 78 455020 183187 202370 189272 3133224 1390072 0 699621 1573131
252 1 vda1 17178 68 453724 183148 202370 189272 3133224 1390072 0 699593 1573092
252 16 vdb 41578 521 671264 245621 2927883 7592724 82924008 15557716 0 6351236 15801097
252 17 vdb1 41492 520 670568 245464 2772776 7592724 82924008 15478697 0 6272457 15721980
252 32 vdc 820 4446 13382 3917 321 28412 229864 8529 0 5869 12444
252 33 vdc1 797 4437 13126 3793 321 28412 229864 8529 0 5779 12320

json格式是zabbix接受的格式

網絡IO監控 P485
zabbix同樣可以通過自動發現網卡,原理跟磁盤自動發現一樣,不過zabbix本身已經提前寫好了發現功能模板,只需要
在功能模板進行簡單定制后即可滿足需求
他可以做到自適應不同的網卡名稱監控,原理是通過抓取系統文件cat /proc/net/dev 中的內容進行展示

cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
lo: 428931041 5495077    0    0    0     0          0         0 428931041 5495077    0    0    0     0       0          0
eth0: 11840841339 150603347    0    0    0     0          0         0 17255300403 184305349    0    0    0     0       0          0


zabbix可以監控發包數,丟包數,錯誤包數都可以使用zabbix自帶的監控項來實現 P486

 

 

 

應急方案制定注意要點 P487
虛擬化層災備就是做虛擬機鏡像的多份復制和快照,應用層做災備就是將虛擬機像物理機一樣災備,原來在
物理機上如何災備,現在在虛擬機用同樣的方法進行災備。一般建議使用應用層災備方法,因為在虛擬化層做災備
要消耗大量磁盤空間,並且做多個快照,會影響虛擬機性能,而在應用層做災備,消耗的資源比較少,而且可以做到
精准備份,即只需備份必要的部分。如果要做好應用層的災備,就需要在應用層提升自動化運維的水平,自動化運維
水平越高,越有利於提升災備和恢復的效率

 

服務器常用raid卡主要是LSI和HP服務器專用raid卡  P491

LSI低端raid卡使用lsiutil工具,高端raid卡使用MegaCli64工具


使用Lsiutil管理Dell SAS 6i/R
Dell的好多型號(如R410,R610)服務器默認的RAID控制器都是SAS 6i/R ,對於這款控制器MegaCli是不能使用的。在命令行模式下想管理SAS 6i/R,需要使用Lsiutil這個工具。
Lsiutil下載地址:ftp://ftp.lsil.com/HostAdapterDrivers/linux/lsiutil/lsiutil.tar.gz
Lsiutil有兩種使用方法: 菜單驅動的交互使用 和 命令行
不帶任何參數執行lsiutil,就會進入lsiutil的交互模式。在這個模式下,所有的操作都是通過文本菜單來進行的,舉例如下:
[root@Dell1950 ~]# lsiutil
命令行模式舉例如下:
lsiutil –p1 –a 21,1,0,0,0       和上邊菜單操作一樣,只不過不用手動去選擇菜單項了
lsiutil -p 1 -i –s 顯示端口1的設置和連接的設備
lsiutil –s 顯示所有端口上連接的設備
lsiutil -p 2 -l 1 強制HBA卡端口2連接速度為1Gb


HP的raid卡使用HPACUCli工具
DELL  和IBM的pc server都是基於lsi公司的raid卡,都可用MegaCli工具來管理
megacli-8.35.46-2.x86_64 (8.xx 都是最新版本)
MegaCli -h/--help
新版本的可執行文件可能是MegaCli64


惠普
hpacucli
hpacucli(cli端) => hpacu(gui端)

 

下面是宿主機上使用的一個腳本,通過crontab,每天在凌晨檢查一次硬盤,當發現有硬盤故障的時候 P492
就會調用python發郵件的一個腳本,發郵件處理,腳本供讀者參考
cat /bin/checkdisk.sh

#!/bin/bash
source /etc/profile
myip=$(/sbin/ifconfig |grep "inet addr")
myname=$(hostname)
echo $myip >/tmp/q.txt
echo $myname >>/tmp/q.txt

yum install -y dmidecode


#生成臨時文件,把ip,服務器名字寫入臨時文件

check_mpt()
#通過mtp的raid卡管理程序,檢查是否有硬盤故障
{
find /bin/lsiutil.x86_64
if [ $? = 1 ] ;then
bash /opt/sys_scripts/misc/check_disk/install.sh reinstall
fi

/bin/lsiutil.x86_64 -pl -a 21,2,0,0 |grep offline

if [ $? = 0 ] ;then
echo $myip>/tmp/errmsg
/bin/lsiutil.x86_64 -pl -a 21,2,0,0 >> /tmp/errmsg
/usr/bin/python /bin/pymail $myname
fi

}

check_Mega()
{
find /bin/MegaCli64
if [ $? = 1 ] ;then
bash /opt/sys_scripts/misc/check_disk/install.sh reinstall
fi

/bin/MegaCli64 -PdGetMissing -aALL |grep "No Missing"
if [ $? = 0 ] ;then
errmsg=$(/bin/MegaCli64 -PdGetMissing -aALL)
else
echo $myip >/tmp/errmsg
/bin/MegaCli64 -PdGetMissing -aALL >> /tmp/errmsg
/usr/bin/python /bin/pymail #myname
fi

critical_disk=$(/bin/MegaCli64 -AdpAllInfo -aALL|grep "Critical Disks|sed 's/^[ ]*//g'|awk -F ":" '{print $2}'|sed 's/^[ ]*//g')
failed_disk=$(/bin/MegaCli64 -AdpAllInfo -aALL|grep -i "Failed Disks"|sed 's/^[ ]*//g'|awk -F ":" '{print $2}'|sed 's/^[ ]*//g')
if [ $critical_disk -gt 0 -o $failed_disk -gt 0 ] ;then    
echo $myip >/tmp/errmsg
echo -e "\n" >>/tmp/errmsg
/bin/MegaCli64 -AdpAllInfo -aALL|grep -i -EA9 "Device Present">>/tmp/errmsg
/usr/bin/python /bin/pymail $myname
else
echo $(/bin/MegaCli64 -AdpAllInfo -aALL|grep -i -EA9 "Device Present")
fi
}

check_hp()
#通過HP的raid卡管理程序檢查是否有硬盤故障
{
find /usr/sbin/hpacucli
if [ $? = 1 ];then
bash /opt/sys_scripts/misc/check_disk/install.sh reinstall
fi

/usr/sbin/hpacucli ctrl slot=0 pd all show status |grep Failed
if [ $? = 0 ] ;then
echo $myip>/tmp/errmsg
/usr/sbin/hpacucli ctrl slot=0 pd all show status>>/tmp/errmsg
/usr/bin/python /bin/pymail $myname
fi
}

check_RAID_type()
#通過lspci命令確定是哪種raid卡
{
lspci|grep "MPT"|grep "LSI" >/dev/null
if [ $? = 0 ];then
RAID_type="MPT"
check_mpt
fi

lspci|grep "MegaRAID"|grep "LSI" >/dev/null
if [ $? = 0 ];then
RAID_type="Mega"
check_Mega
fi


lspci|grep "Hewlett_packard"|grep "LSI" >/dev/null
if [ $? = 0 ];then
RAID_type="HP"
check_hp
fi

dmidecode |grep "ProLiant" >/dev/null
if [ $? = 0 ];then
RAID_type="HP"
check_hp
fi

}

check_RAID_type

 

 

 

 


第22章 生產環境問題案例和分析


宿主機強制關機導致虛擬機無法啟動案例 P522
啟動虛擬機的時候報錯
Unable to read from monitor: Connection reset by peer
宿主機系統為centos6.x

原因:在未完成內存保存的情況下,重啟宿主機,會造成虛擬機再次啟動的時候,虛擬機狀態文件讀取錯誤,從而虛擬機不能啟動
虛擬機的狀態保存文件路徑是/var/lib/libvirt/qemu/save/

解決辦法:直接刪除狀態保存文件,或者執行managedsave-remove 命令,再啟動虛擬機,問題解決
# virsh  managedsave-remove win7
Removed managedsave image for domain win7
# virsh start win7
域 win7 已啟動


建議:宿主機重啟的時候,建議先關閉虛擬機,再重啟宿主機


 

windows7虛擬機只能使用2個CPU案例 P524    這個問題應該是肖力或kvm問題,在hyper-v上沒有這個問題


通過微軟網站查找資料,發現windows7最多只支持兩個cpu socket,即兩顆物理機CPU,但是,每個物理CPU內可以有多個core
如果配置給虛擬機的是模擬多顆物理CPU,那么windows7系統就只能使用兩個

KVM默認每個CPU模擬一個socket,必須修改虛擬機cpu的拓撲,才能使用超過一個CPU
解決辦法是修改為一個socket內有多個core
xml配置文件
<topology socket='1'  cores='4' threads='1'>


kvm  一個物理核 四個邏輯核  一個物理核心四線程  
virt-install --name=gzxtest02 --ram 4096 --vcpus=16  虛擬機創建分配的是邏輯線程
cat /proc/cpuinfo  |grep processor  
processor    : 0
processor    : 1
processor    : 2
processor    : 3
cat /proc/cpuinfo |grep 'core id'
core id        : 0
core id        : 0
core id        : 0
core id        : 0



hyper-v  四個物理核 四個邏輯核  一個物理核心四個線程 總共16線程
虛擬機創建分配的是物理核心和邏輯線程數,需要進行乘法得出最終線程數
cat /proc/cpuinfo | grep processor
processor    : 0
processor    : 1
processor    : 2
processor    : 3
cat /proc/cpuinfo |grep 'core id'
core id        : 0
core id        : 1
core id        : 2
core id        : 3

 

 


機房斷電引起的宿主機重啟 P529
修改raid設置,跳過開機因為raid卡BBU無電的錯誤界面 BE=bypass error
MegaCli -AdpBios -BE –a0
默認是dsply=display
MegaCli -AdpBios -dsply –a0

 


機房斷點引起虛擬機文件系統錯誤 P530
加載系統盤,編輯虛擬機的xml文件,加載iso光驅
編輯虛擬機的啟動方法,在os的標簽處添加cdrom,並放在第一項,命令如下
<os>
<type arch='x86_64' machine='rhel6.6.0'>hvm</type>
<boot dev='hd'/>
</os>
修改為
<os>
<type arch='x86_64' machine='rhel6.6.0'>hvm</type>
<boot dev='cdrom'/>
<boot dev='hd'/>
</os>

 

宿主機使用kvm的好處
生產環境存儲故障導致50個虛擬機丟失案例 P532
在宿主機做監控
所有線上存儲,磁盤監控SMART信息,有10個以上的壞塊就報警
使用存儲的鏡像功能
全部使用raid10

 

 

ubuntu虛擬機內核頻繁崩潰問題  P534
默認ubuntu12.04沒有配置內核崩潰自動重啟及轉存,造成發生內核崩潰的時候,
沒有core dump文件去分析,並且卡死在內核崩潰界面,為了方便查找內核崩潰原因,需要將內核崩潰自動重啟配置及內核轉存配置起來,配置步驟如下:

第一步 配置內核崩潰自動重啟
添加kernel.panic到內核參數,10為內核崩潰10秒之后,自動重啟系統
vi /etc/sysctl.conf
kernel.panic = 10

第二步 驗證自動重啟機制是否生效,需要配置sysrq
添加kernel.sysrq 到內核參數,1為生效
vi /etc/sysctl.conf
kernel.sysrq = 1

運行命令,使配置的參數生效,或者重啟系統
sysctl -p /etc/sysctl.conf


檢查配置的參數是否生效
cat /proc/sys/kernel/panic
10
cat /proc/sys/kernel/sysrq
1


模擬系統內核崩潰,同時按alt+sysrq+c三個鍵,或者運行如下命令
echo c  >/proc/sysrq
看以看到內核崩潰,並讀秒重啟


第三步 配置內核轉存
新裝的系統需要升級下,否則不能通過apt-get安裝軟件
apt-get update

安裝內核轉存
sudo apt-get install linux-crashdump

查看是否生效
cat /proc/cmdline
ro root=UUID=d845dbbd-8e42-4a58-a6ff-90313562f232 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=129M@0M  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet


測試,模擬系統內核崩潰,同時按alt+sysrq+c三個鍵,或者運行如下命令
發現系統崩潰,並卡死住,沒有發送轉存,也沒有重啟!


經過查找資料,發送這樣的情況,
可能和core dump內存配置不夠有關系,
於是修改了core dump內存配置內存配置
cd /etc/grub.d/
vi 10_linux
修改成512M大小
crashkernel=384M-2G:64M,2G-:512M

重新生成grub.cfg
grub-mkconfig  -o  /boot/grub/grub.cfg


再測試,成功。



問題

遇到virsh命令無反應需要重啟libvirtd服務

/etc/init.d/libvirtd restart

 


 

用哪個廠家的服務器就注定要用那家的硬盤

戴爾服務器用戴爾原裝硬盤

 


 

每一個虛擬機都對應每個物理機的vnet虛擬網卡

virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     gzxtest02                      running
 2     gzxtest04                      running
 4     gzxtest03                      running
 -     gzxtest09                      shut off

[root@gzxkvm53 ~]# ifconfig -a
br0       Link encap:Ethernet  HWaddr 34:17:EB:F0:04:6B  
          inet addr:10.11.30.53  Bcast:10.11.30.255  Mask:255.255.255.0
          inet6 addr: fe80::3617:ebff:fef0:46b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5743351 errors:0 dropped:0 overruns:0 frame:0
          TX packets:56943 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:692330471 (660.2 MiB)  TX bytes:5007556 (4.7 MiB)

em1       Link encap:Ethernet  HWaddr 34:17:EB:F0:04:6B  
          inet6 addr: fe80::3617:ebff:fef0:46b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6263348 errors:51 dropped:0 overruns:0 frame:40
          TX packets:3195751 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:930033726 (886.9 MiB)  TX bytes:1959941318 (1.8 GiB)
          Interrupt:16

em2       Link encap:Ethernet  HWaddr 34:17:EB:F0:04:6C  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Interrupt:17

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:18 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1554 (1.5 KiB)  TX bytes:1554 (1.5 KiB)

vnet0     Link encap:Ethernet  HWaddr FE:54:00:B7:B9:F2  
          inet6 addr: fe80::fc54:ff:feb7:b9f2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3301490 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4810193 errors:0 dropped:0 overruns:501 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:2194463404 (2.0 GiB)  TX bytes:681705310 (650.1 MiB)

vnet1     Link encap:Ethernet  HWaddr FE:54:00:1B:90:B4  
          inet6 addr: fe80::fc54:ff:fe1b:90b4/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2582 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3425322 errors:0 dropped:0 overruns:1002 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:687276 (671.1 KiB)  TX bytes:466564653 (444.9 MiB)

vnet2     Link encap:Ethernet  HWaddr FE:54:00:58:81:48  
          inet6 addr: fe80::fc54:ff:fe58:8148/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:56767 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3651241 errors:0 dropped:0 overruns:501 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:5171782 (4.9 MiB)  TX bytes:752522079 (717.6 MiB)

 


qemu版本

centos6.8 下面執行

@符號表示這個軟件已經安裝了
yum list |grep qemu
gpxe-roms-qemu.noarch                       0.9.7-6.15.el6               @base  
qemu-img.x86_64                             0.12.1.2-2.491.el6_8.3     @updates
qemu-kvm.x86_64                             0.12.1.2-2.491.el6_8.3     @updates
qemu-kvm-tools.x86_64                       0.12.1.2-2.491.el6_8.3     @updates
qemu-guest-agent.x86_64                     0.12.1.2-2.491.el6_8.3     updates
vdsm-hook-faqemu.noarch                     4.16.20-1.git3a90f62.el6     epel   
vdsm-hook-qemucmdline.noarch                4.16.20-1.git3a90f62.el6     epel   


rpm -qf  /usr/bin/qemu-img
qemu-img-0.12.1.2-2.491.el6_8.3.x86_64


虛擬機的monitor目錄
ll /var/lib/libvirt/qemu
total 12
srwxr-xr-x 1 qemu qemu    0 Nov 13 00:20 CQ-HAPROXY02.monitor
srwxr-xr-x 1 qemu qemu    0 Nov 12 21:15 CQ-MONITOR02.monitor
srwxr-xr-x 1 qemu qemu    0 Nov 12 23:42 CQ-NGINX02.monitor
srwxr-xr-x 1 qemu qemu    0 Nov 15 23:16 CQ-TEST01.monitor
drwxr-xr-x 2 root root 4096 Nov 10 14:03 dump
drwxr-xr-x 2 qemu qemu 4096 Nov 10 14:03 save
drwxr-xr-x 2 qemu qemu 4096 Nov 10 14:03 snapshot

 

 

目前2.3.0-31是比較穩定的版本

 

 

 

f


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM