企業級虛擬化Virtualization - KVM技術


1、什么是虛擬化和虛擬機

1、虛擬化

(1)虛擬化是為一些組件(例如虛擬應用、服務器、存儲和網絡)創建基於軟件的(或虛擬)表現形式的過程。它是降
低所有規模企業的 IT 開銷,同時提高其效率和敏捷性的最有效方式。

(2)虛擬化可以提高 IT 敏捷性、靈活性和可擴展性,同時大幅節約成本。更高的工作負載移動性、更高的性能和資源
可用性、自動化運維 - 這些都是虛擬化的優勢,虛擬化技術可以使 IT 部門更輕松地進行管理以及降低擁有成本和運
維成本。其他優勢包括:

降低資金成本和運維成本。
最大限度減少或消除停機。
提高 IT 部門的工作效率、效益、敏捷性和響應能力。
加快應用和資源的調配速度。
提高業務連續性和災難恢復能力。
簡化數據中心管理。
真正的 Software-Defined Data Center 的可用性。

2、虛擬機  

虛擬計算機系統稱為“虛擬機”(VM),它是一種嚴密隔離且內含操作系統和應用的軟件容器。每個自包含虛擬機都是
完全獨立的。通過將多台虛擬機放置在一台計算機上,可僅在一台物理服務器或“主機”上運行多個操作系統和應用,
名為“hypervisor”的精簡軟件層可將虛擬機與主機分離開來,並根據需要為每個虛擬機動態分配計算資源。

虛擬機的主要特性:

1、分區
可在一台物理機上運行多個操作系統。
可在虛擬機之間分配系統資源。

2、隔離
可在硬件級別進行故障和安全隔離。
可利用高級資源控制功能保持性能。

3、封裝
可將虛擬機的完整狀態保存到文件中。
移動和復制虛擬機就像移動和復制文件一樣輕松。

4、獨立於硬件
可將任意虛擬機調配或遷移到任意物理服務器上。

2、雲計算

雲計算是概念最早是由Google 前首席執行官埃里克•施密特(Eric Schmidt)在2006 年8 月9 日的搜索引擎大會上首次提出的一種構想,而“雲計算”就是這種構想的代名詞,

雲計算以虛擬化為基礎,以網絡為中心,為用戶提供安全、快速、便捷的數據存儲和網絡計算服務,包括所需要的硬件、平台、軟件及服務等資源,而提供資源的網絡就被稱為“雲”。

1、雲計算分類:

公有雲:比如aws、阿里雲以及azure、金山雲、騰訊雲等都屬於公有雲,每個人都可以付費使用,不需要自己關心
底層硬件,但是數據安全需要考利。
私有雲:在自己公司內部或IDC自建Openstack、VMware等環境
混合雲:既要使用公有雲,又要使用私有雲,即自己的私有雲的部分業務和公有雲有交接,這部分稱為混合雲

2、雲計算分層 

IaaS:基礎設施服務,Infrastructure-as-a-service #自建機房 PaaS:平台服務,Platform-as-a-service #公有雲上的Redis、RDS等服務,
甚至是手機上的APP SaaS:軟件服務,Software-as-a-service #企業郵箱、OA系統等。

3、虛擬化技術分類

1、模擬器:在一個host之上通過虛擬化模擬器軟件,模擬出一個硬件或者多個硬件環境,每個環境都是一個獨立的虛擬機,CPU、IO、內存等都是模擬出來的,可以在宿主機模擬出不同於當前物理機CPU指令集的虛擬機,比如可以在Windows 模擬出mac OS、unix系統,比較出名的模擬器有:pearpc、QEMU、Bochs。

2、全虛擬機化/准虛擬化:full virtualization/native virtualization,全虛擬化不做CPU和內存模擬,只對CPU和內存做相應的分配等操作,完全虛擬化需要物理硬件的支持,比如需要CPU必須支持並且打開虛擬化功能,例如Intel的 Intel VT-X/EPT,AMD的AMD-V/RVI,以在CPU 層面支持虛擬化功能和內存虛擬化技術,因此完全虛擬化是基於硬件輔助的虛擬化技術,vmware workstation、vmware esxi、paralles desktop、KVM、Microsoft Hyper-V。

3、半虛擬化:para virtualization,半虛擬化要求guest OS 的內核是知道自己運行在虛擬化環境當中的,因此guestOS的系統架構必須和宿主機的系統架構相同,並且要求對guest OS的內核做相應的修改,因此半虛擬化只支持開源內核的系統,不支持閉源的系統,比較常見的半虛擬化就是早期版本的XEN,但是Xen 從其3.0 版本開始,可以支持利用硬件虛擬化技術的支持(http://www-archive.xenproject.org/files/xen_3.0_datasheet.pdf),實現了完全虛擬化,可以在其平台上不加修改的直接運行如Linux/Windows 等系列的操作系統,使得系統具備了更好的兼容性。

hypervisor類型 

直接運行到物理機:vmware esxi、rhev hypervisor

需要運行到操作系統:KVM,XEN,vmware workstation

4、KVM的介紹、准備工作和qemu-kvm 命令詳解

1、KVM介紹

(1)介紹

  KVM:就是Keyboard Video Mouse的縮寫。KVM 交換機通過直接連接鍵盤、視頻和鼠標 (KVM) 端口,讓您能夠訪問和控制計算機。KVM 技術無需目標服務器修改軟件。這就意味着可以在 Windows 的 BIOS 環境下,隨時訪問目標計算機。KVM 提供真正的主板級別訪問,並支持多平台服務器和串行設備。

  KVM 技術已經從最初的基礎SOHO辦公型,發展成為企業 IT 基礎機房設施管理系統。可以從kvm 客戶端管理軟件輕松的直接訪問位於多個遠程位置的服務器和設備。KVM over IP 解決方案具備完善的多地點故障轉移功能、符合新服務器管理標准 (IPMI) 的直接界面,以及將本地存儲媒體映射至遠程位置的功能。

  KVM 是個"怪胎",原本是類型2 的主機虛擬化;但一旦在OS 上加載了kvm.ko 模塊,就會"感染"OS,使其變為hypervisor(kvm),原本的軟件空間作為控制台,轉化成類型1 模式的主機虛擬化。

(2)KVM的組件

① kvm.ko:模塊

  API 應用程序編程接口

② qemu-kvm:用戶空間的工具程序;

  qemu-KVM是一種開源虛擬器,它為KVM管理程序提供硬件仿真。

   運行中的一個kvm虛擬機就是一個qemu-kvm進程,運行qemu-kvm程序並傳遞給它合適的選項及參數即能完成虛擬機啟動,終止此進程即能關閉虛擬機;

③ libvirt 虛擬化庫:Libvirt是一個C工具包,可以與最近版本的Linux(以及其他操作系統)的虛擬化功能進行交互。主包包含了導出虛擬化支持的libvirtd服務器。

  C/S:

    Client:

      libvirt-client

      virt-manager

  Daemon:

    libvirt-daemon

 

(3)KVM模塊load進內存之后,系統的運行模式:

  內核模式:GuestOS執行IO類的操作時,或其它的特殊指令操作時的模式;它也被稱為"Guest-Kernel"模式;

  用戶模式:Host OS的用戶空間,用於代為GuestOS發出IO請求;

  客戶機模式:GuestOS的用戶模式;所有的非IO類請求。

實戰一、實現宿主機為NAT模式,安裝疊加虛擬機

KVM需要宿主機CPU必須支持虛擬化功能,因此如果是在vmware workstation上使用虛擬機做宿主機,那么必須要在虛擬機配置界面的處理器選項中開啟虛擬機化功能。

(1)前提:

① 必須跑在x86 系統的架構上

② 必須支持硬件級虛擬化

  vmx:Intel VT-x

  svm:AMD AMD-v

③ 在虛擬機上再虛擬化,需開啟虛擬化 Intel VT-x/EPT,且虛擬機此時使用的是NAT模式網絡

(2)判斷CPU是否支持硬件虛擬化:

[root@centos-7~]#grep -E "vmx|svm" /proc/cpuinfo

注意:vmx 或 svm 必須出現一個,表示是支持的

  vmx:Intel VT-x

  svm:AMD AMD-v

 

 (3)安裝前准備

① 裝載KVM 模塊

[root@centos-7~]#yum install qemu-kvm qemu-kvm-tools libvirt virt-manager  virt-install -y

② 檢測kvm 模塊是否裝載

 

③ 啟動安裝的服務,並設置為開機啟動

[root@centos-7~]#systemctl start libvirtd
[root@centos-7~]#systemctl enable  libvirtd

3、virsh-install命令使用幫助:

[root@linux-node1 ~]# virt-install  --help
usage: virt-install --name NAME --ram RAM STORAGE INSTALL [options]

使用指定安裝介質新建虛擬機。

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  --connect URI         使用 libvirt URI 連接到 hypervisor

通用選項:
  -n NAME, --name NAME  客戶端事件名稱
  --memory MEMORY       配置虛擬機內存分配。例如:
                        --memory 1024 (in MiB)
                        --memory 512,maxmemory=1024
  --vcpus VCPUS         為虛擬機配置的 vcpus 數。例如:
                        --vcpus 5
                        --vcpus 5,maxcpus=10,cpuset=1-4,6,8
                        --vcpus sockets=2,cores=4,threads=2,
  --cpu CPU             CPU 型號及功能。例如:
                        --cpu coreduo,+x2apic
                        --cpu host
  --metadata METADATA   配置虛擬機元數據。例如:
                        --metadata name=foo,title="My pretty title",uuid=...
                        --metadata description="My nice long description"

安裝方法選項:
  --cdrom CDROM         光驅安裝介質
  -l LOCATION, --location LOCATION
                        安裝源(例如:nfs:host:/path、http://host/path
                        ftp://host/path)
  --pxe                 使用 PXE 協議從網絡引導
  --import              在磁盤映像中構建虛擬機
  --livecd              將光驅介質視為 Live CD
  -x EXTRA_ARGS, --extra-args EXTRA_ARGS
                        附加到使用 --location 引導的內核的參數
  --initrd-inject INITRD_INJECT
                        使用 --location 為 initrd 的 root
                        添加給定文件
  --os-variant DISTRO_VARIANT
                        在其中安裝 OS 變體的虛擬機,比如
                        'fedora18'、'rhel6'、'winxp' 等等。
  --boot BOOT           配置虛擬機引導設置。例如:
                        --boot hd,cdrom,menu=on
                        --boot init=/sbin/init (for containers)
  --idmap IDMAP         為 LXC 容器啟用用戶名稱空間。例如:
                        --idmap uid_start=0,uid_target=1000,uid_count=10

設備選項:
  --disk DISK           使用不同選項指定存儲。例如:
                        --disk size=10 (new 10GiB image in default location)
                        --disk /my/existing/disk,cache=none
                        --disk device=cdrom,bus=scsi
                        --disk=?
  -w NETWORK, --network NETWORK
                        配置虛擬機網絡接口。例如:
                        --network bridge=mybr0
                        --network network=my_libvirt_virtual_net
                        --network network=mynet,model=virtio,mac=00:11...
                        --network none
                        --network help
  --graphics GRAPHICS   配置虛擬機顯示設置。例如:
                        --graphics vnc
                        --graphics spice,port=5901,tlsport=5902
                        --graphics none
                        --graphics vnc,password=foobar,port=5910,keymap=ja
  --controller CONTROLLER
                        配置虛擬機控制程序設備。例如:
                        --controller type=usb,model=ich9-ehci1
  --input INPUT         配置虛擬機輸入設備。例如:
                        --input tablet
                        --input keyboard,bus=usb
  --serial SERIAL       配置虛擬機串口設備
  --parallel PARALLEL   配置虛擬機並口設備
  --channel CHANNEL     配置虛擬機溝通頻道
  --console CONSOLE     配置虛擬機與主機之間的文本控制台連接
  --hostdev HOSTDEV     將物理 USB/PCI/etc
                        主機設備配置為與虛擬機共享
  --filesystem FILESYSTEM
                        將主機目錄傳遞給虛擬機。例如:
                        --filesystem /my/source/dir,/dir/in/guest
                        --filesystem template_name,/,type=template
  --sound [SOUND]       配置虛擬機聲音設備模擬
  --watchdog WATCHDOG   配置虛擬機 watchdog 設備
  --video VIDEO         配置虛擬機視頻硬件。
  --smartcard SMARTCARD
                        配置虛擬機智能卡設備。例如:
                        --smartcard mode=passthrough
  --redirdev REDIRDEV   配置虛擬機重定向設備。例如:
                        --redirdev usb,type=tcp,server=192.168.1.1:4000
  --memballoon MEMBALLOON
                        配置虛擬機 memballoon 設備。例如:
                        --memballoon model=virtio
  --tpm TPM             配置虛擬機 TPM 設備。例如:
                        --tpm /dev/tpm
  --rng RNG             配置虛擬機 RNG 設備。例如:
                        --rng /dev/random
  --panic PANIC         配置虛擬機 panic 設備。例如:
                        --panic default

虛擬機配置選項:
  --security SECURITY   設定域安全驅動器配置。
  --numatune NUMATUNE   為域進程調整 NUMA 策略。
  --memtune MEMTUNE     為域進程調整內粗策略。
  --blkiotune BLKIOTUNE
                        為域進程調整 blkio 策略。
  --memorybacking MEMORYBACKING
                        為域進程設置內存后備策略。例如:
                        --memorybacking hugepages=on
  --features FEATURES   設置域 <features> XML。例如:
                        --features acpi=off
                        --features apic=on,eoi=on
  --clock CLOCK         設置域 <clock> XML。例如:
                        --clock offset=localtime,rtc_tickpolicy=catchup
  --pm PM               配置 VM 電源管理功能
  --events EVENTS       配置 VM 生命周期管理策略
  --resource RESOURCE   配置 VM 資源分區(cgroups)

虛擬化平台選項:
  -v, --hvm             客戶端應該是一個全虛擬客戶端
  -p, --paravirt        這個客戶端一個是一個半虛擬客戶端
  --container           這台虛擬機需要一個容器客戶端
  --virt-type HV_TYPE   要使用的管理程序名稱(kvm、qemu、xen
                        等等)
  --arch ARCH           模擬的 CPU 構架
  --machine MACHINE     要模擬的機器類型

其它選項:
  --autostart           引導主機時自動啟動域。
  --wait WAIT           等待安裝完成的分鍾數。
  --noautoconsole       不要自動嘗試連接到客戶端控制台
  --noreboot            完成安裝后不要引導虛擬機。
  --print-xml [XMLONLY]
                        輸出所生成域 XML,而不是創建虛擬機。
  --dry-run             完成安裝步驟,但不要創建設備或者定義
                        虛擬機。
  --check CHECK         啟用或禁用驗證檢查。例如:
                        --check path_in_use=off
                        --check all=off
  -q, --quiet           禁止無錯誤輸出
  -d, --debug           輸入故障排除信息

使用 '--option=?' 或者 '--option help' 查看可用子選項
有關示例及完整選項語法,請查看 man page。 

 1、創建10G磁盤

[root@centos-7~]#qemu-img create -f qcow2 /var/lib/libvirt/images/CentOS-7-x86_64.qcow2 10G    #qcow2格式的磁盤

 2、上傳鏡像到指定目錄

[root@centos-7src]#ls
CentOS-7-x86_64-Minimal-1908.iso
[root@centos-7src]#pwd
/usr/local/src

 3、在宿主機器上創建虛擬機

virt-install --virt-type kvm \
--name linux \   指定系統名稱
--memory 1024 \  指定系統內存大小
--vcpus=2 \   指定cpu數
--autostart \  宿主機開機與之自動啟動
--cdrom=/usr/local/src/CentOS-7-x86_64-Minimal-1908.iso \  鏡像路徑
--disk path=/var/lib/libvirt/images/CentOS-7-x86_64.qcow2 \  磁盤路徑
--network network=default \   使用默認網絡,此時是NAT網絡
--graphics vnc,listen=0.0.0.0  \
--noautoconsole

 4、通過VNC遠程控制,IP地址輸入此時本主機的IP地址和端口號5900,開始控制虛擬機,並安裝Linux系統,也可以用xshell連接,需要企業版本,安裝圖形化工具,也能管理內置虛擬機。

[root@centos-7~]#yum  groupinstall "GNOME Desktop"   安裝圖形化桌面,可以遠程控制,宿主機內部的虛擬機。
[root@centos-7~]#virt-manager   用此軟件連接進行遠程控制內置虛擬機。

  

  

 5、創建Linux磁盤分區。

  

 6、對磁盤進行分區

  

 7、重啟系統。

  

8、安裝完成后,開始在疊加虛擬機內部ping宿主機,可以ping通,但是由於是NAT網絡,內部可以訪問外部網絡,外部不能訪問到疊加虛擬機內部,且宿主機也無法訪問到此疊加虛擬機網絡,此場景不常用

  

 由於疊加虛擬機是NAT模式,此時宿主機是橋接模式,都無法訪問此虛擬機的IP地址,此時NAT模式的虛擬機模式完成。

 

4、virsh命令詳解:

(1)virsh命令:
虛擬機的生成需要依賴於預定義的xml格式的配置文件;其生成工具有兩個:virt-manager, virt-install; 
virsh [OPTION]... COMMAND [ARG]..
子命令的分類:
    Domain Management (help keyword 'domain')   域管理(幫助關鍵字“域”)
    Domain Monitoring (help keyword 'monitor')   域監視(幫助關鍵字“監視器”)
    Host and Hypervisor (help keyword 'host')   主機和管理程序(幫助關鍵字“主機”)
    Interface (help keyword 'interface')   接口(幫助關鍵字“接口”)
    Networking (help keyword 'network')   網絡(幫助關鍵字“網絡”)
    Network Filter (help keyword 'filter')   網絡過濾器(幫助關鍵字“過濾器”)
    Snapshot (help keyword 'snapshot')   快照(幫助關鍵字“快照”)
    Storage Pool (help keyword 'pool')   存儲池(help關鍵字“池”)
    Storage Volume (help keyword 'volume')   存儲卷(幫助關鍵字“卷”)
                
(2)域管理 Domain Management (help keyword 'domain')
創建虛擬機:
  create:從xml格式的配置文件創建並啟動虛擬機;
  define:從xml格式的配置文件創建虛擬機;
停止:
  destroy:強行關機、拔電源;
  shutdown:關機;
start:啟動
reboot:重啟;
undefine:刪除虛擬機;
suspend/resume:暫停於內存中,或繼續運行暫停狀態的虛擬機;真正實現的效果:pause/unpause
save/restore:掛起/繼續;保存虛擬機的當前狀態至文件中,或從指定文件恢復虛擬機;
console:連接至指定domain的控制台;
                    
(3)域的設備資源管理:
① cpu
  cpu-stats     查看cpu 信息
  vcpuinfo      查看vcpu 信息
  vcpucount     看有幾個cpu
  setvcpus   可以調整cpu數(如果是調整的是動態的,在創建虛擬機時設置,靜態的不行)
  vcpupin    把vcpu 綁定到真正的cpu 上
② memcache                        
  setmaxmem   修改最大內存(創建虛擬機時設置的是否可以修改)
  setmem   修改內存大小(沒超過上限時)
③ 設備                       
  attach-disk/detach-disk:磁盤設備的熱插拔;
  domblklist:查詢虛擬機的磁盤設備
  attach-interface/detach-interface:網絡接口設備的熱插拔;
  domiflist:查詢虛擬機的網卡設備

虛擬機管理命令示例:

yum install acpid  -y  安裝此包才能使用virsh命令對虛擬機進行管理

 virsh管理虛擬機常見用法:

[root@s1 src]# virsh list        #列出當前開機的
[root@s1 src]# virsh list --all  #列出所有
[root@s1 src]# virsh shutdown CentOS-7-x86_64     #正常關機
[root@s1 src]# virsh start CentOS-7-x86_64        #正常開機
[root@s1 src]# virsh destroy centos7         #強制停止/關機
[root@s1 src]# virsh undefine Win_2008_r2-x86_64  #強制刪除
[root@s1 src]# virsh autostart centos7      #設置開機自啟動

5、qemu-kvm命令語法

qemu-kvm  [options]  [disk_image]

選項有很多類別:標准選項、塊設備相關選項、顯示選項、網絡選項、..

(1)標准選項:
  -machine [type=]name:-machine help來獲取列表,用於指定模擬的主機類型; 
  -cpu cpu:-cpu help來獲取列表;用於指定要模擬的CPU型號;
  -smp n[,maxcpus=cpus][,cores=cores][,threads=threads]多少線程[,sockets=sockets]多少核:指明虛擬機上vcpu的數量及拓撲;
  -boot [order=drives][,once=drives]只用一次(如按照系統時只用一次光盤引導)[,menu=on|off] [,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_time][,strict=on|off]
  order:各設備的引導次序:c表示第一塊硬盤,d表示第一個光驅設備;-boot order=dc,once=d
  -m megs:虛擬機的內存大小;
  -name NAME:當前虛擬機的名稱,要惟一;

(2)塊設備相關的選項:
  -hda/-hdb file:指明IDE總線類型的磁盤映像文件路徑;第0和第1個;
  -hdc/-hdd file:第2和第3個;
  -cdrom file:指定要使用光盤映像文件; 
  -drive [file=file路徑][,if=type接口][,media=d接口對應的設備類型][,index=i] [,cache=writethrough|writeback|none|directsync|unsafe][,format=f]:
    ① file=/PATH/TO/SOME_IMAGE_FILE:映像文件路徑;
    ② if=TYPE:塊設備總線類型,ide, scsi, sd, floppy, virtio,...
    ③ media=TYPE:介質類型,cdrom和disk;
    ④ index=i:設定同一類型設備多個設備的編號;
    ⑤ cache=writethrough|writeback|none|directsync|unsafe:緩存方式;
    ⑥ format=f:磁盤映像文件的格式;
  CentOS磁盤鏡像文件下載: https://cloud.centos.org/centos/7/images/

(3)顯示選項:
  -display type:顯示的類型,sdl, curses, none和vnc;
  -nographic:不使用圖形接口; 顯卡型號
  -vga [std|cirrus|vmware|qxl|xenfb|none]:模擬出的顯卡的型號;
  -vnc display[,option[,option[,...]]]]:啟動一個vnc server來顯示虛擬機接口; 讓qemu進程監聽一個vnc接口; 
    display:
      ① HOST:N
        在HOST主機的第N個桌面號輸出vnc;
      ② unix:/PATH/TO/SOCK_FILE
      ③ none
    options:
      password:連接此服務所需要的密碼;
  -monitor stdio:在標准輸出上顯示monitor界面;
    Ctrl-a, c:在console和monitor之間切換;
    Ctrl-a, h
                        
(4)網絡選項:
  -net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
    為虛擬機創建一個網絡接口,並將其添加至指定的VLAN;
    model=type:指明模擬出的網卡的型號,ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio;
      net nic,model=?
    macaddr=mac:指明mac地址;52:54:00:
                            
  -net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]:
    通過物理的TAP網絡接口連接至vlan;
    script=file:啟動虛擬機時要執行的腳本,默認為/etc/qemu-ifup
    downscript=dfile:關閉虛擬機時要執行的腳本,/etc/qemu-ifdown
    ifname=NAME:自定義接口名稱;
其它選項:
  -daemonize:以守護進程運行;

 實戰二、實現橋接與僅主機模式,並構建疊加虛擬機的隧道虛擬通道

架構圖:

  

  1、選擇兩個虛擬機,每個虛擬機有兩個僅主機模式和兩個橋接模式,宿主機一安裝疊加虛擬機參考以上安裝方式:

    

     

 yum install bridge-utils   -y   #centos7.5以上版本就自帶此軟件,需要進行橋接綁定使用。

 配置宿主機一的橋接模式和僅主機模式

  現在一般的企業都會使用雙網卡接入,這樣既能添加網絡帶寬,同時又能做相應的冗余,可以說是好處多多。而一般企業都會使用linux操作系統下自帶的網卡綁定模式,當然現在網卡產商也會出一些針對windows操作系統網卡管理軟件來做網卡綁定(windows操作系統沒有網卡綁定功能 需要第三方支持),一共有其中方式,其中比較長用的是0/1/6:

  網卡綁定案例,先做綁定,然后再把綁定后的網卡配置成橋接:

  1、第一組配置,將ens33和ens37綁定為bond0:

  (1)先創建bond0配置那文件步驟及內容如下:

[root@centos-7network-scripts]#pwd
/etc/sysconfig/network-scripts
[root@centos-7network-scripts]#cat ifcfg-bond0
BOOTPROTO=static
NAME=bond0
DEVICE=bond0
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100" #指定綁定類型為1及鏈路狀態監測間隔時間
BRIDGE=br0  #橋接到br0

 (2)配置br0的IP地址,將bond0綁定在br0上。

[root@centos-7network-scripts]#cat ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1

(3)配置ens33

[root@centos-7network-scripts]#cat ifcfg-ens33
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
USERCTL=no
SLAVE=yes

 (4)配置ens37

[root@centos-7network-scripts]#cat ifcfg-ens37
BOOTPROTO=static
NAME=ens37
DEVICE=ens37
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
USERCTL=no
SLAVE=yes

2、將第二組僅主機模式的ens38和ens39綁定在bond1上  

 (1)先配置bond1的配置文件

[root@centos-7network-scripts]#cat ifcfg-bond1
BOOTPROTO=static
NAME=bond1
DEVICE=bond1
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100"
BRIDGE=br1

(2)配置br1的IP地址,並將bond1綁定在br1上

[root@centos-7network-scripts]#cat ifcfg-br1
TYPE=Bridge
BOOTPROTO=static
NAME=br1
DEVICE=br1
ONBOOT=yes
IPADDR=10.20.200.100
NETMASK=255.255.255.0

(3)將ens38綁定在bond1上

[root@centos-7network-scripts]#cat ifcfg-ens38
BOOTPROTO=static
NAME=ens38
DEVICE=ens38
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond1
USERCTL=no
SLAVE=yes

(4)將ens39綁定在bond1上

[root@centos-7network-scripts]#cat ifcfg-ens39
BOOTPROTO=static
NAME=ens39
DEVICE=ens39
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond1
USERCTL=no
SLAVE=yes

(5)修改完配置文件之后先將NetworkManager網卡關閉,否則會存在無法遠程連接的風險。

[root@rs1~]#systemctl  stop  NetworkManager
[root@rs1~]#systemctl disable  NetworkManager

3、在vm1虛擬機上配置

(1)將vm1虛擬機的網卡設置為橋接的br0上,(vm1虛擬機安裝過程見上面)

  virt-manager工具打開遠程連接進行設置,選擇到br0橋接,並點擊右下角的apply應用。

    

    

 (2)在內網添加一個網絡設備,然后將此網絡設備綁定在br1(僅主機模式)模式下,並選擇virtio模式(半虛擬化)

    

    

(3)配置eth0的IP地址,將其配置為外網地址

[root@localhost network-scripts]# cat ifcfg-eth0
BOOTPROTO=static
DEVICE="eth0"
ONBOOT="yes"
IPADDR=192.168.1.200
PREFIX=24
GATEWAY=192.168.1.1
DNS1=192.168.1.1

 配置eth1的IP地址,配置為內網地址

[root@localhost network-scripts]# cat ifcfg-eth1
BOOTPROTO=static
DEVICE="eth1"
ONBOOT="yes"
IPADDR=10.20.200.200
PREFIX=24

 安裝完成之后需要安裝連接網絡的包

yum install net-tools  -y

3、安裝vm2虛擬機

 1、配置vm2之前先要安裝vm2虛擬機系統,將安裝好的vm1虛擬機關閉,然后將安裝好的vm1虛擬機鏡像復制一份,再開始安裝,在安裝界面只需要強制關機,然后重新啟動,此時鏡像就會進行引導,將系統自動安裝上。

[root@centos-7images]#cp CentOS-7-x86_64.qcow2  CentOS.qcow2

 開始安裝系統,只需要將系統名稱修改一下,磁盤路徑修改一下即可。

virt-install --virt-type kvm \
--name linux777 \   修改系統名稱
--memory 1024 \
--vcpus=2 \
--autostart \
--cdrom=/usr/local/src/CentOS-7-x86_64-Minimal-1908.iso \
--disk path=/var/lib/libvirt/images/CentOS.qcow2 \  磁盤路徑修改一下即可
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0  \
--noautoconsole

然后用virt-manager命令打開界面,強制關機,重啟之后就會自動安裝上系統。

   

安裝完成之后需要安裝連接網絡的包

yum install net-tools  -y

在vm2虛擬機上配置(作為內網后端服務,外網無法直接訪問,保證安全性)

1、開始配置vm2的網卡及IP地址,先將網卡改為橋接模式,為了安裝httpd服務

   

2、配置IP地址,先改為自動獲取,可以連接外網,安裝httpd服務

[root@localhost network-scripts]# cat ifcfg-eth0
BOOTPROTO=dhcp
DEVICE="eth0"
ONBOOT="yes"
#IPADDR=10.20.200.201
#PREFIX=24

3、然后啟動vm2虛擬機,安裝httpd服務,創建一個顯示頁面

[root@centos-7~]#yum install httpd  -y
[root@centos-7~]#echo 10.20.200.201 > /var/www/html/index.html
[root@centos-7~]#systemctl start httpd

4、配置完httpd服務之后再將IP地址改為靜態內網IP地址,並將網卡綁定在br1上,設置為僅主機模式。

  

[root@localhost network-scripts]# cat ifcfg-eth0
BOOTPROTO=none
DEVICE="eth0"
ONBOOT="yes"
IPADDR=10.20.200.201
PREFIX=24

  

配置宿主機二的橋接模式和僅主機模式  

 1、第一組配置,將ens33和ens37綁定為bond0:

只需要將宿主機一的bond0/1、br0/1、ens33/37/38/39配置文件都復制到本主機一份,只需要修改br0和br1的IP地址即可。

[root@centos-7network-scripts]#scp ifcfg-ens* ifcfg-b* 192.168.1.201:/etc/sysconfig/network-scripts/

(1)先創建bond0配置那文件步驟及內容如下:

[root@centos-7network-scripts]#pwd
/etc/sysconfig/network-scripts
[root@centos-7network-scripts]#cat ifcfg-bond0
BOOTPROTO=static
NAME=bond0
DEVICE=bond0
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100" #指定綁定類型為1及鏈路狀態監測間隔時間
BRIDGE=br0  #橋接到br0

 (2)配置br0的IP地址,將bond0綁定在br0上。

[root@centos-7network-scripts]#cat ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.1.101
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1

(3)配置ens33

[root@centos-7network-scripts]#cat ifcfg-ens33
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
USERCTL=no
SLAVE=yes

 (4)配置ens37

[root@centos-7network-scripts]#cat ifcfg-ens37
BOOTPROTO=static
NAME=ens37
DEVICE=ens37
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
USERCTL=no
SLAVE=yes

2、將第二組僅主機模式的ens38和ens39綁定在bond1上  

 (1)先配置bond1的配置文件

[root@centos-7network-scripts]#cat ifcfg-bond1
BOOTPROTO=static
NAME=bond1
DEVICE=bond1
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100"
BRIDGE=br1

(2)配置br1的IP地址,並將bond1綁定在br1上

[root@centos-7network-scripts]#cat ifcfg-br1
TYPE=Bridge
BOOTPROTO=static
NAME=br1
DEVICE=br1
ONBOOT=yes
IPADDR=10.20.200.101
NETMASK=255.255.255.0

(3)將ens38綁定在bond1上

[root@centos-7network-scripts]#cat ifcfg-ens38
BOOTPROTO=static
NAME=ens38
DEVICE=ens38
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond1
USERCTL=no
SLAVE=yes

(4)將ens39綁定在bond1上

[root@centos-7network-scripts]#cat ifcfg-ens39
BOOTPROTO=static
NAME=ens39
DEVICE=ens39
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond1
USERCTL=no
SLAVE=yes

(5)修改完配置文件之后先將NetworkManager網卡關閉,否則會存在無法遠程連接到主機的風險。

[root@rs1~]#systemctl  stop  NetworkManager
[root@rs1~]#systemctl disable  NetworkManager

(6)配置完IP地址之后在宿主機二上ping宿主機一僅主機模式的IP地址,如果能ping通,則網卡綁定搭建完成。

   

4、開始在宿主機二上安裝vm3虛擬機

1、安裝前先安裝工具包

yum install qemu-kvm qemu-kvm-tools libvirt virt-manager  virt-install -y

2、啟動libvirtd服務,並設置為開機啟動

[root@rs1src]#systemctl start libvirtd
[root@rs1src]#systemctl enable libvirtd

3、在將宿主機一的鏡像文件復制到宿主機二上,並開始安裝虛擬機:

[root@centos-7~]#scp  /usr/local/src/CentOS-7-x86_64-Minimal-1908.iso  192.168.1.201:/usr/local/src/

 開始安裝系統:

virt-install --virt-type kvm \
--name linux77 \
--memory 1024 \
--vcpus=2 \
--autostart \
--cdrom=/usr/local/src/CentOS-7-x86_64-Minimal-1908.iso \
--disk path=/var/lib/libvirt/images/CentOS-7-x86_64.qcow2 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0  \
--noautoconsole

 4、在圖形界面上執行命令,進行安裝linux疊加虛擬機系統

[root@rs1src]#yum groupinstall "GNOME Desktop"  -y
[root@rs1src]#virt-manager

5、安裝完系統之后,設置網卡類型,一個綁定在br0(橋接模式),一個選擇br1(僅主機模式),並都選擇virtio(半虛擬化模式)

   

5、在vm3虛擬機配置

  1、virt-manager工具打開遠程連接進行設置,選擇到br0橋接,並點擊右下角的apply應用。

    

    

 2、在內網添加一個網絡設備,然后將此網絡設備綁定在br1模式下,並選擇virtio模式(半虛擬化)

    

    

 3、配置eth0的IP地址,將其配置為外網地址

[root@localhost network-scripts]# cat ifcfg-eth0
BOOTPROTO=static
DEVICE="eth0"
ONBOOT="yes"
IPADDR=192.168.1.202
PREFIX=24
GATEWAY=192.168.1.1
DNS1=192.168.1.1

 配置eth1的IP地址,配置為內網地址(僅主機模式)

[root@localhost network-scripts]# cat ifcfg-eth1
BOOTPROTO=static
DEVICE="eth1"
ONBOOT="yes"
IPADDR=10.20.200.202
PREFIX=24

設置完網卡,並配置完IP地址之后,安裝net-tools網絡包

[root@localhost network-scripts]# yum install net-tools -y

6、安裝vm4虛擬機 

將安裝好的vm3虛擬鏡像關機,然后將安裝好的疊加虛擬機鏡像復制一份,再開始安裝,在安裝界面只需要強制關機,然后重新啟動就會將系統自動安裝上。

[root@centos-7images]#cp CentOS-7-x86_64.qcow2  CentOS.qcow2

 開始安裝系統,只需要將系統名稱修改一下,磁盤路徑修改一下即可。

virt-install --virt-type kvm \
--name linux37 \   修改系統名稱
--memory 1024 \
--vcpus=2 \
--autostart \
--cdrom=/usr/local/src/CentOS-7-x86_64-Minimal-1908.iso \
--disk path=/var/lib/libvirt/images/CentOS.qcow2 \  磁盤路徑修改一下即可
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0  \
--noautoconsole

然后用virt-manager命令打開界面,強制關機,重啟之后就會自動安裝上系統。

   

在vm4虛擬機上配置(作為內網后端服務,外網無法直接訪問,保證安全性)

1、開始配置vm4的網卡及IP地址,先將網卡改為橋接模式,為了安裝httpd服務

   

2、配置IP地址,先改為自動獲取,可以連接外網,安裝httpd服務

[root@localhost network-scripts]# cat ifcfg-eth0
BOOTPROTO=dhcp
DEVICE="eth0"
ONBOOT="yes"
#IPADDR=10.20.200.203
#PREFIX=24

3、然后啟動vm2虛擬機,安裝httpd服務,創建一個顯示頁面

[root@centos-7~]#yum install httpd  -y
[root@centos-7~]#echo 10.20.200.201 > /var/www/html/index.html
[root@centos-7~]#systemctl start httpd

配置完成之后需要安裝連接網絡的包

yum install net-tools  -y

4、配置完httpd服務之后再將IP地址改為靜態內網IP地址,並將網卡綁定在br1上,使用僅主機模式,配置完成ip地址重啟network 。

  

[root@localhost network-scripts]# cat ifcfg-eth0
BOOTPROTO=none
DEVICE="eth0"
ONBOOT="yes"
IPADDR=10.20.200.203
PREFIX=24

注意:此時所有的基本架構搭建完,下來我們在vm1和vm3上安裝haproxy和keepalived,來實現高可用和調度到后端內網服務器上。

在vm1上安裝Haproxy和keepalived,並配置

1、安裝haproxy和keepalived包

[root@localhost network-scripts]# yum install haproxy keepalived -y

2、開始配置keepalived文件,設置為主節點:vi  /etc/keepalived/keepalived.conf

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_iptables
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.248 dev eth0 label eth0:0   綁定vip地址
    }
}

 3、配置haproxy文件:vi  /etc/haproxy/haproxy.cfg

global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

listen web
   bind 192.168.1.248:80  綁定vip地址
   server 10.20.200.201 10.20.200.201:80 check  監聽后端的vm2虛擬機
   server 10.20.200.203 10.20.200.203:80 check   監聽后端的vm4虛擬機

4、配置路由轉發功能

[root@localhost network-scripts]# vi  /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1
[root@localhost network-scripts]# sysctl -p  讓路由轉發參數生效
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1

配置完成后啟動haproxy和keepalived服務,並查看監聽端口是否打開

[root@localhost network-scripts]# systemctl start haproxy keepalived

  

在vm3上安裝haproxy和keepalived包,並配置

1、安裝haproxy和keepalived包

[root@localhost network-scripts]# yum install haproxy  keepalived  -y

2、將vm1虛擬機的keepalived配置文件復制過來,然后修改優先級,改為BACKUP即可。

[root@localhost network-scripts]# scp /etc/keepalived/keepalived.conf   192.168.1.202:/etc/keepalived/

  修改haproxy配置文件

[root@localhost network-scripts]# vi /etc/keepalived/keepalived.conf 
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_iptables
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP   從節點
    interface eth0
    virtual_router_id 51
    priority 80  優先級改為80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.248 dev eth0 label eth0:0
    }
}

3、將vm1上的haproxy配置文件復制過來即可。

[root@localhost network-scripts]# scp /etc/haproxy/haproxy.cfg  192.168.1.202:/etc/haproxy/

查看haproxy配置文件:vi  /etc/haproxy/haproxy.cfg

global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

listen web
   bind 192.168.1.248:80  綁定vip地址
   server 10.20.200.201 10.20.200.201:80 check  監聽后端的vm2虛擬機
   server 10.20.200.203 10.20.200.203:80 check   監聽后端的vm4虛擬機

配置完成后啟動haproxy和keepalived服務,並查看監聽端口是否打開

[root@localhost network-scripts]# systemctl start haproxy keepalived

   

4、配置路由轉發功能

[root@localhost network-scripts]# vi  /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1
[root@localhost network-scripts]# sysctl -p  讓路由轉發參數生效
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1

測試效果 

1、此時vm1和vm3主機的haproxy和keepalived服務都啟動;

外部只能通過訪問VIP地址才能調度到后端僅主機模式的vm2機器上,外部無法直接訪問內部IP地址的網絡,提高企業網絡安全。

  

2、將vm1的keepalived及后端vm2的httpd服務宕機,此時就會訪問到vm4主機的web網站上,起到了備用及高可用效果。

[root@localhost network-scripts]# systemctl stop keepalived
[root@localhost network-scripts]# systemctl stop httpd

  

如果vm2和vm4想要上外網,只需要再綁定一個橋接網卡,即可,僅主機模式只讓其提供覆蓋物即可,到此,雙網卡綁定橋接模式和僅主機模式已搭建完成。

如果我們只需要在宿主機綁定一個網卡時,只需要將一個網卡綁定在br0上做橋接即可。


免責聲明!

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



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