上面左邊是個人我的 微 信,如需進一步溝通,請加 微 信。 右邊是個人公衆號「Openstack私有云」,若有興趣,請關注。node
繼上篇博文《ProxmoxVE 之集羣安裝(V5.2)》 ,原本想模擬生產環境實現3節點集羣,而且使用ceph分佈式存儲實現虛擬機級別的HA,可是在使用pveceph 工具建立ceph環境的時候出錯了,發現須要商業訂閱才能使用(已解決,見下面的備註)。所以這篇博文想從另外一個角度,先搭建外部ceph存儲集羣,供pve直接使用外部ceph存儲 。ios
2019年1月31日注:web
pveceph 工具可使用,前提是須要更改pve的軟件源,方法以下:shell
重要!!!更改軟件源,默認是訂閱版,若是不作修改,在使用pveceph init進行ceph初始化安裝的時候會將整個環境破壞,切記!更改成非訂閱版,以下:centos
將/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集羣。api
一.環境準備:bash
建立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的安裝,以下圖:
app
安裝步驟都很簡單,傻瓜式的,其中選擇硬盤會默認第一塊硬盤安裝系統,而後是設置root密碼等等,網絡配置步驟:
這裏hostname要求寫成FQDN格式,我試了直接使用pve-2,不行,最後是使用pve-2.ywb.com 。
3臺虛擬機同時安裝,很是快,不到10分鐘,竟然就安裝完了!感受比裝vmware的ESXI也更快啊。
點右下角的Reboot重啓。
第一階段搞定,後面就能夠建集羣,配網絡,建存儲之類的後續操做了。
經過輸入網址:
分別能夠管理這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界面,均可以管理整個集羣,以下圖:
四.集羣使用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存儲,以下圖:
生成虛擬機以後,啓動虛擬機,啓動失敗,報這個錯誤:
"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 表示已經支持虛擬嵌套。
再從新啓動上面建立的虛擬機,成功!
安裝過程當中觀察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主機:
通過大概20秒鐘左右,遷移完成,以下圖:
接下來將這個虛擬機加入HA,以下圖:
模擬物理機故障,將pve-2強制stop,以下圖:
大概過了4分鐘左右,加入HA的虛擬機在另外一臺主機pve-3中自動啓動了,以下圖:
測試成功!
總結:
總體測試下來,難點在於ceph集羣的搭建,對於proxmoxVE來講,只要有外部的ceph存儲池,直接配置進來使用就好了,最多要再配置一下ceph的認證配置,使用了ceph存儲池以後,結合ProxmoxVE的集羣功能,就能夠很開心的使用虛擬機在線熱遷移,甚至實現虛擬機HA,即虛擬機所在物理機故障,虛擬機能夠自動遷移到其餘正常物理機上。
有一點須要注意,其中若是物理機故障,虛擬機HA自動遷移須要耗費的時間是以分鐘計算的。這也很好理解,由於集羣須要通過一段時間才能決定物理機確實脫離集羣,以後纔會開始從新安排物理機恢復HA虛擬機,可以實現物理機故障的狀況下自動遷移仍是已經很不錯了,由於通常狀況下,若是物理機故障,上面的虛擬機恢復其實也是一件很頭疼的事情,若是可以後臺在幾分鐘以內幫忙正常恢復,其實也是解決了大問題。
接下來須要考慮的是,因爲不是使用ProxmoxVE自帶的ceph存儲管理,所以須要單獨維護ceph集羣,後面須要考慮對ceph的web管理和監控,這就是獨立的另外須要考慮的事情了。
不錯,通過此次測試,說明不花錢購買訂閱,使用外部ceph存儲,仍是可以實現高可用,超融合的虛擬化平臺這個當初的設想!
PromixVE 系列文章: