preface

在前面我们知道了如何搭建Openstack的keystone,glance,nova,neutron,horizon这几个服务,然而在这几个服务中唯独缺少存储服务,那么下面我们就学习块存储服务。

Cinder块存储服务

块存储服务(cinder)为实例提供块存储。存储的分配和消耗是由块存储驱动器,或者多后端配置的驱动器决定的。还有很多驱动程序可用:NAS/SAN,NFS,ISCSI,Ceph等。典型情况下,块服务API和调度器服务运行在控制节点上。取决于使用的驱动,卷服务器可以运行在控制节点、计算节点或单独的存储节点。

它由下面4个组件来组成的:

1.cinder-api:

接受API请求,并将请求调度到cinder-volume 执行

2.cinder-volume

与块存储服务,例如cinder-scheduler 的进程直接交互。它也可以与这些进程通过一个消息队列交互。 cinder-volume服务响应到块存储服务的读写请求来维持状态。它也可以和多种存储驱动交互

3.cinder-scheduler守护进程

选择最优存储提供节点来创建卷。其与nova-scheduler组件类似。

4.cinder-backup daemon

cinder-backup服务提供任何种类备份卷到一个备份存储提供者。就像cinder-volume服务,它与多种存储提供者在驱动架构下进行交互。

5.消息队列

在块存储的进程之间路由信息。

在没有cinder服务的时候,我们的云主机磁盘是在/var/lib/nova/instances/虚拟机ID 下面,如下所示

[root@linux-node2 instances]# ll -rt /var/lib/nova/instances/
total 8
drwxr-xr-x. 2 nova nova 69 Feb 8 20:26 afda0b61-a8f8-4e27-bf42-b20503496fe1 # 默认就在本地磁盘作为存储实体
-rw-r--r--. 1 nova nova 45 Feb 8 21:36 compute_nodes
drwxr-xr-x. 2 nova nova 100 Feb 8 21:36 _base
drwxr-xr-x. 2 nova nova 4096 Feb 8 21:36 locks

部署安装它

我们可以参照官网来安装:http://docs.openstack.org/newton/install-guide-rdo/cinder-controller-install.html

我们在linux-node1节点上安装它

1.创建数据库与数据库用户

这一步我们之前在安装keystone的时候已经完成了。那就在啰嗦一下吧:

mysql> CREATE DATABASE cinder;
mysql> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \
IDENTIFIED BY 'cinder';
mysql> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \
IDENTIFIED BY 'cinder';

2.创建Openstack 用户

这个Openstack 的用户我们也创建完成了在安装keystone的时候,那就在啰嗦一下如何创建吧:

[root@linux-node1 ~]# source admin_openrc
[root@linux-node1 ~]# openstack user create --domain default --password-prompt cinder
[root@linux-node1 ~]# openstack role add --project service --user cinder admin

3.安装cinder服务

[root@linux-node1 ~]# yum install openstack-cinder

4.配置cinder

[root@linux-node1 ~]# vim /etc/cinder/cinder.conf
[DEFAULT]
transport_url = rabbit://openstack:openstack@192.168.56.11
auth_strategy = keystone [database]
connection = mysql+pymysql://cinder:cinder@192.168.56.11/cinder [keystone_authtoken]
auth_uri = http://192.168.56.11:5000
auth_url = http://192.168.56.11:35357
memcached_servers = 192.168.56.11:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = cinder
password = cinder [oslo_concurrency]
lock_path = /var/lib/cinder/tmp

5.同步数据库

[root@linux-node1 ~]#  su -s /bin/sh -c "cinder-manage db sync" cinder
[root@linux-node1 ~]# mysql -h 192.168.56.11 -ucinder -pcinder
MariaDB [(none)]> use cinder;
MariaDB [cinder]> show tables;
[root@linux-node1 ~]# mysql -h 192.168.56.11 -ucinder -pcinder -e "use cinder;show tables" |wc -l # 核对下看是不是共34行
34

6.配置计算服务

[root@linux-node1 ~]# vim /etc/nova/nova.conf

[cinder]
os_region_name = RegionOne

7.重启计算服务,并且设置cinder服务开机自启

[root@linux-node1 ~]# systemctl restart openstack-nova-api.service
[root@linux-node1 ~]# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
[root@linux-node1 ~]# systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service

8.检查端口是否起来和日至是否有异常:

[root@linux-node1 ~]# netstat -lnpt  |grep 8776
tcp 0 0 0.0.0.0:8776 0.0.0.0:* LISTEN 6256/python2
[root@linux-node1 ~]# tail /var/log/cinder/api.log

9.注册服务

openstack endpoint create --region RegionOne  volume public http://192.168.56.11:8776/v1/%\(tenant_id\)s
openstack endpoint create --region RegionOne volume internal http://192.168.56.11:8776/v1/%\(tenant_id\)s
openstack endpoint create --region RegionOne volume admin http://192.168.56.11:8776/v1/%\(tenant_id\)s
openstack endpoint create --region RegionOne volumev2 public http://192.168.56.11:8776/v2/%\(tenant_id\)s
openstack endpoint create --region RegionOne volumev2 internal http://192.168.56.11:8776/v2/%\(tenant_id\)s
openstack endpoint create --region RegionOne volumev2 admin http://192.168.56.11:8776/v2/%\(tenant_id\)s [root@linux-node1 ~]# openstack endpoint create --region RegionOne volume public http://192.168.56.11:8776/v1/%\(tenant_id\)s
+--------------+--------------------------------------------+
| Field | Value |
+--------------+--------------------------------------------+
| enabled | True |
| id | 69fa1e44b92a4511b87e6bba900a9d7a |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 79eaa15817444e518f08a31555a1cb36 |
| service_name | cinder |
| service_type | volume |
| url | http://192.168.56.11:8776/v1/%(tenant_id)s |
+--------------+--------------------------------------------+
[root@linux-node1 ~]# openstack endpoint create --region RegionOne volume internal http://192.168.56.11:8776/v1/%\(tenant_id\)s
+--------------+--------------------------------------------+
| Field | Value |
+--------------+--------------------------------------------+
| enabled | True |
| id | 4cc826bb78f848979303b478d7bb66ab |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 79eaa15817444e518f08a31555a1cb36 |
| service_name | cinder |
| service_type | volume |
| url | http://192.168.56.11:8776/v1/%(tenant_id)s |
+--------------+--------------------------------------------+
[root@linux-node1 ~]# openstack endpoint create --region RegionOne volume admin http://192.168.56.11:8776/v1/%\(tenant_id\)s
+--------------+--------------------------------------------+
| Field | Value |
+--------------+--------------------------------------------+
| enabled | True |
| id | c70163f3372449ef8978514aa19d5cad |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 79eaa15817444e518f08a31555a1cb36 |
| service_name | cinder |
| service_type | volume |
| url | http://192.168.56.11:8776/v1/%(tenant_id)s |
+--------------+--------------------------------------------+
[root@linux-node1 ~]# openstack endpoint create --region RegionOne volumev2 public http://192.168.56.11:8776/v2/%\(tenant_id\)s
+--------------+--------------------------------------------+
| Field | Value |
+--------------+--------------------------------------------+
| enabled | True |
| id | 028b68c6a48a49be81760c3359c3be3f |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 5452eb159d5a420187697669fbb0fb31 |
| service_name | cinderv2 |
| service_type | volumev2 |
| url | http://192.168.56.11:8776/v2/%(tenant_id)s |
+--------------+--------------------------------------------+
[root@linux-node1 ~]# openstack endpoint create --region RegionOne volumev2 internal http://192.168.56.11:8776/v2/%\(tenant_id\)s
+--------------+--------------------------------------------+
| Field | Value |
+--------------+--------------------------------------------+
| enabled | True |
| id | 96aaa6d2023e457bafce320a3116fafa |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 5452eb159d5a420187697669fbb0fb31 |
| service_name | cinderv2 |
| service_type | volumev2 |
| url | http://192.168.56.11:8776/v2/%(tenant_id)s |
+--------------+--------------------------------------------+
[root@linux-node1 ~]# openstack endpoint create --region RegionOne volumev2 admin http://192.168.56.11:8776/v2/%\(tenant_id\)s
+--------------+--------------------------------------------+
| Field | Value |
+--------------+--------------------------------------------+
| enabled | True |
| id | d1cfc448bbad4d6db86e5bf79da4fb29 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 5452eb159d5a420187697669fbb0fb31 |
| service_name | cinderv2 |
| service_type | volumev2 |
| url | http://192.168.56.11:8776/v2/%(tenant_id)s |
+--------------+--------------------------------------------+
[root@linux-node1 ~]# openstack service list # 查看食肉注册成功
+----------------------------------+----------+----------+
| ID | Name | Type |
+----------------------------------+----------+----------+
| 5452eb159d5a420187697669fbb0fb31 | cinderv2 | volumev2 |
| 75791c905b92412ca4390b3970726f75 | glance | image |
| 79eaa15817444e518f08a31555a1cb36 | cinder | volume |
| 84f33de0de8c4da18cfb7f213b63a638 | nova | compute |
| c4dadf8bf2f74561b7408a5089541432 | neutron | network |
| d24e9eacb30a4c9fa6d1109c856f6b11 | keystone | identity |
+----------------------------------+----------+----------+
[root@linux-node1 ~]# openstack endpoint list |grep cinder # 查看食肉注册成功
| 028b68c6a48a49be81760c3359c3be3f | RegionOne | cinderv2 | volumev2 | True | public | http://192.168.56.11:8776/v2/%(tenant_id)s |
| 4cc826bb78f848979303b478d7bb66ab | RegionOne | cinder | volume | True | internal | http://192.168.56.11:8776/v1/%(tenant_id)s |
| 69fa1e44b92a4511b87e6bba900a9d7a | RegionOne | cinder | volume | True | public | http://192.168.56.11:8776/v1/%(tenant_id)s |
| 96aaa6d2023e457bafce320a3116fafa | RegionOne | cinderv2 | volumev2 | True | internal | http://192.168.56.11:8776/v2/%(tenant_id)s |
| c70163f3372449ef8978514aa19d5cad | RegionOne | cinder | volume | True | admin | http://192.168.56.11:8776/v1/%(tenant_id)s |
| d1cfc448bbad4d6db86e5bf79da4fb29 | RegionOne | cinderv2 | volumev2 | True | admin | http://192.168.56.11:8776/v2/%(tenant_id)s |
安装存储节点

在安装存储节点之前,我们需要明白的是,我们在存储节点上使用LVM生成可以存储的卷组,然后通过ISCSI来提供可用存储的卷组供云主机使用。

存储节点我在linux-node2上安装,步骤如下:

  1. 安装LVM且设置为开机自启动,大多数CentOs都自带LVM命令。
[root@linux-node2 ~]# yum install lvm2
[root@linux-node2 ~]# systemctl enable lvm2-lvmetad.service
[root@linux-node2 ~]# systemctl start lvm2-lvmetad.service
  1. 创建LVM物理卷与卷组
[root@linux-node2 ~]#  pvcreate /dev/sdb
[root@linux-node2 ~]# vgcreate cinder-volumes /dev/sdb

在/etc/lvm/lvm.conf 添加一个过滤器,只接受/dev/sdb设备,拒绝其他所有设备每个过滤器组中的元素都以a开头,即为 accept,或以 r 开头,即为reject,并且包括一个设备名称的正则表达式规则。过滤器组必须以r/.*/结束,过滤所有保留设备。可以使用 :命令:vgs -vvvv 来测试过滤器。

[root@linux-node2 ~]#  vim /etc/lvm/lvm.conf
devices { # 切记,一定要在devices下面
filter = [ "a/sda/", "a/sdb/", "r/.*/"]
}
  1. 安装并配置Cinder
[root@linux-node2 ~]# yum install openstack-cinder targetcli python-keystone

安装完成以后,我们配置下cinder的配置文件,为了方便起见,我们从linux-node1上copy配置文件到linux-node2上。

[root@linux-node1 ~]# scp /etc/cinder/cinder.conf root@192.168.56.12:/etc/cinder/

我们在此基础之上添加几条配置即可。

[root@linux-node2 ~]# vim /etc/cinder/cinder.conf
[DEFAULT]
enabled_backends = lvm
glance_api_servers = http://192.168.56.11:9292
iscsi_ip_address = 192.168.56.12 # 写成本地的IP即可 [lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
iscsi_protocol = iscsi
iscsi_helper = lioadm

配置完成后,我们总的来看看这个cinder.conf的配置文件

[root@linux-node2 ~]# egrep  "^([a-Z]|\[)" /etc/cinder/cinder.conf
[DEFAULT]
transport_url = rabbit://openstack:openstack@192.168.56.11
glance_api_servers = http://192.168.56.11:9292
auth_strategy = keystone
enabled_backends = lvm
iscsi_ip_address = 192.168.56.12
[database]
connection = mysql+pymysql://cinder:cinder@192.168.56.11/cinder
[keystone_authtoken]
auth_uri = http://192.168.56.11:5000
auth_url = http://192.168.56.11:35357
memcached_servers = 192.168.56.11:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = cinder
password = cinder
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp
[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
iscsi_protocol = iscsi
iscsi_helper = lioadm

4.启动服务

确认无误后,我们启动cinder服务

[root@linux-node2 ~]# systemctl enable openstack-cinder-volume.service target.service
[root@linux-node2 ~]# systemctl start openstack-cinder-volume.service target.service

5.验证存储服务是否正常工作

linux-node1上操作

[root@linux-node1 ~]# source /root/admin_openrc
[root@linux-node1 ~]# openstack volume service list
+------------------+-----------------------------+------+---------+-------+----------------------------+
| Binary | Host | Zone | Status | State | Updated At |
+------------------+-----------------------------+------+---------+-------+----------------------------+
| cinder-scheduler | linux-node1.example.com | nova | enabled | up | 2017-02-09T13:22:53.000000 |
| cinder-volume | linux-node2.example.com@lvm | nova | enabled | up | 2017-02-09T13:22:51.000000 |
+------------------+-----------------------------+------+---------+-------+----------------------------+

能够识别到host,且状态为UP状态,那么就说明搭建成功了。

创建云硬盘

在上面的步骤操作完成后,我们就可以在Openstack Horizon上查看到了。如下图所示,使用demo用户登陆

我们点击右边的创建卷,创建完成就可以给指定的云主机使用了,操作流程如下:

绑定指定主机即可

使用云硬盘

我们给虚拟机添加完云硬盘以后,我们就可以使用它了,我们登陆刚才添加云硬盘的虚拟机,然后执行下面的命令进行格式化分区后使用:

[root@host-192-168-56-101 ~]# fdisk -l
Disk /dev/vda: 3221 MB, 3221225472 bytes, 6291456 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00067c89 Device Boot Start End Blocks Id System
/dev/vda1 2048 6291455 3144704 8e Linux LVM Disk /dev/vdb: 1073 MB, 1073741824 bytes, 2097152 sectors # 刚才添加上的1G硬盘
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/mapper/centos-root: 3217 MB, 3217031168 bytes, 6283264 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

格式化并挂载

[root@host-192-168-56-101 ~]# mkfs.ext4 /dev/vdb
[root@host-192-168-56-101 ~]# mount /dev/vdb /mnt/
[root@host-192-168-56-101 ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 3.0G 1004M 2.1G 33% /
devtmpfs devtmpfs 235M 0 235M 0% /dev
tmpfs tmpfs 245M 0 245M 0% /dev/shm
tmpfs tmpfs 245M 4.3M 241M 2% /run
tmpfs tmpfs 245M 0 245M 0% /sys/fs/cgroup
tmpfs tmpfs 49M 0 49M 0% /run/user/0
/dev/vdb ext4 976M 2.6M 907M 1% /mnt # 挂载使用了。
[root@host-192-168-56-101 ~]#

在使用中云盘是不可以删除的。但是可以这么干,把这块云硬盘先卸载,然后重新分配到另一个云主机上使用这个云硬盘上的数据。

此时我们回到linux-node2上查看lvm的使用情况,你会发现我们在Openstack创建的云硬盘其实就等同于我们在cinder存储节点上创建同样大小的LVM卷。如下所示:

[root@linux-node2 ~]# lvdisplay
--- Logical volume ---
LV Path /dev/cinder-volumes/volume-c5bbd596-0dab-408f-885f-941fc83e51df
LV Name volume-c5bbd596-0dab-408f-885f-941fc83e51df
VG Name cinder-volumes
LV UUID w3sQDU-MGsW-nJbB-zUxX-HXyH-0wXC-y9z9aH
LV Write Access read/write
LV Creation host, time linux-node2.example.com, 2017-02-09 21:31:57 +0800
LV Status available
# open 0
LV Size 1.00 GiB
Current LE 256
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0

使用NFS做cinder的后端存储

在公司内部开发或者功能性测试的时候,我们可以考虑使用NFS这种简单的方式来作为cinder的存储解决方案。因为开发或者功能性测试对磁盘IO要求不高,大多数功能的内部交换机,网络都是千兆的,计算一下每秒也能达128MB/S,能够满足大多数日常办公的使用。所以我们在这里就聊聊使用NFS做cinder的后端存储。在生产环境下,业界比较多的是采用Gluster和Ceph作为cinder的存储后端。我们先讲通过NFS来做cinder后端,后面我们会说说如何采用Ceph来做Cinder的后端。

我们可以参考Openstack上的wiki来弄:https://wiki.openstack.org/wiki/How_to_deploy_cinder_with_NFS

我们继续在linux-node2上安装NFS

1.安装配置NFS

[root@linux-node2 ~]# yum -y install nfs-utils rpcbind
[root@linux-node2 ~]# cat /etc/exports
/data/nfs *(rw,no_root_squash) # 把/data/nfs共享出去, [root@linux-node2 ~]# mkfs.ext4 /dev/sdc
[root@linux-node2 ~]# mount /dev/sdc /data/nfs/ [root@linux-node2 ~]# systemctl restart nfs
[root@linux-node2 ~]# systemctl enabled nfs
[root@linux-node2 ~]# systemctl restart rpcbind
[root@linux-node2 ~]# systemctl enabled rpcbind [root@linux-node2 ~]# showmount -e localhost
Export list for localhost:
/data/nfs *

2.配置cinder

首先我们需要知道,cinder是通过在cinder.conf配置文件来配置驱动从而使用不同的存储介质的,所以如果我们使用NFS作为存储介质,那么就需要配置成NFS的驱动,那么问题来了,如何找到NFS的驱动呢?请看下面查找步骤:

[root@linux-node2 ~]# cd /usr/lib/python2.7/site-packages/cinder   # 切换到cinder的模块包里
[root@linux-node2 cinder]# cd volume/drivers/ # 找到卷的驱动
[root@linux-node2 drivers]# grep Nfs nfs.py # 过滤下Nfs就能找到
class NfsDriver(driver.ExtendVD, remotefs.RemoteFSDriver): # 这个class定义的类就是Nfs的驱动名字了

找到驱动名字以后,我们开始配置cinder.conf

[root@linux-node2 drivers]# tail /etc/cinder/cinder.conf
[DEFAULT]
enabled_backends = nfs # 设置存储后端为NFS [nfs]
volume_driver = cinder.volume.drivers.nfs.NfsDriver # 写上驱动的名字
nfs_shares_config = /etc/cinder/nfs_shares # 待会创建这个nfs的配置文件
nfs_mount_point_base = $state_path/mnt

创建nfs配置文件

[root@linux-node2 drivers]# cat /etc/cinder/nfs_shares
192.168.56.12:/data/nfs
[root@linux-node2 drivers]# chown root:cinder /etc/cinder/nfs_shares
[root@linux-node2 drivers]# chmod 640 /etc/cinder/nfs_shares [root@linux-node2 drivers]# ll /etc/cinder/nfs_shares # 确保权限一致
-rw-r-----. 1 root cinder 24 Feb 10 21:57 /etc/cinder/nfs_shares

3.重启cinder服务

[root@linux-node2 drivers]# systemctl restart openstack-cinder-volume

4.在控制节点(linux-node1) 检测是否注册成功的cinder服务

[root@linux-node1 ~]# openstack volume service list
+------------------+-----------------------------+------+---------+-------+----------------------------+
| Binary | Host | Zone | Status | State | Updated At |
+------------------+-----------------------------+------+---------+-------+----------------------------+
| cinder-scheduler | linux-node1.example.com | nova | enabled | up | 2017-02-10T14:01:38.000000 |
| cinder-volume | linux-node2.example.com@lvm | nova | enabled | down | 2017-02-10T14:00:32.000000 | # 这个down是属于正常情况,因为我们把lvm改成了NFS。
| cinder-volume | linux-node2.example.com@nfs | nova | enabled | up | 2017-02-10T14:00:51.000000 |
+------------------+-----------------------------+------+---------+-------+----------------------------+

5.在控制节点创建NFS类型,然后与 linux-node2.example.com@nfs 进行绑定

[root@linux-node1 ~]# source admin_openrc
[root@linux-node1 ~]# cinder type-create NFS
+--------------------------------------+------+-------------+-----------+
| ID | Name | Description | Is_Public |
+--------------------------------------+------+-------------+-----------+
| e7c50520-6d21-4314-a802-09ae8d799252 | NFS | - | True |
+--------------------------------------+------+-------------+-----------+ [root@linux-node1 ~]# cinder type-create ISCSI # 如果又使用LVM又使用NFS的话,那么也创建下它吧。
+--------------------------------------+-------+-------------+-----------+
| ID | Name | Description | Is_Public |
+--------------------------------------+-------+-------------+-----------+
| 80980708-8247-45f5-b8a4-072efb6d5054 | ISCSI | - | True |
+--------------------------------------+-------+-------------+-----------+

进行绑定,把卷与卷类型进行绑定。

我们先对NFS的Volume节点赋一个名字

[root@linux-node2 ~]# vim /etc/cinder/cinder.conf

[nfs]
volume_driver = cinder.volume.drivers.nfs.NfsDriver
nfs_shares_config = /etc/cinder/nfs_shares
nfs_mount_point_base = $state_path/mnt
volume_backend_name = NFS-Storage # 只要添加这个,指定一个名字

进行绑定:

[root@linux-node1 ~]# cinder type-key NFS set volume_backend_name=NFS-Storage

参数解释下:

  • type-key 后面写的自己定义的一个名字。
  • volume_backend_name 就是我们在上面volume节点的cinder.conf通过volume_backend_name设置的名字

    6.创建云硬盘,硬盘类型选择NFS。



    7.挂载在指定的云主机上就可以使用这个硬盘了。

9 云计算系列之Cinder的安装与NFS作为cinder后端存储的更多相关文章

  1. 8 云计算系列之Horizon的安装与虚拟机创建流程

    preface 在上一章节中,我们可以在无web管理界面上创建并启动虚拟机,虽然可以这么做,但是敲命令太繁琐,所以此时我们可以安装openstack web管理界面,通过web界面的图形化操作open ...

  2. 2 云计算系列之KVM的安装与使用

    preface 在上篇博客中,我们讲了云的概念,分类,以及虚拟化技术.我们知道Openstack的虚拟化技术是基于KVM的,所以下面就开始说说如何部署和使用KVM. 下面的讲解包含以下知识点: 安装K ...

  3. 4 云计算系列之Openstack简介与keystone安装

    preface KVM 是openstack虚拟化的基础, 再介绍了kvm虚拟化技术之后,我们介绍下openstack和如何搭建. Openstack组件 openstack架构图如下所示 那么我们就 ...

  4. 【Linux_Fedora_应用系列】_2_如何安装视频播放器和视频文件解码

    在前面的一篇博文中,我们进行了音乐播放器的安装和解码器的安装.[Linux_Fedora_应用系列]_1_如何安装音乐播放器和mp3解码 这里我们来进行视频播放器的安装.我们还是通过yum方式安装. ...

  5. kali Linux系列教程之BeFF安装与集成Metasploit

    kali Linux系列教程之BeFF安装与集成Metasploit 文/玄魂 kali Linux系列教程之BeFF安装与集成Metasploit 1.1 apt-get安装方式 1.2 启动 1. ...

  6. Kali Linux系列教程之OpenVas安装

    Kali Linux系列教程之OpenVas安装 文 /玄魂 目录 Kali Linux系列教程之OpenVas安装 前言 1.  服务器层组件 2.客户层组件 安装过程 Initial setup ...

  7. Entity Framework 6.1 学习系列1--概况、安装

    原文:Entity Framework 6.1 学习系列1--概况.安装 Entity Framework:实体框架,看名字就知道是针对模型数据的.这是MS推出的一款ORM工具. 与NHibernat ...

  8. 八、OpenStack—Cinder组件安装

    一.安装和配置控制器节点 1.先决条件 1)创建数据库 # mysql -u root -p 2)创建cinder数据库 MariaDB [(none)]> CREATE DATABASE ci ...

  9. openstack系列文章(1)devstack安装测试Queens

    1.在OpenStack 圈子中,有这么一句名言:”不要让朋友在生产环境中运行DevStack.但是初学者在没有掌握OpenStack CLI的情况下用devstack安装测试环境还是不错的.本系列文 ...

随机推荐

  1. STM32F10x_ADC三通道DMA连续转换(3通道、软件单次触发)

    Ⅰ.概述 上一篇文章讲述的内容是:三通道逐次转换(单次.单通道软件触发),也就是说3条通道要三次软件触发才能完成转换,而且是通过软件读取转换数值. 本文讲述三通道DMA连续转换(3通道.软件单次触发) ...

  2. Android keytool 生成keystore与给APK签名

    http://www.tttabc.com/android/keytool-keystore-jarsigner-apk.htm

  3. sublime sftp注册码

    注册码: { "email": "xiaosong@xiaosong.me", "product_key": "d419f6-de ...

  4. Java Rest客户端框架有哪些

    HttpClient HtmlUnit Jsoup HttpUrlConnection(java原生) Http4j

  5. 简单MVVM教程

    WPF+MVVM的本地桌面程序为背景,这样一来我们可以不去操心服务器那部分的事情,更加专注我们的MVVM.我打算把最重要的部分放到开头来讲,而接下来这最重要的部分却是全篇教程唯一没有代码的部分.好,下 ...

  6. WinForm窗体继承

    在Windows应用程序中,从现有的窗体继承,查看子窗体的设计视图时,会出现错误: 服务容器中已存在服务 System.Windows.Forms.Design.IEventHandlerServic ...

  7. What is "found.000" ? How to deal with it?

    最近在ubuntu系统中发现双系统的win盘中有一些文件夹,名字是“found.000”,甚是疑惑,遂查而记之. found.000文件夹里面的一些后缀名为CHK的文件是你在使用“磁盘碎片整理程序”整 ...

  8. Spring加载静态资源的方式

    解决方法1:在web.xml里添加如下的配置 <servlet-mapping> <servlet-name>default</servlet-name> < ...

  9. 第三百八十二节,Django+Xadmin打造上线标准的在线教育平台—xadmin管理员详情页面布局,导航图标设置

    第三百八十二节,Django+Xadmin打造上线标准的在线教育平台—xadmin进阶 1.后台管理员详情页面布局 后台管理员详情页面,区块是可以拖动的,而且分为了很多个区块 这个页面的布局在xadm ...

  10. Mac 创建证书(以 创建gdb证书 为例 )

    open /Applications/Utilities/Keychain\ Access.app/ 打开 钥匙串访问 继续继续 创建完毕. Now that we have a certificat ...