ProxmoxVE(V5.2) 之 使用外部ceph存儲(luminous)

blob.png blob.png

 上面左邊是我的個人 微  信,如需進一步溝通,請加  微  信。  右邊是我的公衆號“Openstack私有云”,如有興趣,請關注。


    繼上篇博文《ProxmoxVE 之集羣安裝(V5.2)》 ,本來想模擬生產環境實現3節點集羣,並且使用ceph分佈式存儲實現虛擬機級別的HA,但是在使用pveceph 工具創建ceph環境的時候出錯了,發現需要商業訂閱才能使用(已解決,見下面的備註)。因此這篇博文想從另一個角度,先搭建外部ceph存儲集羣,供pve直接使用外部ceph存儲 。

2019年1月31日注:

    pveceph 工具可以使用,前提是需要更改pve的軟件源,方法如下:

  重要!!!更改軟件源,默認是訂閱版,如果不做修改,在使用pveceph init進行ceph初始化安裝的時候會將整個環境破壞,切記!更改爲非訂閱版,如下:

將/etc/apt/sources.list.d/pve-enterprise.list  文件內的唯一一條記錄註釋掉:
#deb https://enterprise.proxmox.com/debian/pve stretch pve-enterprise
wget -q -O- 'http://download.proxmox.com/debian/pve/dists/stretch/proxmox-ve-release-5.x.gpg' | apt-key add -
echo "deb http://download.proxmox.com/debian/pve stretch pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
apt update && atp dist-upgrade


    同樣的,先準備3個節點的環境,先裝上proxmox5.2-1 ,然後在這個3個節點上使用ceph-deploy安裝部署ceph集羣。

一.環境準備:

    創建3個虛擬機,3vcpu/12G內存/4塊硬盤/2塊網卡 ,其中硬盤方面1塊硬盤爲系統盤31G,2塊30G的ceph盤,1塊32G的lvm盤,網卡方面1塊網卡同時給集羣和虛擬機使用(192.168.1.0/24網段),1塊網卡作爲ceph存儲網絡(192.168.170.0/24網段)使用。創建虛擬機如下:

    image.png


    剩下2臺測試虛擬機,直接克隆,分別爲pve-2,pve-3 .

    接下來分別啓動pve-1,pve-2,pve-3 進行proxmox VE的安裝,如下圖:


image.png

安裝步驟都很簡單,傻瓜式的,其中選擇硬盤會默認第一塊硬盤安裝系統,然後是設置root密碼等等,網絡配置步驟:


image.png

這裏hostname要求寫成FQDN格式,我試了直接使用pve-2,不行,最後是使用pve-2.ywb.com 。


    3臺虛擬機同時安裝,非常快,不到10分鐘,居然就安裝完了!感覺比裝vmware的ESXI也更快啊。

image.png

點右下角的Reboot重啓。

image.png

第一階段搞定,後面就可以建集羣,配網絡,建存儲之類的後續操作了。

    通過輸入網址:

    https://192.168.1.51:8006

    https://192.168.1.52:8006

    https://192.168.1.53:8006

    分別可以管理這3臺pve。

debian系統更新:

    接下來下來我們更新一下proxomx的軟件,proxmox的底層畢竟是個debian系統,剛安裝還是要更新一下的,在shell中輸入aptupdate && apt dist-upgrade,回車,發現報錯無法更新,查看官方文檔發現需要更改一些設置,在shell輸入

    rm -f /etc/apt/sources.list.d/pve-enterprise.list
添加新的
    echo "deb http://download.proxmox.com/debian/pve stretch pve-no-subscription" >/etc/apt/sources.list.d/pve-install-repo.list
下載祕鑰
    wget http://download.proxmox.com/debian/proxmox-ve-release-5.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-5.x.gpg
再次輸入 
    apt update && apt dist-upgrade


二.  ceph集羣安裝

    ceph集羣我準備使用192.168.1.0/24這個網段作爲ceph的集羣管理網絡,192.168.170.0/24 作爲ceph數據網絡。首先找到ceph官網的指導網頁:

    http://docs.ceph.com/docs/master/start/quick-start-preflight/#ceph-deploy-setup

    根據上面這個操作手冊,看ProxmoxVE5.2-1使用的是debian 9 操作系統。具體步驟如下:

環境預配置

    配置/etc/hosts:

    以pve-1爲例:
    192.168.1.51 pve-1.ywb.com pve-1 pvelocalhost
    192.168.1.52 pve-2.ywb.com pve-2
    192.168.1.53 pve-3.ywb.com pve-3

    

    配置免登陸訪問

    生成ssh-key


    # ssh-keygen    ---pve環境已經生成了,略過
    對需要訪問的機器進行認證,拷貝到所有節點
    # ssh-copy-id root@pve-1   
    # ssh-copy-id root@pve-2 
    # ssh-copy-id root@pve-3


    設置防火牆:

    查看了iptables -L 以及 iptables -L -t nat ,發現防火牆沒有任何設置,如果在後續pve啓用防火牆的過程中,需要特別注意ceph這一塊相應的端口需要開放,主要有這些端口:

    OSD使用的端口:6800-7300

    monitor使用的端口:6789

    設置時鐘同步:

    apt install ntp

    

    配置ceph軟件源 (使用163鏡像)

  wget -q -O- 'https://download.ceph.com/keys/release.asc' |  apt-key add -
    echo deb http://mirrors.163.com/ceph/debian-luminous/ stretch main |  tee /etc/apt/sources.list.d/ceph.list
    #使用163基礎鏡像源,修改sources.list文件如下:
    root@pve-1# more /etc/apt/sources.list
    #deb http://ftp.debian.org/debian stretch main contrib
    deb http://mirrors.163.com/debian stretch main contrib
    
    #deb http://ftp.debian.org/debian stretch-updates main contrib
    deb http://mirrors.163.com/debian stretch-updates main contrib
    
    # security updates
    deb http://security.debian.org stretch/updates main contrib

    


安裝ceph-deploy工具

    ceph-deploy是ceph官方提供的部署工具,它通過ssh遠程登錄其它各個節點上執行命令完成部署過程,我們可以隨意選擇一臺服務器安裝此工具,爲方便,這裏我們選擇pve-1節點安裝ceph-deploy

    我們把pve-1節點上的/data/ceph/deploy目錄作爲ceph-deploy部署目錄,其部署過程中生成的配置文件,key密鑰,日誌等都位於此目錄下,因此下面部署應當始終在此目錄下進行

    apt install ceph-deploy -y
    mkdir -p /data/ceph/deploy

    ceph-deploy工具默認使用root用戶SSH到各Ceph節點執行命令。爲了方便,已經配置ceph-deploy免密碼登陸各個節點。如果ceph-deploy以某個普通用戶登陸,那麼這個用戶必須有無密碼使用sudo的權限。



安裝ceph集羣

    ceph軟件包安裝

    首先安裝ceph軟件包到三個節點上。上面我們已經配置好ceph源,因此這裏使用--no-adjust-repos參數忽略設置ceph源

    # ceph-deploy install --no-adjust-repos pve-1 pve-2 pve-3

    創建ceph集羣

    # ceph-deploy  new --cluster-network 192.168.1.0/24 --public-network 192.168.170.0/24 pve-1 pve-2 pve-3
    #上步會創建一個ceph.conf配置文件和一個監視器密鑰環到各個節點的/etc/ceph/目錄,ceph.conf中會有`fsid`,`mon_initial_members`,`mon_host`三個參數 
    #默認ceph使用集羣名ceph

    Ceph Monitors之間默認使用6789端口通信, OSD之間默認用6800:7300 範圍內的端口通信,多個集羣應當保證端口不衝突

    

    配置文件

    修改ceph-deploy目錄/data/ceph/deploy下的ceph.conf

    

    #/data/ceph/deploy/ceph.conf添加如下參數  
    osd_journal_size = 5120 
    osd_pool_default_size = 3
    osd_pool_default_min_size=1

    

    journal默認5G建議1TB數據5G,4T盤設置20G,這個影響性能的


    添加mons

    我們這裏創建三個Monitor

    

    cd /data/ceph/deploy
    ceph-deploy mon create pve-1 pve-2 pve-3
    #上面命令效果如下
    #1.write cluster configuration to /etc/ceph/{cluster}.conf
    #2.生成/var/lib/ceph/mon/ceph-pve-1/keyring
    #3.systemctl enable ceph-mon@pve-1
    #4.systemctl start ceph-mon@pve-1

    在一主機上新增監視器時,如果它不是由ceph-deploy new命令所定義的,那就必須把public network加入 ceph.conf配置文件

    

    key管理

    爲節點準備認證key

    ceph-deploy gatherkeys pve-1 pve-2 pve-3

    #若有需要,可以刪除管理主機上、本地目錄中的密鑰。可用下列命令:#ceph-deploy forgetkeys

    允許3臺主機以管理員權限執行 Ceph 命令

    ceph-deploy admin pve-1 pve-2 pve-3

  

    創建mgr

    cd /data/ceph/deploy
    ceph-deploy mgr create pve-1
    ceph-deploy mgr create pve-2
    ceph-deploy mgr create pve-3

    注意,原來版本mgr主要是爲了ceph的文件系統服務使用的,但是現在的luminous版本發現即使不使用ceph文件系統服務,也需要安裝這個服務,否則ceph -s 或者ceph -w 的data統計部分顯示是0,具體變化後面再參考一下官方文檔。

    

osd創建

    創建集羣,安裝ceph包,收集密鑰之後,就可以創建osd了


    ceph-deploy osd create pve-1 --data /dev/sdc
    ceph-deploy osd create pve-1 --data /dev/sdd
    ceph-deploy osd create pve-2 --data /dev/sdc
    ceph-deploy osd create pve-2 --data /dev/sdd
    ceph-deploy osd create pve-3 --data /dev/sdc
    ceph-deploy osd create pve-3 --data /dev/sdd

    

    --journal 可以專門指定日誌盤,這裏不單獨使用日誌盤。 

    這樣創建出來的vg和lv名稱是隨機的。


    如果中間需要重新刪除osd,步驟:

    1.停osd服務:  systemctl stop ceph-osd\*.service ceph-osd.target
    2.將osd提出集羣: ceph osd out {osd-num}
    3.刪除 CRUSH Map 中的對應 OSD 條目: ceph osd crush remove {name}  ,其中name可以通過命令ceph osd crush dump查看 ,比如osd.0
    4.刪除 OSD 認證密鑰: ceph auth del osd.{osd-num}
    5.刪除 OSD : ceph osd rm {osd-num}
    6.如果需要擦出磁盤數據使用命令: ceph-deploy  disk zap HOST DEVICE ,比如:ceph-deploy  disk zap pve-1 /dev/sdc


      

    需要注意,以上的ceph-deploy命令始終在同一個目錄/data/ceph/deploy 下執行,否則會出現配置文件不一致的問題。

     

創建ceph存儲池pool:

    ceph osd pool create ceph-external 64


最後查看集羣狀態:

  
root@pve-2:~# ceph -w
  cluster:
    id:     0320d45c-fe5b-4e3d-b515-e223ed5b5686
    health: HEALTH_WARN
            application not enabled on 1 pool(s)
 
  services:
    mon: 3 daemons, quorum pve-1,pve-2,pve-3
    mgr: pve-1(active)
    osd: 6 osds: 6 up, 6 in
 
  data:
    pools:   1 pools, 64 pgs
    objects: 5 objects, 133B
    usage:   6.03GiB used, 174GiB / 180GiB avail
    pgs:     64 active+clean
 
2018-09-25 15:17:26.938346 mon.pve-1 [WRN] Health check failed: application not enabled on 1 pool(s) (POOL_APP_NOT_ENABLED)
2018-09-25 16:00:00.000115 mon.pve-1 [WRN] overall HEALTH_WARN application not enabled on 1 pool(s)
    發現有“application not enabled on 1 pool(s) (POOL_APP_NOT_ENABLED)”錯誤,可以通過下面的命令消除掉:
    ceph osd pool application enable ceph-external rbd
    執行完之後ceph -w實時顯示:
2018-09-25 16:25:12.540558 mon.pve-1 [INF] Cluster is now healthy



三. Proxmox創建集羣

    ssh登陸pve-1使用命令pvecm create創建集羣cluster1:

    pvecm create cluster1

    ssh登陸pve-2和pve-3使用命令pvecm add 加入集羣cluster1:

    pvecm add 192.168.1.51

    執行完成之後可以在3個節點上使用pvecm status 查看集羣狀態:

root@pve-2:/etc/ceph# pvecm status
    Quorum information
    ------------------
    Date:             Mon Sep 24 19:11:19 2018
    Quorum provider:  corosync_votequorum
    Nodes:            3
    Node ID:          0x00000002
    Ring ID:          1/12
    Quorate:          Yes
    
    Votequorum information
    ----------------------
    Expected votes:   3
    Highest expected: 3
    Total votes:      3
    Quorum:           2  
    Flags:            Quorate 
    
    Membership information
    ----------------------
        Nodeid      Votes Name
    0x00000001          1 192.168.1.51
    0x00000002          1 192.168.1.52 (local)
    0x00000003          1 192.168.1.53

    此時,隨便登陸3個節點中的任何一臺的web界面,都可以管理整個集羣,如下圖:

image.png


四.集羣使用ceph存儲


    使用外部ceph集羣裏創建的存儲池 ceph1,登陸web管理界面,如下圖:

image.png

注意,ceph-external這個pool就是上面創建的ceph池。



創建ceph認證文件:

在任意一個節點上運行:

mkdir /etc/pve/priv/ceph
cp /etc/ceph/ceph.client.admin.keyring /etc/pve/priv/ceph/ceph1.keyring

注意:ceph1.keyring 中的ceph1 是指存儲的ID號ceph1

 由於建立了集羣,使用了proxmoxfs集羣文件系統,/etc/pve目錄屬於集羣資源,3個節點共用,因此只需要在任何一個節點執行上面的命令即可。


接下來,上傳ISO鏡像,生成虛擬機,使用ceph存儲,如下圖:

image.png


生成虛擬機之後,啓動虛擬機,啓動失敗,報這個錯誤:

 "KVM virtualisation configured, but not available. Either disable in VM configuration or enable in BIOS". 

應該是我的測試環境ProxmoxVE的問題,查了一下,應該是和虛擬化嵌套開啓有關,參考了這篇文章:

https://blog.51cto.com/kusorz/1925172

具體就不多解釋了,在ProxmoxVE物理機上(注意,不是上面3個pve-1/pve-2/pve-3)執行下面的命令:

root@pve:~# modprobe -r kvm_intel
root@pve:~# modprobe kvm_intel nested=1
root@pve:~# cat /sys/module/kvm_intel/parameters/nested
Y
root@pve:~# echo "options kvm_intel nested=1" >> /etc/modprobe.d/modprobe.conf
root@pve:~# qm showcmd 111
/usr/bin/kvm -id 111 -name pve-1 -chardev 'socket,id=qmp,path=/var/run/qemu-server/111.qmp,server,nowait' -mon 'chardev=qmp,mode=control' -pidfile /var/run/qemu-server/111.pid -daemonize -smbios 'type=1,uuid=d9eb0729-f0ee-4176-836d-308b70d13754' -smp '3,sockets=1,cores=3,maxcpus=3' -nodefaults -boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' -vga std -vnc unix:/var/run/qemu-server/111.vnc,x509,password -cpu kvm64,+lahf_lm,+sep,+kvm_pv_unhalt,+kvm_pv_eoi,enforce -m 12000 -device 'pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e' -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f' -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' -device 'usb-tablet,id=tablet,bus=uhci.0,port=1' -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' -iscsi 'initiator-name=iqn.1993-08.org.debian:01:b48afece2d1' -drive 'file=/var/lib/vz/template/iso/proxmox-ve_5.2-1.iso,if=none,id=drive-ide2,media=cdrom,aio=threads' -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=200' -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' -drive 'file=/dev/pvevg2/vm-111-disk-7,if=none,id=drive-scsi0,format=raw,cache=none,aio=native,detect-zeroes=on' -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100' -drive 'file=/dev/pvevg2/vm-111-disk-2,if=none,id=drive-scsi1,format=raw,cache=none,aio=native,detect-zeroes=on' -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1' -drive 'file=/dev/pvevg2/vm-111-disk-3,if=none,id=drive-scsi2,format=raw,cache=none,aio=native,detect-zeroes=on' -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=2,drive=drive-scsi2,id=scsi2' -drive 'file=/dev/pvevg2/vm-111-disk-6,if=none,id=drive-scsi3,format=raw,cache=none,aio=native,detect-zeroes=on' -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=3,drive=drive-scsi3,id=scsi3' -netdev 'type=tap,id=net0,ifname=tap111i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' -device 'virtio-net-pci,mac=76:60:17:9D:6A:FF,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300' -netdev 'type=tap,id=net1,ifname=tap111i1,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' -device 'virtio-net-pci,mac=6A:93:EB:0E:A8:84,netdev=net1,bus=pci.0,addr=0x13,id=net1,bootindex=301'
找到“-cpu kvm64,+lahf_lm,+sep,+kvm_pv_unhalt,+kvm_pv_eoi,enforce”這部分,在enforce前面加“+vmx,”參數如下:
-cpu kvm64,+lahf_lm,+sep,+kvm_pv_unhalt,+kvm_pv_eoi,+vmx,enforce
然後執行:qm stop 111 停止虛擬機後,再執行上面修改後的命令。
虛擬機啓動後,ssh進入,執行 grep vmx /proc/cpuinfo 查看是不是有輸出,如下:
root@pve-1:~# grep vmx /proc/cpuinfo 
flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc nopl xtopology cpuid pni vmx cx16 x2apic hypervisor lahf_lm cpuid_fault pti tpr_shadow vnmi flexpriority ept vpid
flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc nopl xtopology cpuid pni vmx cx16 x2apic hypervisor lahf_lm cpuid_fault pti tpr_shadow vnmi flexpriority ept vpid
flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc nopl xtopology cpuid pni vmx cx16 x2apic hypervisor lahf_lm cpuid_fault pti tpr_shadow vnmi flexpriority ept vpid
表示已經支持虛擬嵌套。

再重新啓動上面創建的虛擬機,成功!

image.png


安裝過程中觀察ceph -w 實時輸出:

root@pve-1:~# ceph -w
  cluster:
    id:     0320d45c-fe5b-4e3d-b515-e223ed5b5686
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum pve-1,pve-2,pve-3
    mgr: pve-1(active), standbys: pve-2, pve-3
    osd: 6 osds: 6 up, 6 in
 
  data:
    pools:   1 pools, 64 pgs
    objects: 158 objects, 577MiB
    usage:   7.66GiB used, 172GiB / 180GiB avail
    pgs:     64 active+clean
 
  io:
    client:   19.2KiB/s rd, 1.83MiB/s wr, 2op/s rd, 111op/s wr
2018-09-25 20:00:00.000168 mon.pve-1 [INF] overall HEALTH_OK


其中,io  client:   19.2KiB/s rd, 1.83MiB/s wr, 2op/s rd, 111op/s wr 顯示了io讀取實時數據。


五.高可用測試


    上面建了一個虛擬機centos7-1使用的是ceph分佈式存儲,具備虛擬機熱遷移的條件,首先實現一下虛擬機熱遷移,然後再模擬虛擬機所在物理機故障的情況下,虛擬機自動遷移是否能夠實現。

熱遷移測試:

    如下圖,虛擬機從pve-1主機遷移到pve-2主機:

image.png


經過大概20秒鐘左右,遷移完成,如下圖:

image.png


接下來將這個虛擬機加入HA,如下圖:

image.png

image.png


模擬物理機故障,將pve-2強制stop,如下圖:

image.png


大概過了4分鐘左右,加入HA的虛擬機在另一臺主機pve-3中自動啓動了,如下圖:

image.png


測試成功!


總結:

    整體測試下來,難點在於ceph集羣的搭建,對於proxmoxVE來說,只要有外部的ceph存儲池,直接配置進來使用就行了,最多要再配置一下ceph的認證配置,使用了ceph存儲池之後,結合ProxmoxVE的集羣功能,就可以很開心的使用虛擬機在線熱遷移,甚至實現虛擬機HA,即虛擬機所在物理機故障,虛擬機可以自動遷移到其他正常物理機上。

    有一點需要注意,其中如果物理機故障,虛擬機HA自動遷移需要耗費的時間是以分鐘計算的。這也很好理解,因爲集羣需要經過一段時間才能決定物理機確實脫離集羣,之後纔會開始重新安排物理機恢復HA虛擬機,能夠實現物理機故障的情況下自動遷移還是已經很不錯了,因爲一般情況下,如果物理機故障,上面的虛擬機恢復其實也是一件很頭疼的事情,如果能夠後臺在幾分鐘之內幫忙正常恢復,其實也是解決了大問題。

    接下來需要考慮的是,由於不是使用ProxmoxVE自帶的ceph存儲管理,因此需要單獨維護ceph集羣,後面需要考慮對ceph的web管理和監控,這就是獨立的另外需要考慮的事情了。

    不錯,經過這次測試,說明不花錢購買訂閱,使用外部ceph存儲,還是能夠實現高可用,超融合的虛擬化平臺這個當初的設想!



PromixVE 系列文章:


proxmox-私有云的另一個選擇

proxmox 之 與openstack的比較

ProxmoxVE 之集羣安裝(V5.2)

ProxmoxVE(V5.2) 之 使用外部ceph存儲(luminous)    




    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章