先决条件

  现在所有的操作都是在计算节点上做的,首先要在计算节点上面加两个硬盘,右键单击计算节点的虚拟机设置,然后选择添加硬盘
wCsJ.png
  就下一步下一步,然后选择默认选项,根据自己的硬盘大小控制把,我给添加了一个20G的和一个10G的。
wJyA.png
  加上之后你的这个虚拟机下面有三个硬盘的显示:
wLqh.png
逻辑卷LV的概念

  在讲这个逻辑卷的概念之前看一下下面这个图:
wUuk.png
  现在说说我的个人理解,这上面这个图可以看出,最开始是每次添加一个硬盘,然后在Linux系统里有了dev/sdb、dev/sdc、等等每增加一个排列一个出来,要想把硬盘做成逻辑卷,首先要把每一个添加的硬盘做成物理卷,也就是第二部pv(Physical Volume),然后再把每个硬盘变成的物理卷组合在一起,形成一个卷组vg(volume group),然后我们再从卷组里面去划分一个一个的逻辑卷lv(Logical Volume),每次需要的时候,分一个逻辑卷,做成逻辑卷的好处,就是方便随时动态扩容,方便做磁盘快照,但是缺点也就是有了这些功能,性能也就下降了,如果分的逻辑卷不够用,可以扩容,也可以缩略容量,但是一定要注意,能扩容就扩容,千万不可缩略容量,否则数据丢失就是运维背锅,一个硬盘又不贵,可以加进去扩容,千万不要缩略。。。
  补充一个小知识,如果在实际中接触到了物理服务器,插上硬盘,一定要先做RAID,不做RAID服务器是没法识别出来硬盘的,你连系统都没法装上去,如果你的物理服务器只有一个硬盘那就装个RAID0吧,然后装系统啥的就OK了。做RAID一般在BIOS或者服务器的控制面板装
安装服务

  现在在刚才加了硬盘的那个计算节点上面安装lvm软件,也就是管理逻辑卷的软件。

yum install lvm2 -y
systemctl enable lvm2-lvmetad.service
systemctl start lvm2-lvmetad.service

  安装完硬盘之后默认是识别不出来的:
y77o.png
  现在只需要输入下面一条命令即可显示出硬盘:

echo '- - -' >/sys/class/scsi_host/host0/scan

  现在在看看效果:
y8Xi.png
  现在先把刚才的硬盘做成物理盘,然后分别做两个卷组并放进去,前两个命令是做两个物理盘,后两个是分别放进两个卷组:

pvcreate /dev/sdb
pvcreate /dev/sdc
vgcreate cinder-ssd /dev/sdb
vgcreate cinder-sata /dev/sdc

  输入pvs可以查看物理卷,输入vgs可以查看卷组:
yHSv.png

分配逻辑卷

  现在在就剩最后的分配逻辑卷了,这一步就交给了cinder服务了,先修改一个配置

vim /etc/lvm/lvm.conf 
# filter = [ "a|.*/|" ]
filter = [ "a/sdb/", "a/sdc/","r/.*/"]

  这个配置文件在130行下面修改,各个版本不一样,但是必须是在filter = [ "a|.*/|" ]下面,有几个硬盘上面的a/sdb/就写到多少。两个就写到a/sdc/,三个就写到a/sdd/。以此类推,这个配置文件修改完成之后不需要重启即可生效。

安装并配置组件

  装包:

yum install openstack-cinder targetcli python-keystone -y

  修改配置文件/etc/cinder/cinder.conf,直接vim编辑,然后输入“dG”,即可删除所有内容,然后把下面的内容复制进去即可

[DEFAULT]
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 10.0.0.31
glance_api_servers = http://10.0.0.11:9292
enabled_backends = ssd,sata
[BACKEND]
[BRCD_FABRIC_EXAMPLE]
[CISCO_FABRIC_EXAMPLE]
[COORDINATION]
[FC-ZONE-MANAGER]
[KEYMGR]
[cors]
[cors.subdomain]
[database]
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = CINDER_PASS
[matchmaker_redis]
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp
[oslo_messaging_amqp]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
[oslo_middleware]
[oslo_policy]
[oslo_reports]
[oslo_versionedobjects]
[ssl]
[ssd]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-ssd
iscsi_protocol = iscsi
iscsi_helper = lioadm
[sata]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-sata
iscsi_protocol = iscsi
iscsi_helper = lioadm

  注意我配置文件里面,最开始的myip就是我现在用的compute1的ip,然后glance_api用的是控制节点的ip,然后最后面的ssd和stat是我刚才创建了两个卷组的名字,如果你的名字跟我的不一样就用你自己的名字,怎么看你卷组的名字上面的截图里面有。
  最后启动服务即可:

systemctl enable openstack-cinder-volume.service target.service
systemctl start openstack-cinder-volume.service target.service

  最终再控制节点输入下面的命令检查:
yaCe.png

使用方法

  安装好不是目的。本文的标题就说了要使用,在web端打开控制台,点击计算,然后点击计算下面的卷服务,再点击右上角的创建卷
ywDy.png
  就输入我图片中的内容即可,无需输入其他的,然后创建卷,当然我这个卷名你可以自定义哈:
yyjc.png
  一旦这里创建成功,就回到计算节点输入lvs就会看到有1G的lvs出现:
yIvl.png
  刚才说了因为这个逻辑卷是支持扩容的,我们可以点击刚才那里的卷,然后选中刚才创建好的卷,点击右边的更多里面的扩展卷:
ydIH.png  
  然后再回到你的compute1里面输入lvs就会发现扩容了一个1g,成了2G。
  那么如何连接到虚拟机上面呢。
yiqY.png
  点击这里的管理连接
yn9M.png
  然后选择你的虚拟机连接上就可以了。前提要你的虚拟机OK哟
yD7U.png
  然后点击那个cirros虚拟机的控制台。
yhXz.png
  然后就可以看到两个磁盘了。前者是系统的,后面有个2G的就是我们添加进去的,因为现在这个硬盘是个块存储要想使用就要把它格式化:

mkdf.ext4 /dev/vdb/

  格式化完成是下面这个样子
ymzt.png
  格式化完了就是挂载了,挂载到/mnt下面:

mount /dev/vdb /mnt

  输入完了好像有个报错,不过还是挂载上了:
ymzt.png

不安全性

  现在说一个不安全的东西,让你感受一下云计算的可怕之处。我们来做一个实验,刚才我们在那个cirros上面挂载了一个硬盘了,我现在在那个硬盘里面写个数据:

cd /mnt
echo "hello world!!" >> 123.txt

  上面的命令就是在我刚才挂载的那个2G的硬盘上面写了一个123.txt的文本。写了一个“hello world”,这个用户就以为他的数据代码啥的都安全了,但是我们作为云平台的搭建者,我们直接连接到compute1上面:

dd if=/dev/mapper/cinder--ssd-volume--8cfb2897--aa78--4d29--8b16--a7b3506ad4f9 of=/opt/test
cd /opt/
ll -h
mount -o loop /opt/test /srv/
[root@compute1 opt]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda2        48G  4.9G   44G   11% /
devtmpfs        983M     0  983M    0% /dev
tmpfs           993M     0  993M    0% /dev/shm
tmpfs           993M  8.7M  984M    1% /run
tmpfs           993M     0  993M    0% /sys/fs/cgroup
/dev/sr0        4.3G  4.3G     0  100% /mnt
tmpfs           199M     0  199M    0% /run/user/0
/dev/loop0      2.0G  3.1M  1.8G    1% /srv
[root@compute1 opt]# cd /srv/
[root@compute1 srv]# ls
123.txt  lost+found
[root@compute1 srv]# cat 123.txt 
hello world!!

  上面代码的意思就是说,我在compute1上面把那个逻辑卷复制到了/opt/test里面,然后把/opt/test挂载到了srv目录上面,进去查看到了123.txt,并且内容一致,所以说你的云服务器上面的内容,后台的人都可以看到哟。

自动选择硬盘

  可以自己做一个实验,多分几个逻辑卷,然后你会发现会优先使用你已经用过的那个卷了,比如说我有一个stat硬盘组,和一个ssd硬盘组,每次创建可能会一直默认使用ssd的,等ssd的用完了或者不够用了才会用stat,这样很不方便,如果我们想要随心所欲的调度卷的话,就要在刚才的配置文件后面加上下面的内容:

vim /etc/cinder/cinder.conf
[ssd]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-ssd
iscsi_protocol = iscsi
iscsi_helper = lioadm
volume_backend_name = ssd
[sata]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-sata
iscsi_protocol = iscsi
iscsi_helper = lioadm
volume_backend_name = sata

  注意看和你之前的配置文件的区别,就是在每一个模块后面多加了一个字段。之后重启服务:

systemctl restart openstack-cinder-volume.service 

  然后现在点击web端的管理员,然后选择卷,不要在项目里面选择卷,然后选择卷类型,就可以创建了:
yFD3.png
  好了这样就OK了。然后给我们创建的类型给一个扩展指令:
yXoB.png
  点击了之后点击“已创建”,之后这里的键就输入刚才配置文件里的:volume_backend_name,这里的值输入刚才配置文件里面的名字:ssd。一定要和配置文件里面一致。然后你去刚才的项目里面创建卷就可以写类型了:
yMvW.png
  这样就可以严格区分开了,然后去检查一下就能看到添加的就是ssd的硬盘:
yNIg.png
  啦啦啦。结束了

最后修改:2020 年 08 月 08 日 01 : 01 AM
请俺喝杯咖啡呗