繼上篇《ProxmoxVE V5.2集群安裝圖解)》 ,本來想模擬生產(chǎn)環(huán)境實現(xiàn)3節(jié)點集群,并且使用ceph分布式存儲實現(xiàn)虛擬機級別的HA,但是在使用pveceph 工具創(chuàng)建ceph環(huán)境的時候出錯了,發(fā)現(xiàn)需要商業(yè)訂閱才能使用。因此這篇博文想從另一個角度,先搭建外部ceph存儲集群,供pve直接使用外部ceph存儲 。
同樣的,先準(zhǔn)備3個節(jié)點的環(huán)境,先裝上proxmox5.2-1 ,然后在這個3個節(jié)點上使用ceph-deploy安裝部署ceph集群。
一.環(huán)境準(zhǔn)備:
創(chuàng)建3個虛擬機,3vcpu/12G內(nèi)存/4塊硬盤/2塊網(wǎng)卡 ,其中硬盤方面1塊硬盤為系統(tǒng)盤31G,2塊30G的ceph盤,1塊32G的lvm盤,網(wǎng)卡方面1塊網(wǎng)卡同時給集群和虛擬機使用(192.168.1.0/24網(wǎng)段),1塊網(wǎng)卡作為ceph存儲網(wǎng)絡(luò)(192.168.170.0/24網(wǎng)段)使用。創(chuàng)建虛擬機如下:
剩下2臺測試虛擬機,直接克隆,分別為pve-2,pve-3 .
接下來分別啟動pve-1,pve-2,pve-3 進(jìn)行proxmox VE的安裝,如下圖:
安裝步驟都很簡單,傻瓜式的,其中選擇硬盤會默認(rèn)第一塊硬盤安裝系統(tǒng),然后是設(shè)置root密碼等等,網(wǎng)絡(luò)配置步驟:
這里hostname要求寫成FQDN格式,我試了直接使用pve-2,不行,最后是使用pve-2.ywb.com 。
3臺虛擬機同時安裝,非??欤坏?0分鐘,居然就安裝完了!感覺比裝vmware的ESXI也更快啊。
點右下角的Reboot重啟。
第一階段搞定,后面就可以建集群,配網(wǎng)絡(luò),建存儲之類的后續(xù)操作了。
通過輸入網(wǎng)址:
https://192.168.1.51:8006
https://192.168.1.52:8006
https://192.168.1.53:8006
分別可以管理這3臺pve。
debian系統(tǒng)更新:
接下來下來我們更新一下proxomx的軟件,proxmox的底層畢竟是個debian系統(tǒng),剛安裝還是要更新一下的,在shell中輸入aptupdate && apt dist-upgrade,回車,發(fā)現(xiàn)報錯無法更新,查看官方文檔發(fā)現(xiàn)需要更改一些設(shè)置,在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集群我準(zhǔn)備使用192.168.1.0/24這個網(wǎng)段作為ceph的集群管理網(wǎng)絡(luò),192.168.170.0/24 作為ceph數(shù)據(jù)網(wǎng)絡(luò)。首先找到ceph官網(wǎng)的指導(dǎo)網(wǎng)頁:
http://docs.ceph.com/docs/master/start/quick-start-preflight/#ceph-deploy-setup
根據(jù)上面這個操作手冊,看ProxmoxVE5.2-1使用的是debian 9 操作系統(tǒng)。具體步驟如下:
環(huán)境預(yù)配置
配置/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環(huán)境已經(jīng)生成了,略過 對需要訪問的機器進(jìn)行認(rèn)證,拷貝到所有節(jié)點 # ssh-copy-id root@pve-1 # ssh-copy-id root@pve-2 # ssh-copy-id root@pve-3
設(shè)置防火墻:
查看了iptables -L 以及 iptables -L -t nat ,發(fā)現(xiàn)防火墻沒有任何設(shè)置,如果在后續(xù)pve啟用防火墻的過程中,需要特別注意ceph這一塊相應(yīng)的端口需要開放,主要有這些端口:
OSD使用的端口:6800-7300
monitor使用的端口:6789
設(shè)置時鐘同步:
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基礎(chǔ)鏡像源,修改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遠(yuǎn)程登錄其它各個節(jié)點上執(zhí)行命令完成部署過程,我們可以隨意選擇一臺服務(wù)器安裝此工具,為方便,這里我們選擇pve-1節(jié)點安裝ceph-deploy
我們把pve-1節(jié)點上的/data/ceph/deploy目錄作為ceph-deploy部署目錄,其部署過程中生成的配置文件,key密鑰,日志等都位于此目錄下,因此下面部署應(yīng)當(dāng)始終在此目錄下進(jìn)行
apt install ceph-deploy -y mkdir -p /data/ceph/deploy
ceph-deploy工具默認(rèn)使用root用戶SSH到各Ceph節(jié)點執(zhí)行命令。為了方便,已經(jīng)配置ceph-deploy免密碼登陸各個節(jié)點。如果ceph-deploy以某個普通用戶登陸,那么這個用戶必須有無密碼使用sudo的權(quán)限。
安裝ceph集群
ceph軟件包安裝
首先安裝ceph軟件包到三個節(jié)點上。上面我們已經(jīng)配置好ceph源,因此這里使用–no-adjust-repos參數(shù)忽略設(shè)置ceph源
# ceph-deploy install --no-adjust-repos pve-1 pve-2 pve-3
創(chuàng)建ceph集群
# ceph-deploy new --cluster-network 192.168.1.0/24 --public-network 192.168.170.0/24 pve-1 pve-2 pve-3 #上步會創(chuàng)建一個ceph.conf配置文件和一個監(jiān)視器密鑰環(huán)到各個節(jié)點的/etc/ceph/目錄,ceph.conf中會有`fsid`,`mon_initial_members`,`mon_host`三個參數(shù) #默認(rèn)ceph使用集群名ceph
Ceph Monitors之間默認(rèn)使用6789端口通信, OSD之間默認(rèn)用6800:7300 范圍內(nèi)的端口通信,多個集群應(yīng)當(dāng)保證端口不沖突
配置文件
修改ceph-deploy目錄/data/ceph/deploy下的ceph.conf
#/data/ceph/deploy/ceph.conf添加如下參數(shù) osd_journal_size = 5120 osd_pool_default_size = 3 osd_pool_default_min_size=1
journal默認(rèn)5G建議1TB數(shù)據(jù)5G,4T盤設(shè)置20G,這個影響性能的
添加mons
我們這里創(chuàng)建三個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
在一主機上新增監(jiān)視器時,如果它不是由ceph-deploy new命令所定義的,那就必須把public network加入 ceph.conf配置文件
key管理
為節(jié)點準(zhǔn)備認(rèn)證key
ceph-deploy gatherkeys pve-1 pve-2 pve-3
#若有需要,可以刪除管理主機上、本地目錄中的密鑰。可用下列命令:#ceph-deploy forgetkeys
允許3臺主機以管理員權(quán)限執(zhí)行 Ceph 命令
ceph-deploy admin pve-1 pve-2 pve-3
創(chuàng)建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的文件系統(tǒng)服務(wù)使用的,但是現(xiàn)在的luminous版本發(fā)現(xiàn)即使不使用ceph文件系統(tǒng)服務(wù),也需要安裝這個服務(wù),否則ceph -s 或者ceph -w 的data統(tǒng)計部分顯示是0,具體變化后面再參考一下官方文檔。
osd創(chuàng)建
創(chuàng)建集群,安裝ceph包,收集密鑰之后,就可以創(chuàng)建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 可以專門指定日志盤,這里不單獨使用日志盤。
這樣創(chuàng)建出來的vg和lv名稱是隨機的。
如果中間需要重新刪除osd,步驟:
1.停osd服務(wù): systemctl stop ceph-osd*.service ceph-osd.target 2.將osd提出集群: ceph osd out {osd-num} 3.刪除 CRUSH Map 中的對應(yīng) OSD 條目: ceph osd crush remove {name} ,其中name可以通過命令ceph osd crush dump查看 ,比如osd.0 4.刪除 OSD 認(rèn)證密鑰: ceph auth del osd.{osd-num} 5.刪除 OSD : ceph osd rm {osd-num} 6.如果需要擦出磁盤數(shù)據(jù)使用命令: ceph-deploy disk zap HOST DEVICE ,比如:ceph-deploy disk zap pve-1 /dev/sdc
需要注意,以上的ceph-deploy命令始終在同一個目錄/data/ceph/deploy 下執(zhí)行,否則會出現(xiàn)配置文件不一致的問題。
創(chuàng)建ceph存儲池pool:
ceph osd pool create ceph-external 64
最后查看集群狀態(tài):
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) 發(fā)現(xiàn)有“application not enabled on 1 pool(s) (POOL_APP_NOT_ENABLED)”錯誤,可以通過下面的命令消除掉: ceph osd pool application enable ceph-external rbd 執(zhí)行完之后ceph -w實時顯示: 2018-09-25 16:25:12.540558 mon.pve-1 [INF] Cluster is now healthy
三. Proxmox創(chuàng)建集群
ssh登陸pve-1使用命令pvecm create創(chuàng)建集群cluster1:
pvecm create cluster1
ssh登陸pve-2和pve-3使用命令pvecm add 加入集群cluster1:
pvecm add 192.168.1.51
執(zhí)行完成之后可以在3個節(jié)點上使用pvecm status 查看集群狀態(tài):
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個節(jié)點中的任何一臺的web界面,都可以管理整個集群,如下圖:
四.集群使用ceph存儲
使用外部ceph集群里創(chuàng)建的存儲池 ceph1,登陸web管理界面,如下圖:
注意,ceph-external這個pool就是上面創(chuàng)建的ceph池。
創(chuàng)建ceph認(rèn)證文件:
在任意一個節(jié)點上運行:
mkdir /etc/pve/priv/ceph cp /etc/ceph/ceph.client.admin.keyring /etc/pve/priv/ceph/ceph1.keyring
注意:ceph1.keyring 中的ceph1 是指存儲的ID號ceph1
由于建立了集群,使用了proxmoxfs集群文件系統(tǒng),/etc/pve目錄屬于集群資源,3個節(jié)點共用,因此只需要在任何一個節(jié)點執(zhí)行上面的命令即可。
接下來,上傳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”.
應(yīng)該是我的測試環(huán)境ProxmoxVE的問題,查了一下,應(yīng)該是和虛擬化嵌套開啟有關(guān),參考了這篇文章:
http://www.sfodin.cn/Linux/2018-12/15576870.htm
具體就不多解釋了,在ProxmoxVE物理機上(注意,不是上面3個pve-1/pve-2/pve-3)執(zhí)行下面的命令:
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,”參數(shù)如下: -cpu kvm64,+lahf_lm,+sep,+kvm_pv_unhalt,+kvm_pv_eoi,+vmx,enforce 然后執(zhí)行:qm stop 111 停止虛擬機后,再執(zhí)行上面修改后的命令。 虛擬機啟動后,ssh進(jìn)入,執(zhí)行 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 表示已經(jīng)支持虛擬嵌套。
再重新啟動上面創(chuàng)建的虛擬機,成功!
安裝過程中觀察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讀取實時數(shù)據(jù)。
五.高可用測試
上面建了一個虛擬機CentOS7-1使用的是ceph分布式存儲,具備虛擬機熱遷移的條件,首先實現(xiàn)一下虛擬機熱遷移,然后再模擬虛擬機所在物理機故障的情況下,虛擬機自動遷移是否能夠?qū)崿F(xiàn)。
熱遷移測試:
< 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;”>
經(jīng)過大概20秒鐘左右,遷移完成,如下圖:
接下來將這個虛擬機加入HA,如下圖:
模擬物理機故障,將pve-2強制stop,如下圖:
大概過了4分鐘左右,加入HA的虛擬機在另一臺主機pve-3中自動啟動了,如下圖:
測試成功!
總結(jié):
整體測試下來,難點在于ceph集群的搭建,對于proxmoxVE來說,只要有外部的ceph存儲池,直接配置進(jìn)來使用就行了,最多要再配置一下ceph的認(rèn)證配置,使用了ceph存儲池之后,結(jié)合ProxmoxVE的集群功能,就可以很開心的使用虛擬機在線熱遷移,甚至實現(xiàn)虛擬機HA,即虛擬機所在物理機故障,虛擬機可以自動遷移到其他正常物理機上。
有一點需要注意,其中如果物理機故障,虛擬機HA自動遷移需要耗費的時間是以分鐘計算的。這也很好理解,因為集群需要經(jīng)過一段時間才能決定物理機確實脫離集群,之后才會開始重新安排物理機恢復(fù)HA虛擬機,能夠?qū)崿F(xiàn)物理機故障的情況下自動遷移還是已經(jīng)很不錯了,因為一般情況下,如果物理機故障,上面的虛擬機恢復(fù)其實也是一件很頭疼的事情,如果能夠后臺在幾分鐘之內(nèi)幫忙正?;謴?fù),其實也是解決了大問題。
接下來需要考慮的是,由于不是使用ProxmoxVE自帶的ceph存儲管理,因此需要單獨維護ceph集群,后面需要考慮對ceph的web管理和監(jiān)控,這就是獨立的另外需要考慮的事情了。
不錯,經(jīng)過這次測試,說明不花錢購買訂閱,使用外部ceph存儲,還是能夠?qū)崿F(xiàn)高可用,超融合的虛擬化平臺這個當(dāng)初的設(shè)想!