ProxmoxVE V5.2使用外部ceph儲存(luminous)詳解
繼上篇《 Linux/2018-12/../../Linux/2018-12/15576868.htm" rel="nofollow,noindex" target="_blank">ProxmoxVE V5.2叢集安裝圖解 )》 ,本來想模擬生產環境實現3節點叢集,並且使用ceph分散式儲存實現虛擬機器級別的HA,但是在使用pveceph 工具建立ceph環境的時候出錯了,發現需要商業訂閱才能使用。因此這篇博文想從另一個角度,先搭建外部ceph儲存叢集,供pve直接使用外部ceph儲存 。
同樣的,先準備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網段)使用。建立虛擬機器如下:
剩下2臺測試虛擬機器,直接克隆,分別為pve-2,pve-3 .
接下來分別啟動pve-1,pve-2,pve-3 進行proxmox VE的安裝,如下圖:
安裝步驟都很簡單,傻瓜式的,其中選擇硬碟會預設第一塊硬碟安裝系統,然後是設定root密碼等等,網路配置步驟:
這裡hostname要求寫成FQDN格式,我試了直接使用pve-2,不行,最後是使用pve-2.ywb.com 。
3臺虛擬機器同時安裝,非常快,不到10分鐘,居然就安裝完了!感覺比裝vmware的ESXI也更快啊。
點右下角的Reboot重啟。
第一階段搞定,後面就可以建叢集,配網路,建儲存之類的後續操作了。
通過輸入網址:
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
< style="max-width: 100%; font-family: 宋體, SimSun; margin: 0px; -webkit-font-smoothing: antialiased; -ms-word-break: break-all; padding: 0px;"> 配置免登陸訪問
< style="max-width: 100%; font-family: 宋體, SimSun; margin: 0px; -webkit-font-smoothing: antialiased; -ms-word-break: break-all; padding: 0px;">生成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-deploynew --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-deploydisk zap HOST DEVICE ,比如:ceph-deploydisk 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 ---------------------- NodeidVotes Name 0x000000011 192.168.1.51 0x000000021 192.168.1.52 (local) 0x000000031 192.168.1.53
此時,隨便登陸3個節點中的任何一臺的web介面,都可以管理整個叢集,如下圖:
四.叢集使用ceph儲存
使用外部ceph叢集裡建立的儲存池 ceph1,登陸web管理介面,如下圖:
注意,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儲存,如下圖:
生成虛擬機器之後,啟動虛擬機器,啟動失敗,報這個錯誤:
< style="font-size: 14px; font-family: 'Open Sans', Helvetica, Arial, sans-serif; color: #2c2c2c; background-color: #fafafa;"> "KVM virtualisation configured, but not available. Either disable in VM configuration or enable in BIOS".
應該是我的測試環境ProxmoxVE的問題,查了一下,應該是和虛擬化巢狀開啟有關,參考了這篇文章:
https://www.linuxidc.com/Linux/2018-12/15576870.htm
具體就不多解釋了,在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 表示已經支援虛擬巢狀。
再重新啟動上面建立的虛擬機器,成功!
安裝過程中觀察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分散式儲存,具備虛擬機器熱遷移的條件,首先實現一下虛擬機器熱遷移,然後再模擬虛擬機器所在物理機故障的情況下,虛擬機器自動遷移是否能夠實現。
熱遷移測試:
< style="font-size: 14px; font-family: 'Open Sans', Helvetica, Arial, sans-serif; color: #2c2c2c; background-color: #fafafa;"> 如下圖,虛擬機器從pve-1主機遷移到pve-2主機:
< style="font-size: 14px; font-family: 'Open Sans', Helvetica, Arial, sans-serif; color: #2c2c2c; background-color: #fafafa;">
經過大概20秒鐘左右,遷移完成,如下圖:
接下來將這個虛擬機器加入HA,如下圖:
模擬物理機故障,將pve-2強制stop,如下圖:
大概過了4分鐘左右,加入HA的虛擬機器在另一臺主機pve-3中自動啟動了,如下圖:
測試成功!
總結:
整體測試下來,難點在於ceph叢集的搭建,對於proxmoxVE來說,只要有外部的ceph儲存池,直接配置進來使用就行了,最多要再配置一下ceph的認證配置,使用了ceph儲存池之後,結合ProxmoxVE的叢集功能,就可以很開心的使用虛擬機器線上熱遷移,甚至實現虛擬機器HA,即虛擬機器所在物理機故障,虛擬機器可以自動遷移到其他正常物理機上。
有一點需要注意,其中如果物理機故障,虛擬機器HA自動遷移需要耗費的時間是以分鐘計算的。這也很好理解,因為叢集需要經過一段時間才能決定物理機確實脫離叢集,之後才會開始重新安排物理機恢復HA虛擬機器,能夠實現物理機故障的情況下自動遷移還是已經很不錯了,因為一般情況下,如果物理機故障,上面的虛擬機器恢復其實也是一件很頭疼的事情,如果能夠後臺在幾分鐘之內幫忙正常恢復,其實也是解決了大問題。
接下來需要考慮的是,由於不是使用ProxmoxVE自帶的ceph儲存管理,因此需要單獨維護ceph叢集,後面需要考慮對ceph的web管理和監控,這就是獨立的另外需要考慮的事情了。
不錯,經過這次測試,說明不花錢購買訂閱,使用外部ceph儲存,還是能夠實現高可用,超融合的虛擬化平臺這個當初的設想!
Linux公社的RSS地址 : https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址: https://www.linuxidc.com/Linux/2018-12/155769.htm