ProxmoxVE 之集群安装&ceph集成(引用不加图)

上次找了一台物理服务器直接安装了一个proxmox VE 环境(VE是虚拟化环境的意思),后续又看了官方的admin文档,对整个系统架构有了一定的了解,接下来,准备好好研究一下具体能够落在生产环境上的系统设计。官方文档可以在官网下载,也可以在安装pve之后在web界面上直接查看或者下载,如下图:

image.png

设计思路:

基本想法是,3个以上物理节点的集群环境,组成HA,具体设想如下:

1.网络方面需要内部集群管理(corosync)网络,业务网络,ceph存储网络,3个网络,需要强调的是,内部集群网路需要独立出来,因为集群网络对延时的要求很苛刻,具体详见官方文档。如果有条件,每个网络都做bond。bond类型的选择,集群管理网络直接使用active-backup,其他的最好使用LACP(802.3ad)链路聚合,但是这种方式需要在交换机侧做配置,两个交换机之间也要做级联,链路聚合的好处是一稳定,二带宽不浪费,三高可用 。

2.存储方面,除了系统盘之外,每台物理机使用2块硬盘贡献出来作为ceph存储池使用,1块硬盘作为本地lvm存储并挂载给镜像和备份目录使用,这样可以比较灵活,需要实现HA功能虚拟机可以放在ceph存储池,lvm存储池主要存放模板镜像文件,也可以给其他虚拟机使用,lvm存储池的虚拟机在相应速度上理论上要比ceph的要高,这里具体不阐述。ceph存储池使用3mon,3副本。

3.CPU和内存方面根据实际需求确定,这里不赘述。

操作记录:

一.环境准备:

基于以上考虑,在这台pve环境上面,创建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。

二.配置网络

先将第二块网卡的网络配上,系统安装过程中配置了第一块网卡作为内部管理集群网络,网段是192.168.1.0/24 ,登陆系统后可以发现这个地址是配置在网桥上的,网桥上搭一块网卡进行桥接,因此新建一个网桥并配置192.168.170.0/24网段的地址给它,搭另一块网卡进行桥接,如下图:

image.png


注意第一块网卡设置了网关是192.168.1.1,这块网卡就不能设置网关了 。这个比较好理解,其实就是在主机上设置了默认网关,只能有一个。

增加完网桥之后,需要重启pve节点生效配置。(网络更改都需要重启节点才能生效。)

三.存储设置

接下来处理存储,进去看pve节点的存储,安装的时候安装程序会默认在安装盘上建立一个vg,名称是pve,在这个vg上建立swap/root/data三个lv ,其中root这个lv上挂载/根目录。 安装完成之后直接默认有两个存储ID,一个是local,对应的是目录型存储,挂载目录是/var/lib/vz ,一个是local-lvm,挂载的是data这个lv,这个lv的类型是lvm-thin ,lvm-thin这种类型很适合虚拟机使用,具体如何创建后面再介绍。另外,pve的各种存储类型主要有目录型/lvm/lvm-thin/zfs/nfs/ceph等等,具体可以参考官网的admin文档。

我当初的设计是需要将最后一块32G的盘/dev/sdb作为目录/var/lib/vz的挂载盘,这个目录下面存放镜像文件,备份文件,也可以直接存放本机虚拟机文件和容器文件。这一块工作需要先在后台将sdb这块盘划分了lvm才能给系统使用。因此,    首先通过ssh登陆pve服务器,执行:

pvcreate /dev/sdb   
---注意,我这里没有分区,直接使用整块硬盘,使用分区其实也是可以的
vgcreate vg-sdb /dev/sdb
lvcreate --thin -L 30G -n lvm-sdb vg-sdb  
  注:不能使用32G,提示空间不够,--thin表示类型是lvm-thin ,如果创建的时候没有加这个参数,可以事后执行lvconvert --type thin-pool vg-sdb/lvm-sdb 命令转化类型,如果是为挂载目录使用,可以不使用thin类型。
mkfs.ext4 /dev/vg-sdb/lvm-sdb
更改local存储目录/var/lib/vz的挂载点为/dev/vg-sdb/lvm-sdb :
mount /dev/vg-sdb/lvm-sdb /var/lib/vz
在/etc/fstab文件中写入下面这行,使开机自动挂载:
/dev/vg-sdb/lvm-sdb /var/lib/vz ext4 defaults 1 2

调整pve-1节点的local存储池为共享池,这样可以只上传镜像到这个存储池,其他节点也可以共享使用,如下图:

image.png

上传第一个ISO镜像,通过scp程序,我用的是winscp,直接从本机上传到pve-1的/var/lib/vz/templates/iso/目录中,如下图:

image.png

当然,也可以使用web管理界面直接上传,如下图:

image.png

四.创建集群:

在其中一台pve服务器的web管理界面上首先创建一个集群,如下图:

image.png

接下来,通过ssh登陆其他2个pve节点,执行 pvecm add 192.168.1.51 (这个地址是上面建立集群的pve节点的IP)命令加入集群cluster1,如下图:

image.png

加入完成之后,可以通过命令 pvecm status 在任何一个节点上查看集群情况,如下图:

image.png

如果要查看集群日志,可以看文件/var/log/daemon.log 。

集群建立完成之后,任何一个pve节点的web管理界面视图都可以管理整个集群,如下图:

image.png

五.ceph安装配置

参考官网这个网址:

https://www.proxmox.com/en/training/video-tutorials/item/install-ceph-server-on-proxmox-ve

这是一个详细的视频教程,基本的设计思路和我这个环境差不多,都是3个节点,只有网络是真正的3个网络,我是因为条件限制,将集群管理和虚拟机业务网络合二为一了,其他的都差不多。

首先在每一个节点安装ceph软件包:

pveceph install --version luminous   

注意,官网视频里面用的jewel版本,我们安装的pve版本是5.2对应的ceph版本已经是luminous版本了。


执行过程中提示软件包相关错误,如下:

W: (pve-apt-hook) !! WARNING !!
W: (pve-apt-hook) You are attempting to remove the meta-package ‘proxmox-ve’!
W: (pve-apt-hook)
W: (pve-apt-hook) If you really you want to permanently remove ‘proxmox-ve’ from your system, run the following command
W: (pve-apt-hook) touch ‘/please-remove-proxmox-ve’
W: (pve-apt-hook) and repeat your apt-get/apt invocation.
W: (pve-apt-hook)
W: (pve-apt-hook) If you are unsure why ‘proxmox-ve’ would be removed, please verify
W: (pve-apt-hook) - your APT repository settings
W: (pve-apt-hook) - that you are using ‘apt-get dist-upgrade’ or ‘apt full-upgrade’ to upgrade your system
E: Sub-process /usr/share/proxmox-ve/pve-apt-hook returned an error code (1)
E: Failure running script /usr/share/proxmox-ve/pve-apt-hook

需要执行这个命令进行确认:

touch '/please-remove-proxmox-ve'
再次执行install命令,最后还是有一个报错:
cp: cannot stat '/usr/share/doc/pve-manager/examples/ceph.service': No such file or directory
could not install ceph.service


然后发现pveceph命令找不到了!!!! 应该是在上面安装过程中软件包错误处理的时候将这个软件包卸载了。咋办?另外,在web管理界面,创建虚拟机启动虚拟机连接虚拟机失败,说明上面命令卸载了部分或者大部分关键软件包,嗝屁了。通过在网上查相关信息,只看到全真道长sery那里就在几天前也发现了这个问题,确认就是没有订阅造成的,被一家公司控制的开源产品,缺陷出来了。道长sery那边的消息是,如果订阅,是249.9欧元每CPU每年,这算下来与vmware的授权也差不多了,那我还用个毛的开源软件啊。下图是官网的报价:

image.png

看来只有自己手动安装ceph集群了。

总结:

本篇博文尝试搭建一套3节点的Proxmox VE 集群,安装过程非常快,概念也很清晰,web管理界面非常好用,但是在进行到存储ceph安装的时候出现了订阅问题。

安装到这里,反正也已经基本摸了一遍集群的实际落地操作,并踩到了一个大坑,那就是ceph的安装配置5.2版本需要订阅官方授权才能使用。具体如何解决,初步2个办法,第一个是测试历史版本,据说历史版本可以使用,第二个是手动安装ceph集群,然后在pve中做一些简单配置连接使用这个ceph集群,第二个办法的缺点是没有办法统一集成管理pve和ceph,只能分开管理,但是对于大规模的应用场景,可能反倒是一个优点。我的想法是,两个办法都要去踩一遍,对于小规模使用场景使用第一个用历史版本的办法,对大规模场景,都可以。


注:至今天(2018年9月23日)为止,官网上能下载的版本有5.2-1,   5.1-3,   5.0-5ab26bc-5 三个版本,三个版本我都测试过了,pveceph工具install之后都不正常。更老的版本现在暂时未找到。



注,上面说的“手动安装ceph集群,然后在pve中做一些简单配置连接使用这个ceph集群” ,已经验证可以实现

本来想模拟生产环境实现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网段)使用。创建虚拟机如下:

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的问题,查了一下,应该是和虚拟化嵌套开启有关,参考了这篇文章:

http://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存储,还是能够实现高可用,超融合的虚拟化平台这个当初的设想!

你可能感兴趣的:(虚拟化)