OpenStack企业私有云实践

1.     实验架构

OpenStack我们把它当作是一个全新的“Linux”系统来学习,有的时候我们也把OpenStack称之为一个新的Linux系统。

部分组件介绍:

Ø  RabbitMQè消息队列组件(组件之间的通讯)

Ø  Horizonè提供图形界面的组件

Ø  KeyStoneè各个组件的注册和验证

Ø  Glanceè“镜像”管理组件

Ø  MySQLè存储各个组件的数据

2.     OpenStack插件服务简介

2.1.       Keystone验证服务

ü  用户与认证:用户权限与用户行为跟踪;

ü  服务目录:提供一个服务目录,包括所有服务项与相关Api的端点

2.2.       Glance镜像服务

²  User:用户

²  Tenant:租户

²  Token:令牌

²  Role:角色

²  Service:服务

²  Endpoint:端点

2.3.       Nova计算服务

Ø  API:负责接收和响应外部请求。支持OpenStack API, EC2API。

Ø  Cert:负责身份认证。

Ø  Scheduler:用于云主机调度。

Ø  Conductor:计算节点访问数据的中间件。

Ø  Consoleauth:用于控制台的授权验证。

Ø  Novncproxy: VNC代理。

Nova Dashboardnova仪表盘)

Ø  提供一个Web界面操作OpenStack的系统。

Ø  使用Django框架基于OpenStack API开发。

Ø  支持将Session存储在DB、 Memcached。

Ø  支持集群。

Nova scheduler

Nova Scheduler模块在OpenStack中的作用就是决策虚拟机创建在哪个主机(计算节点)上。

决策一个虚拟机应该调度到某物理节点,需要分两个步骤:

1.       过滤(Fliter)

2.       计算权值(Weight)

3.     基础环境准备(统一操作)

3.1.       更改主机名

计算节点:

1
2
3
hostname linux-node1.example.com
vim /etc/sysconfig/network
HOSTNAME=linux-node1.example.com

控制节点:

1
2
3
hostname linux-node2.example.com
vim /etc/sysconfig/network
HOSTNAME=linux-node2.example.com

3.2.       统一更改hosts文件

1
2
3
[root@localhost ~]# tail -2 /etc/hosts
192.168.1.36 linux-node1.example.com linux-node1
192.168.1.37 linux-node2.example.com linux-node2

退出从新登录:

1
2
[root@linux-node1 ~]# ping linux-node1
[root@linux-node1 ~]# ping linux-node2

3.3.       关闭Selinux与Iptables

1
2
3
grep "SELINUX=disabled" /etc/selinux/config
chkconfig iptables off
/etc/init.d/iptables stop

3.4.       时间同步

1
2
3
4
/usr/sbin/ntpdate time.nist.gov
[root@linux-node1 ~]# crontab -l
#time sync by nick at 2015-3-21
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1

3.5.       安装epel包

1
2
rpm -ivh 
http://mirrors.ustc.edu.cn/fedora/epel//6/x86_64/epel-release-6-8.noarch.rpm

4.     安装部署(控制节点操作)

4.1.       安装基础包

1
yum install -y python-pip gcc gcc-c++ make libtool patch automake python-devel libxslt-devel MySQL-python openssl-devel libudev-devel git wget libvirt-python libvirt qemu-kvm gedit python-numdisplay python-eventlet device-mapper bridge-utils libffi-devel libffi

4.2.       MySQL安装与配置

4.2.1.      Install MySQL

1
yum install mysql-server

4.2.2.      Config MySQL

1
2
3
4
5
6
7
8
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
vim /etc/my.cnf
#在[mysqld]标签下配置
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci 
init-connect = 'SET NAMES utf8' 
character-set-server = utf8

4.2.3.      启动MySQL

1
2
[root@linux-node1 ~]# /etc/init.d/mysqld start
[root@linux-node1 ~]# chkconfig mysqld on

4.2.4.      Created MySQL database

把所有的库一块创建出来,后面的组件会用到。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
mysql> create database keystone;
Query OK, 1 row affected (0.00 sec)
  
mysql> grant all on keystone.* to keystone@' 192.168.1.0/255.255.255.0' identified by 'keystone';
Query OK, 0 rows affected (0.00 sec)
  
mysql> create database glance;
Query OK, 1 row affected (0.00 sec)
  
mysql> grant all on glance.* to glance@' 192.168.1.0/255.255.255.0' identified by 'glance';
Query OK, 0 rows affected (0.00 sec)
  
mysql> create database nova;
Query OK, 1 row affected (0.00 sec)
  
mysql> grant all on nova.* to nova@' 192.168.1.0/255.255.255.0' identified by 'nova';
Query OK, 0 rows affected (0.00 sec)
  
mysql> create database neutron;
Query OK, 1 row affected (0.00 sec)
  
mysql> grant all on neutron.* to neutron@' 192.168.1.0/255.255.255.0' identified by 'neutron';
Query OK, 0 rows affected (0.00 sec)
  
mysql> create database cinder;
Query OK, 1 row affected (0.00 sec)
  
mysql> grant all on cinder.* to cinder@' 192.168.1.0/255.255.255.0' identified by 'cinder';
Query OK, 0 rows affected (0.00 sec)
  
mysql>

4.3.       RabbitMQ安装与配置

4.3.1.      Install rabbitmq

1
yum install rabbitmq-server

4.3.2.      Start rabbitmq

1
2
3
4
[root@linux-node1 ~]# /etc/init.d/rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.
[root@linux-node1 ~]# chkconfig rabbitmq-server on

注意:如果主机名不能解析,会导致启动不了。

4.3.3.      启用rabbitmq自带的web管理插件

1
2
/usr/lib/rabbitmq/bin/rabbitmq-plugins list ##列出rabbitmq当前有哪些插件
/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management     ##启用管理插件

操作过程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@linux-node1 ~]# /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
  mochiweb
  webmachine
  rabbitmq_web_dispatch
  amqp_client
  rabbitmq_management_agent
  rabbitmq_management
Plugin configuration has changed. Restart RabbitMQ for changes to take effect.
#重启rabbitmq
[root@linux-node1 ~]# /etc/init.d/rabbitmq-server restart 
Restarting rabbitmq-server: SUCCESS
rabbitmq-server.
[root@linux-node1 ~]# netstat -lntup|grep -E "15672|5672"
tcp        0      0 0.0.0.0:15672               0.0.0.0:*                   LISTEN      2542/beam           
tcp        0      0 0.0.0.0:55672               0.0.0.0:*                   LISTEN      2542/beam           
tcp        0      0 :::5672                       :::*                            LISTEN      2542/beam

rabbitmq监控的端口是5672,web管理端口是15672和55672。

4.3.4.      登录rabbitmq的web管理界面

在浏览器里输入http://192.168.1.36:15672/

用户名:guest

密  码:guest

4.3.5.      RabbitMQ的web管理界面

4.4.       KeyStone安装与配置

4.4.1.      Install keystone

1
2
yum install http://repos.fedorapeople.org/repos/openstack/openstack-icehouse/rdo-release-icehouse-4.noarch.rpm
yum install openstack-keystone python-keystoneclient

4.4.2.      创建keystone需要使用的pki令牌

快速执行命令:

1
keystone-manage pki_setup --keystone-user keystone --keystone-group keystone

操作过程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@linux-node1 ~]# keystone-manage pki_setup --keystone-user keystone --keystone-group keystone
Generating RSA private key, 2048 bit long modulus
.+++
....................................................................+++
e is 65537 (0x10001)
Generating RSA private key, 2048 bit long modulus
...............+++
......+++
e is 65537 (0x10001)
Using configuration from /etc/keystone/ssl/certs/openssl.conf  <==默认创建的证书目录
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'US'
stateOrProvinceName   :ASN.1 12:'Unset'
localityName          :ASN.1 12:'Unset'
organizationName      :ASN.1 12:'Unset'
commonName            :ASN.1 12:'www.example.com'
Certificate is to be certified until May 16 03:01:29 2025 GMT (3650 days)
  
Write out database with 1 new entries
Data Base Updated
[root@linux-node1 ~]#

4.4.3.      Config ssl permission

上面创建完成之后,默认会生成“/etc/keystone/ssl/”证书目录及证书文件,此时需要设置目录的权限。

快速执行命令:

1
2
chown -R keystone:keystone /etc/keystone/ssl/
chmod -R o-rwx /etc/keystone/ssl/

操作过程:

1
2
[root@linux-node1 ~]# chown -R keystone:keystone /etc/keystone/ssl/
[root@linux-node1 ~]# chmod -R o-rwx /etc/keystone/ssl/

4.4.4.      配置keystone的admin_token

Keystone的所有配置都在一个文件里,即:/etc/keystone/keystone.conf

1)       打开配置文件并编辑:

1
2
3
4
vim /etc/keystone/keystone.conf
[root@linux-node1 ~]# egrep -n "^[a-z]" /etc/keystone/keystone.conf 
13:admin_token=ADMIN
619:connection=mysql://keystone:keystone@192.168.1.36/keystone

2)       同步数据库

配置keystone之后,需要同步数据库,作用是建立keystone的表结构。

快速执行命令:

1
2
keystone-manage db_sync
mysql -h 192.168.1.36 -u keystone -pkeystone -e "use keystone;show tables;"

操作结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@linux-node1 ~]# keystone-manage db_sync ç没返回任何结果则为正常
[root@linux-node1 ~]# mysql -h 192.168.1.36 -u keystone -pkeystone -e "use keystone;show tables;"  <==验证同步的数据库结构表
+-----------------------+
| Tables_in_keystone    |
+-----------------------+
| assignment            |
| credential            |
| domain                |
| endpoint              |
| group                 |
| migrate_version       |
| policy                |
| project               |
| region                |
| role                  |
| service               |
| token                 |
| trust                 |
| trust_role            |
| user                  |
| user_group_membership |
+-----------------------+

错误记录:

1
2
[root@linux-node1 ~]# mysql -h 192.168.1.36 -u keystone -pkeystone -e "use keystone;show tables;"
ERROR 1045 (28000): Access denied for user 'keystone'@'linux-node1.example.com' (using password: YES)

如果报以上错误,经过排查后发现是MySQL的keystone用户没有权限所导致,当然上面的数据同步也就不会成功。解决方法可以重新授权keystone用户,如下:

1
grant all on keystone.* to keystone@'192.168.1.0/255.255.255.0' identified by 'keystone';

4.4.5.      配置keystone的Debug及日志功能

1
2
3
4
vim /etc/keystone/keystone.conf
[root@linux-node1 ~]# egrep -n '^[a-z]' /etc/keystone/keystone.conf
374:debug=true
439:log_file=/var/log/keystone/keystone.log

打开debug之后,有什么问题都可以查看debug错误日志,以便后面实验排查解决错误。

ü  赵班长强心针:OpenStack所有问题,基本上都能解决。而且,看日志都能看出来,当在生产环境下的报错,你第一反应应该是看日志,而不是说先把报错发出来,没有用。

4.4.6.      Start Keystone

终于到了启动keystone的环节了,继续ing:

1)       启动:

1
2
3
chown -R keystone:keystone /var/log/keystone/*
/etc/init.d/openstack-keystone start
chkconfig openstack-keystone on

2)       keystone监听的端口:

1
2
3
[root@linux-node1 ~]# netstat -lntup|egrep "35357|5000"
tcp        0      0 0.0.0.0:35357         0.0.0.0:*           LISTEN      24783/python 
tcp        0      0 0.0.0.0:5000          0.0.0.0:*           LISTEN      24783/python

3)       keystone的三大类命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@linux-node1 ~]# keystone --help|grep list
    ec2-credentials-list
    endpoint-list       List configured service endpoints.
    role-list           List all roles.
    service-list        List all services in Service Catalog.
    tenant-list         List all tenants.
    user-list           List users.
    user-role-list      List roles granted to a user.
[root@linux-node1 ~]# keystone --help|grep create
    ec2-credentials-create
    endpoint-create     Create a new endpoint associated with a service.
    role-create         Create new role.
    service-create      Add service to Service Catalog.
    tenant-create       Create new tenant.
    user-create         Create new user
[root@linux-node1 ~]# keystone --help|grep delete
    ec2-credentials-delete
    endpoint-delete     Delete a service endpoint.
    role-delete         Delete role.
    service-delete      Delete service from Service Catalog.
    tenant-delete       Delete tenant.
    user-delete         Delete user.
[root@linux-node1 ~]#

Keystone的三大命令,所有操作都是用这三个。

4.4.7.      定义admin_token变量

export OS_SERVICE_TOKEN=ADMIN

export OS_SERVICE_ENDPOINT=http://192.168.1.36:35357/v2.0

操作过程:

1
2
3
4
5
6
7
8
9
10
11
12
[root@linux-node1 ~]# export OS_SERVICE_TOKEN=ADMIN
[root@linux-node1 ~]# export OS_SERVICE_ENDPOINT=http://192.168.1.36:35357/v2.0
[root@linux-node1 ~]# echo $OS_SERVICE_TOKEN
ADMIN
[root@linux-node1 ~]# echo $OS_SERVICE_ENDPOINT
http://192.168.1.36:35357/v2.0
[root@linux-node1 ~]# keystone role-list
+----------------------------------+----------+
|                id                |   name   |
+----------------------------------+----------+
| 9fe2ff9ee4384b1894a90878d3e92bab | _member_ |
+----------------------------------+----------+

4.4.8.      注册keystone用户

1)       创建一个admin用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@linux-node1 ~]# keystone user-create --name=admin --pass=admin --email=admin@example.com
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |        admin@example.com         |
| enabled  |               True               |
|    id    | 4a736ea8cf804214b0754afefe8387ee |
|   name   |              admin               |
| username |              admin               |
+----------+----------------------------------+
[root@linux-node1 ~]# keystone user-list
+----------------------------------+-------+---------+-------------------+
|                id                |  name | enabled |       email       |
+----------------------------------+-------+---------+-------------------+
| 4a736ea8cf804214b0754afefe8387ee | admin |   True  | admin@example.com |
+----------------------------------+-------+---------+-------------------+

a)       创建一个admin角色

1
2
3
4
5
6
7
[root@linux-node1 ~]# keystone role-create --name=admin
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|    id    | f26d339da9a1468a89b35c49adecd777 |
|   name   |              admin               |
+----------+----------------------------------+

b)       创建一个admin租户

1
2
3
4
5
6
7
8
9
[root@linux-node1 ~]# keystone tenant-create --name=admin --description="Admin Tenant"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |           Admin Tenant           |
|   enabled   |               True               |
|      id     | 707f2d26cdd5477ea66ede0b5c216c23 |
|     name    |              admin               |
+-------------+----------------------------------+

c)       添加用户角色并建立关系

1
2
3
4
5
6
7
8
9
[root@linux-node1 ~]# keystone user-role-add --user=admin --tenant=admin --role=admin
[root@linux-node1 ~]# keystone user-role-add --user=admin --role=_member_ --tenant=admin
[root@linux-node1 ~]# keystone role-list
+----------------------------------+----------+
|        id          |   name   |
+----------------------------------+----------+
| 9fe2ff9ee4384b1894a90878d3e92bab | _member_ |
| f26d339da9a1468a89b35c49adecd777 |  admin   |
+----------------------------------+----------+

2)       创建一个demo用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@linux-node1 ~]# keystone user-create --name=demo --pass=demo
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |                                  |
| enabled  |               True               |
|    id    | 944ecced065d45f58b11c63097fc21ba |
|   name   |               demo               |
| username |               demo               |
+----------+----------------------------------+
[root@linux-node1 ~]# keystone user-list
+----------------------------------+-------+---------+-------------------+
|                id                |  name | enabled |       email       |
+----------------------------------+-------+---------+-------------------+
| 4a736ea8cf804214b0754afefe8387ee | admin |   True  | admin@example.com |
| 944ecced065d45f58b11c63097fc21ba |  demo |   True  |                   |
+----------------------------------+-------+---------+-------------------+

a)       创建一个demo租户

1
2
3
4
5
6
7
8
9
[root@linux-node1 ~]# keystone tenant-create --name=demo --description="demo Tenant"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |           demo Tenant            |
|   enabled   |               True               |
|      id     | c4015c47e46f4b30bf68a6f39061ace3 |
|     name    |               demo               |
+-------------+----------------------------------+

b)       建立关系

1
[root@linux-node1 ~]# keystone user-role-add --user=demo --role=_member_ --tenant=demo

3)       创建一个service用户

1
2
3
4
5
6
7
8
9
[root@linux-node1 ~]# keystone tenant-create --name=service 
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |                                  |
|   enabled   |               True               |
|      id     | 628660545a044ac4ac5c1a16ca7f4a2c |
|     name    |             service              |
+-------------+----------------------------------+

a)       创建service和endpoint

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
[root@linux-node1 ~]# keystone service-create --name=keystone --type=identity
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |                                  |
|   enabled   |               True               |
|      id     | c84682b33e384a79814b1da93097616c |
|     name    |             keystone             |
|     type    |             identity             |
+-------------+----------------------------------+
[root@linux-node1 ~]# keystone service-list
+----------------------------------+----------+----------+-------------+
|                id                |   name   |   type   | description |
+----------------------------------+----------+----------+-------------+
| c84682b33e384a79814b1da93097616c | keystone | identity |             |
+----------------------------------+----------+----------+-------------+
[root@linux-node1 ~]# keystone endpoint-create 
> --service-id=$(keystone service-list | awk '/ identity / {print $2}'
> --publicurl=http://192.168.1.36:5000/v2.0 
> --internalurl=http://192.168.1.36:5000/v2.0 
> --adminurl=http://192.168.1.36:35357/v2.0
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminurl  |  http://192.168.1.36:35357/v2.0  |
|      id     | 0c919098a9ef48f8ac1880ba1c04c2c5 |
| internalurl |  http://192.168.1.36:5000/v2.0   |
|  publicurl  |  http://192.168.1.36:5000/v2.0   |
|    region   |            regionOne             |
|  service_id | c84682b33e384a79814b1da93097616c |
+-------------+----------------------------------+
[root@linux-node1 ~]# keystone endpoint-list 在数据库里查到的结果
+----------------------------------+-----------+-------------------------------+-------------------------------+--------------------------------+----------------------------------+
|                id                |   region  |           publicurl           |          internalurl          |            adminurl            |            service_id            |
+----------------------------------+-----------+-------------------------------+-------------------------------+--------------------------------+----------------------------------+
| 0c919098a9ef48f8ac1880ba1c04c2c5 | regionOne | http://192.168.1.36:5000/v2.0 | http://192.168.1.36:5000/v2.0 | http://192.168.1.36:35357/v2.0 | c84682b33e384a79814b1da93097616c |
+----------------------------------+-----------+-------------------------------+-------------------------------+--------------------------------+----------------------------------+
[root@linux-node1 ~]# unset OS_SERVICE_TOKEN  一定要取消这两个变量
[root@linux-node1 ~]# unset OS_SERVICE_ENDPOINT
[root@linux-node1 ~]# keystone --os-username=admin --os-password=admin --os-tenant-name=admin --os-auth-url=http://192.168.1.36:35357/v2.0 token-get
+-----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
···输出略过···
 

4.4.9.      建立keystone环境变量文件(方便以后使用)

1)       建立admin的环境变量

1
2
3
4
5
6
7
8
[root@linux-node1 ~]# cd 
[root@linux-node1 ~]# vim keystone-admin
[root@linux-node1 ~]# cat keystone-admin 
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL=http://192.168.1.36:35357/v2.0
[root@linux-node1 ~]# source keystone-admin

2)       建立demo的环境变量

1
2
3
4
5
6
7
[root@linux-node1 ~]# vim keystone-demo
[root@linux-node1 ~]# cat keystone-demo
export OS_TENANT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=demo
export OS_AUTH_URL=http://192.168.1.36:35357/v2.0
[root@linux-node1 ~]# source keystone-demo

4.5.       Glance安装与配置

n  Glance是OpenStack中的一个镜像服务,主要作用是提供虚拟机的虚拟镜像注册、查询、存储的功能。

n  Glance由三个部分组成,分别为:glance-api、glance-registry以及image store。

4.5.1.      Install Glance

1
yum install openstack-glance python-glanceclient python-crypto

4.5.2.      Config Glance

Glance的默认配置路径在“/etc/glance/”目录下:

1
2
3
4
5
[root@linux-node1 ~]# cd /etc/glance/
[root@linux-node1 glance]# ls
glance-api.conf    glance-registry.conf  policy.json
glance-cache.conf  glance-scrubber.conf  schema-image.json
#只需要配置标记的两个文件

1)       更改的配置:

1
2
3
4
5
6
7
8
[root@linux-node1 glance]# egrep -n '^[a-z]' glance-api.conf 
6:debug=true
43:log_file=/var/log/glance/api.log
564:connection=mysql://glance:glance@192.168.1.36/glance
[root@linux-node1 glance]# egrep -n '^[a-z]' glance-registry.conf 
6:debug=true
19:log_file=/var/log/glance/registry.log
94:connection=mysql://glance:glance@192.168.1.36/glance

2)       同步数据库

1
2
3
4
[root@linux-node1 glance]# glance-manage db_sync  ç执行的时候会有5秒左右的延时
/usr/lib64/python2.6/site-packages/Crypto/Util/number.py:57: PowmInsecureWarning: Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.
  _warn("Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning)  ç这个是警告,不过没关系。
[root@linux-node1 glance]#

3)       验证同步的数据表结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@linux-node1 glance]# mysql -h 192.168.1.36 -u glance -pglance -e"use glance;show tables;"
+------------------+
| Tables_in_glance |
+------------------+
| image_locations  |
| image_members    |
| image_properties |
| image_tags       |
| images           |
| migrate_version  |
| task_info        |
| tasks            |
+------------------+

4.5.3.      配置Glance的RabbitMQ

1)       修改glance-api.conf文件

1
2
3
4
5
6
7
8
9
10
11
[root@linux-node1 glance]# egrep -n '^[a-z]' glance-api.conf 
232:notifier_strategy = rabbit
242:rabbit_host=192.168.1.36
243:rabbit_port=5672
244:rabbit_use_ssl=false
245:rabbit_userid=guest
246:rabbit_password=guest
247:rabbit_virtual_host=/
248:rabbit_notification_exchange=glance
249:rabbit_notification_topic=notifications
250:rabbit_durable_queues=False

2)       Glance连接到keystone进行认证

Glance需要连接keystone来进行用户验证,才能对用户提供服务

操作过程:

a)       在keystone里创建Glance用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@linux-node1 ~]# source keystone-admin ç在执行keystone之前首先应该加载环境变量
[root@linux-node1 ~]# keystone user-create --name=glance --pass=glance
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |                                  |
| enabled  |               True               |
|    id    | 91c734899d21406582a5e901973c6110 |
|   name   |              glance              |
| username |              glance              |
+----------+----------------------------------+
[root@linux-node1 ~]# keystone user-list
+----------------------------------+--------+---------+-------------------+
|                id                |  name  | enabled |       email       |
+----------------------------------+--------+---------+-------------------+
| 4a736ea8cf804214b0754afefe8387ee | admin  |   True  | admin@example.com |
| 944ecced065d45f58b11c63097fc21ba |  demo  |   True  |                   |
| 91c734899d21406582a5e901973c6110 | glance |   True  |                   |
+----------------------------------+--------+---------+-------------------+

b)       建立关系

1
[root@linux-node1 ~]# keystone user-role-add --user=glance --tenant=service --role=admin

4.5.4.      配置Glance的Keystone

1)       修改glance-api.conf文件

[root@linux-node1 ~]# egrep -n "^[a-z]" /etc/glance/glance-api.conf

1
2
3
4
5
6
7
645:auth_host=192.168.1.36
646:auth_port=35357
647:auth_protocol=http
648:admin_tenant_name=service
649:admin_user=glance
650:admin_password=glance
660:flavor=keystone

2)       修改glance-registry.conf文件(注册服务文件也需要更改keystone的认证)

1
2
3
4
5
6
7
8
[root@linux-node1 ~]# egrep -n "^[a-z]" /etc/glance/glance-registry.conf 
175:auth_host=192.168.1.36
176:auth_port=35357
177:auth_protocol=http
178:admin_tenant_name=service
179:admin_user=glance
180:admin_password=glance
190:flavor=keystone

3)       创建service和endpoint

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@linux-node1 ~]# keystone service-create --name=glance --type=image
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |                                  |
|   enabled   |               True               |
|      id     | a6242bf6e26e4f0c9ae1c8aeb9c4ce7f |
|     name    |              glance              |
|     type    |              image               |
+-------------+----------------------------------+
[root@linux-node1 ~]# keystone service-list
+----------------------------------+----------+----------+-------------+
|                id                |   name   |   type   | description |
+----------------------------------+----------+----------+-------------+
| a6242bf6e26e4f0c9ae1c8aeb9c4ce7f |  glance  |  image   |             |
| c84682b33e384a79814b1da93097616c | keystone | identity |             |
+----------------------------------+----------+----------+-------------+
[root@linux-node1 ~]# keystone endpoint-create --service-id=$(keystone service-list | awk '/ image / {print $2}') --publicurl=http://192.168.1.36:9292 --internalurl=http://192.168.1.36:9292 --adminurl=http://192.168.1.36:9292
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminurl  |     http://192.168.1.36:9292     |
|      id     | 90762415c63d4d56aa7e9d30054c20c2 |
| internalurl |     http://192.168.1.36:9292     |
|  publicurl  |     http://192.168.1.36:9292     |
|    region   |            regionOne             |
|  service_id | a6242bf6e26e4f0c9ae1c8aeb9c4ce7f |
+-------------+----------------------------------+
[root@linux-node1 ~]# keystone endpoint-list
+----------------------------------+-----------+-------------------------------+-------------------------------+--------------------------------+----------------------------------+
|                id                |   region  |           publicurl           |          internalurl          |            adminurl            |            service_id            |
+----------------------------------+-----------+-------------------------------+-------------------------------+--------------------------------+----------------------------------+
| 0c919098a9ef48f8ac1880ba1c04c2c5 | regionOne | http://192.168.1.36:5000/v2.0 | http://192.168.1.36:5000/v2.0 | http://192.168.1.36:35357/v2.0 | c84682b33e384a79814b1da93097616c |
| 90762415c63d4d56aa7e9d30054c20c2 | regionOne |    http://192.168.1.36:9292   |    http://192.168.1.36:9292   |    http://192.168.1.36:9292    | a6242bf6e26e4f0c9ae1c8aeb9c4ce7f |
+----------------------------------+-----------+-------------------------------+-------------------------------+--------------------------------+----------------------------------+

4.5.5.      更改日志属主

1
2
[root@linux-node1 ~]# cd /var/log/glance/
[root@linux-node1 glance]# chown -R glance:glance api.log

4.5.6.      Start Glance

1
2
3
4
[root@linux-node1 glance]# /etc/init.d/openstack-glance-api start
[root@linux-node1 glance]# /etc/init.d/openstack-glance-registry start
[root@linux-node1 glance]# chkconfig openstack-glance-api on
[root@linux-node1 glance]# chkconfig openstack-glance-registry on

查看端口:

1
2
3
4
5
[root@linux-node1 glance]# netstat -lntup|egrep '9191|9292'
tcp        0      0 0.0.0.0:9191         0.0.0.0:*           LISTEN   29919/python        
tcp        0      0 0.0.0.0:9292         0.0.0.0:*           LISTEN   29898/python  
#glance-api:9191端口
#glance-registry:9292端口

查看glance镜像:(glance才刚启动,所以下面没有镜像,但是能看到,说明启动正常)

1
2
3
4
5
6
[root@linux-node1 glance]# glance image-list
+----+------+-------------+------------------+------+--------+
| ID | Name | Disk Format | Container Format | Size | Status |
+----+------+-------------+------------------+------+--------+
+----+------+-------------+------------------+------+--------+
[root@linux-node1 glance]#

4.5.7.      下载镜像并注册

1
2
3
wget http://download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-disk.img
glance image-create --name "cirros-0.3.2-x86_64" --disk-format qcow2 --container-format bare --is-public True --file cirros-0.3.2-x86_64-disk.img
glance image-list

操作过程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@linux-node1 ~]# wget http://download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-disk.img
[root@linux-node1 ~]# glance image-create --name "cirros-0.3.2-x86_64" --disk-format qcow2 --container-format bare --is-public True --file cirros-0.3.2-x86_64-disk.img
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | 64d7c1cd2b6f60c92c14662941cb7913     |
| container_format | bare                                 |
| created_at       | 2015-05-20T02:41:14                  |
| deleted          | False                                |
| deleted_at       | None                                 |
| disk_format      | qcow2                                |
id               | 879aa6c1-15f2-4c85-85f6-c5822ba9a3c0 |
| is_public        | True                                 |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | cirros-0.3.2-x86_64                  |
| owner            | 707f2d26cdd5477ea66ede0b5c216c23     |
| protected        | False                                |
| size             | 13167616                             |
| status           | active                               |
| updated_at       | 2015-05-20T02:41:15                  |
| virtual_size     | None                                 |
+------------------+--------------------------------------+
[root@linux-node1 ~]# glance image-list
+--------+---------------------+-------------+------------------+----------+--------+
| ID     | Name                | Disk Format | Container Format | Size     | Status |
+--------+---------------------+-------------+------------------+----------+--------+
| 879aa6c1-15f2-4c85-85f6-c5822ba9a3c0 | cirros-0.3.2-x86_64 | qcow2       | bare             | 13167616 | active |
+--------+---------------------+-------------+------------------+----------+--------+
[root@linux-node1 ~]#

4.6.       Nova安装与配置

4.6.1.      Install Nova

1
yum install openstack-nova-api openstack-nova-cert openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler python-novaclient

4.6.2.      Config Nova

Nova的默认配置路径在“/etc/nova/”目录下:

1
2
3
[root@linux-node1 ~]# cd /etc/nova/
[root@linux-node1 nova]# ls
api-paste.ini  nova.conf  policy.json  release  rootwrap.conf

4)       更改的配置:

1
2
[root@linux-node1 nova]# egrep -n '^[a-z]' nova.conf 
2475:connection=mysql://nova:nova@192.168.1.36/nova

5)       同步数据库

1
[root@linux-node1 nova]# nova-manage  db sync

6)       验证同步的数据表结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
[root@linux-node1 nova]# mysql -h 192.168.1.36 -u nova -pnova -e"use nova;show tables;"
+--------------------------------------------+
| Tables_in_nova                             |
+--------------------------------------------+
| agent_builds                               |
| aggregate_hosts                            |
| aggregate_metadata                         |
| aggregates                                 |
| block_device_mapping                       |
| bw_usage_cache                             |
| cells                                      |
| certificates                               |
| compute_nodes                              |
| console_pools                              |
| consoles                                   |
| dns_domains                                |
| fixed_ips                                  |
| floating_ips                               |
| instance_actions                           |
| instance_actions_events                    |
| instance_faults                            |
| instance_group_member                      |
| instance_group_metadata                    |
| instance_group_policy                      |
| instance_groups                            |
| instance_id_mappings                       |
| instance_info_caches                       |
| instance_metadata                          |
| instance_system_metadata                   |
| instance_type_extra_specs                  |
| instance_type_projects                     |
| instance_types                             |
| instances                                  |
| iscsi_targets                              |
| key_pairs                                  |
| migrate_version                            |
| migrations                                 |
| networks                                   |
| pci_devices                                |
| project_user_quotas                        |
| provider_fw_rules                          |
| quota_classes                              |
| quota_usages                               |
| quotas                                     |
| reservations                               |
| s3_images                                  |
| security_group_default_rules               |
| security_group_instance_association        |
| security_group_rules                       |
| security_groups                            |
| services                                   |
| shadow_agent_builds                        |
| shadow_aggregate_hosts                     |
| shadow_aggregate_metadata                  |
| shadow_aggregates                          |
| shadow_block_device_mapping                |
| shadow_bw_usage_cache                      |
| shadow_cells                               |
| shadow_certificates                        |
| shadow_compute_nodes                       |
| shadow_console_pools                       |
| shadow_consoles                            |
| shadow_dns_domains                         |
| shadow_fixed_ips                           |
| shadow_floating_ips                        |
| shadow_instance_actions                    |
| shadow_instance_actions_events             |
| shadow_instance_faults                     |
| shadow_instance_group_member               |
| shadow_instance_group_metadata             |
| shadow_instance_group_policy               |
| shadow_instance_groups                     |
| shadow_instance_id_mappings                |
| shadow_instance_info_caches                |
| shadow_instance_metadata                   |
| shadow_instance_system_metadata            |
| shadow_instance_type_extra_specs           |
| shadow_instance_type_projects              |
| shadow_instance_types                      |
| shadow_instances                           |
| shadow_iscsi_targets                       |
| shadow_key_pairs                           |
| shadow_migrate_version                     |
| shadow_migrations                          |
| shadow_networks                            |
| shadow_pci_devices                         |
| shadow_project_user_quotas                 |
| shadow_provider_fw_rules                   |
| shadow_quota_classes                       |
| shadow_quota_usages                        |
| shadow_quotas                              |
| shadow_reservations                        |
| shadow_s3_images                           |
| shadow_security_group_default_rules        |
| shadow_security_group_instance_association |
| shadow_security_group_rules                |
| shadow_security_groups                     |
| shadow_services                            |
| shadow_snapshot_id_mappings                |
| shadow_snapshots                           |
| shadow_task_log                            |
| shadow_virtual_interfaces                  |
| shadow_volume_id_mappings                  |
| shadow_volume_usage_cache                  |
| shadow_volumes                             |
| snapshot_id_mappings                       |
| snapshots                                  |
| task_log                                   |
| virtual_interfaces                         |
| volume_id_mappings                         |
| volume_usage_cache                         |
| volumes                                    |
+--------------------------------------------+
[root@linux-node1 nova]#

4.6.3.      Nova配置RabbitMQ

1
2
3
4
5
6
7
[root@linux-node1 nova]# egrep -n '^[a-z]' nova.conf 
79:rabbit_host=192.168.1.36
83:rabbit_port=5672
89:rabbit_use_ssl=false
92:rabbit_userid=guest
95:rabbit_password=guest
189:rpc_backend=rabbit

4.6.4.      Nova配置Keystone

1)       添加Nova用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@linux-node1 nova]# cd
[root@linux-node1 ~]# source keystone-admin
[root@linux-node1 ~]# keystone user-create --name=nova --pass=nova
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |                                  |
| enabled  |               True               |
|    id    | 770c6373a97a43429dcded8fc505e463 |
|   name   |               nova               |
| username |               nova               |
+----------+----------------------------------+
[root@linux-node1 ~]# keystone user-role-add --user=nova --tenant=service --role=admin
[root@linux-node1 ~]# keystone user-list
+----------------------------------+--------+---------+-------------------+
|          id           |  name  | enabled |       email       |
+----------------------------------+--------+---------+-------------------+
| 4a736ea8cf804214b0754afefe8387ee | admin  |   True  | admin@example.com |
| 944ecced065d45f58b11c63097fc21ba |  demo  |   True  |                   |
| 91c734899d21406582a5e901973c6110 | glance |   True  |                   |
| 770c6373a97a43429dcded8fc505e463 |  nova  |   True  |                   |
+----------------------------------+--------+---------+-------------------+
[root@linux-node1 nova]# egrep -n '^[a-z]' nova.conf 
544:auth_strategy=keystone
2687:auth_host=192.168.1.36
2690:auth_port=35357
2694:auth_protocol=http
2697:auth_uri=http://192.168.1.36:5000
2701:auth_version=v2.0
2728:admin_user=nova
2731:admin_password=nova
2735:admin_tenant_name=service

4.6.5.      Nova配置Glance

1
2
3
[root@linux-node1 nova]# egrep -n '^[a-z]' nova.conf
253:my_ip=192.168.1.36
1129:glance_host=$my_ip

4.6.6.      Nova自身配置

1
2
3
4
5
6
7
8
9
10
[root@linux-node1 nova]# egrep -n '^[a-z]' nova.conf 
302:state_path=/var/lib/nova
885:instances_path=$state_path/instances
1576:lock_path=/var/lib/nova/tmp
1951:compute_driver=libvirt.LibvirtDriver
2036:novncproxy_base_url=http://192.168.1.36:6080/vnc_auto.html
2044:vncserver_listen=0.0.0.0
2048:vncserver_proxyclient_address=192.168.1.36
2051:vnc_enabled=true
2054:vnc_keymap=en-us

4.6.7.      Nova更改的全部配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@linux-node1 nova]# egrep -n '^[a-z]' nova.conf 
79:rabbit_host=192.168.1.36
83:rabbit_port=5672
89:rabbit_use_ssl=false
92:rabbit_userid=guest
95:rabbit_password=guest
189:rpc_backend=rabbit
253:my_ip=192.168.1.36
302:state_path=/var/lib/nova
544:auth_strategy=keystone
885:instances_path=$state_path/instances
1129:glance_host=$my_ip
1576:lock_path=/var/lib/nova/tmp
1951:compute_driver=libvirt.LibvirtDriver
2036:novncproxy_base_url=http://192.168.1.36:6080/vnc_auto.html
2044:vncserver_listen=0.0.0.0
2048:vncserver_proxyclient_address=192.168.1.36
2051:vnc_enabled=true
2054:vnc_keymap=en-us
2475:connection=mysql://nova:nova@192.168.1.36/nova
2687:auth_host=192.168.1.36
2690:auth_port=35357
2694:auth_protocol=http
2697:auth_uri=http://192.168.1.36:5000
2701:auth_version=v2.0
2728:admin_user=nova
2731:admin_password=nova
2735:admin_tenant_name=service

4.6.8.      创建service和endpoint

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@linux-node1 nova]# keystone service-create --name=nova --type=compute
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |                                  |
|   enabled   |               True               |
|      id     | 8a4f956ed2864d839952dfc132a3d296 |
|     name    |               nova               |
|     type    |             compute              |
+-------------+----------------------------------+
[root@linux-node1 nova]# keystone endpoint-create --service-id=$(keystone service-list| awk ' / compute / {print $2}') --publicurl=http://192.168.1.36:8774/v2/%(tenant_id)s --internalurl=http://192.168.1.36:8774/v2/%(tenant_id)s --adminurl=http://192.168.1.36:8774/v2/%(tenant_id)s
+-------------+-------------------------------------------+
|   Property  |                   Value                   |
+-------------+-------------------------------------------+
|   adminurl  | http://192.168.1.36:8774/v2/%(tenant_id)s |
|      id     |      97a0b3212b5a468dbe1828596b2566bc     |
| internalurl | http://192.168.1.36:8774/v2/%(tenant_id)s |
|  publicurl  | http://192.168.1.36:8774/v2/%(tenant_id)s |
|    region   |                 regionOne                 |
|  service_id |      8a4f956ed2864d839952dfc132a3d296     |
+-------------+-------------------------------------------+

4.6.9.      Start Nova

1
2
3
4
#启动
for in {api,cert,conductor,consoleauth,novncproxy,scheduler};do service openstack-nova-"$i" start;done
#加入开机自启动
for in {api,cert,conductor,consoleauth,novncproxy,scheduler};do chkconfig openstack-nova-"$i" on;done

4.6.10.   Nova-list

1
2
3
4
5
6
7
8
9
[root@linux-node1 ~]# nova host-list
+-------------------------+-------------+----------+
| host_name               | service     | zone     |
+-------------------------+-------------+----------+
| linux-node1.example.com | conductor   | internal |
| linux-node1.example.com | cert        | internal |
| linux-node1.example.com | consoleauth | internal |
| linux-node1.example.com | scheduler   | internal |
+-------------------------+-------------+----------+

到此,“控制节点”部分组件安装及配置部署完毕,接下来对“计算节点”进行配置。

4.7.       Nova安装与配置(计算节点操作)

4.7.1.      Nova-Compute 介绍

l  Nova-compute 一般运行在计算节点上,通过Message Queue接管并管理VM的生命周期

l  Nova-compute 通过Libvirt管理KVM,通过XenAPI管理Xen等。

4.7.2.      Install Nova-compute

!!注意!!再次确认,以下步骤将是在“计算节点”上操作!

1
2
yum install -y http://repos.fedorapeople.org/repos/openstack/openstack-icehouse/rdo-release-icehouse-4.noarch.rpm
yum install -y qemu-kvm libvirt openstack-nova-compute python-novaclient

查看系统是否支持KVM硬件虚拟化

1
2
[root@linux-node2 ~]# egrep -c '(vmx|svm)' /proc/cpuinfo 
1

4.7.3.      Config Nova

1)       控制节点推送配置文件到计算节点

注意:需要到控制节点推送配置文件到计算节点,具体操作如下:

!!在控制节点(node1)节点上推送!!

1
2
3
4
5
6
7
[root@linux-node1 ~]# scp /etc/nova/nova.conf 192.168.1.37:/etc/nova/
The authenticity of host '192.168.1.37 (192.168.1.37)' can't be established.
RSA key fingerprint is ec:67:00:b2:b9:2e:68:cc:1d:d7:9c:ac:b3:28:ed:24.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.37' (RSA) to the list of known hosts.
root@192.168.1.37's password: 
nova.conf                                                         100%   97KB  96.8KB/s   00:00

2)       更改配置

Nova的很多配置都在控制节点上完成了,控制节点把文件推送到计算节点后,只需要更改以下内容即可:

1
2
[root@linux-node2 ~]# egrep -n "^[a-z]" /etc/nova/nova.conf
2048:vncserver_proxyclient_address=192.168.1.37 ç改成计算节点的IP地址

4.7.4.      Start Nova

1
2
3
4
5
6
[root@linux-node2 ~]# /etc/init.d/libvirtd start
[root@linux-node2 ~]# /etc/init.d/messagebus start
[root@linux-node2 ~]# /etc/init.d/openstack-nova-compute start
[root@linux-node2 ~]# chkconfig openstack-nova-compute on
[root@linux-node2 ~]# chkconfig libvirtd on
[root@linux-node2 ~]# chkconfig messagebus on

在控制节点上查看Nova的配置是否生效

1
2
3
4
5
6
7
8
9
10
[root@linux-node1 ~]# nova host-list
+-------------------------+-------------+----------+
| host_name               | service     | zone     |
+-------------------------+-------------+----------+
| linux-node1.example.com | conductor   | internal |
| linux-node1.example.com | cert        | internal |
| linux-node1.example.com | consoleauth | internal |
| linux-node1.example.com | scheduler   | internal |
| linux-node2.example.com | compute     | nova     |
+-------------------------+-------------+----------+

4.8.       Neutron安装与配置

4.8.1.      Install Neutron

温馨提示:这是在控制节点上操作哦!

1
yum install openstack-neutron openstack-neutron-ml2 python-neutronclient openstack-neutron-linuxbridge

4.8.2.      配置neutron.conf文件

1)       Neutron基础配置

1
2
3
4
5
6
7
[root@linux-node1 ~]# egrep -n '^[a-z]' /etc/neutron/neutron.conf
6:debug = true
10:state_path = /var/lib/neutron
13:lock_path = $state_path/lock
53:core_plugin = ml2
62 service_plugins = router,firewall,lbaas
385:root_helper = sudo neutron-rootwrap /etc/neutron/rootwrap.conf

2)       Neutron配置MySQL

1
2
[root@linux-node1 ~]# egrep -n '^[a-z]' /etc/neutron/neutron.conf
405:connection = mysql://neutron:neutron@192.168.1.36:3306/neutron

a)       创建Neutron的用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@linux-node1 ~]# source keystone-admin
[root@linux-node1 ~]# keystone user-create --name neutron --pass neutron
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |                                  |
| enabled  |               True               |
|    id    | bc6d613504f14d4c8ad7e6c8bae668ac |
|   name   |             neutron              |
| username |             neutron              |
+----------+----------------------------------+
[root@linux-node1 ~]# keystone user-list                          
+----------------------------------+---------+---------+-------------------+
|                id                |   name  | enabled |       email       |
+----------------------------------+---------+---------+-------------------+
| 4a736ea8cf804214b0754afefe8387ee |  admin  |   True  | admin@example.com |
| 944ecced065d45f58b11c63097fc21ba |   demo  |   True  |                   |
| 91c734899d21406582a5e901973c6110 |  glance |   True  |                   |
| bc6d613504f14d4c8ad7e6c8bae668ac | neutron |   True  |                   |
| 770c6373a97a43429dcded8fc505e463 |   nova  |   True  |                   |
+----------------------------------+---------+---------+-------------------+
[root@linux-node1 ~]# keystone user-role-add --user neutron --tenant service --role admin

3)       Neutron配置Keystone

1
2
3
4
5
6
7
8
9
[root@linux-node1 ~]# egrep -n '^[a-z]' /etc/neutron/neutron.conf                                   
66:api_paste_config = /usr/share/neutron/api-paste.ini
70:auth_strategy = keystone
395:auth_host = 192.168.1.36
396:auth_port = 35357
397:auth_protocol = http
398:admin_tenant_name = service
399:admin_user = neutron
400:admin_password = neutron

4)       Neutron配置RabbitMQ

1
2
3
4
5
6
[root@linux-node1 ~]# egrep -n '^[a-z]' /etc/neutron/neutron.conf
134:rabbit_host = 192.168.1.36
136:rabbit_password = guest
138:rabbit_port = 5672
143:rabbit_userid = guest
145:rabbit_virtual_host = /

5)       Neutron配置Nova

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@linux-node1 ~]# egrep -n '^[a-z]' /etc/neutron/neutron.conf
299:notify_nova_on_port_status_changes = true
303:notify_nova_on_port_data_changes = true
306:nova_url = http://192.168.1.36:8774/v2
312:nova_admin_username = nova
315:nova_admin_tenant_id = 628660545a044ac4ac5c1a16ca7f4a2c
318:nova_admin_password = nova
321:nova_admin_auth_url = http://192.168.1.36:35357/v2.0
+--------------------------------------+
#注释:315行id的由来:
[root@linux-node1 ~]# keystone tenant-list 
+----------------------------------+---------+---------+
|                id                |   name  | enabled |
+----------------------------------+---------+---------+
| 707f2d26cdd5477ea66ede0b5c216c23 |  admin  |   True  |
| c4015c47e46f4b30bf68a6f39061ace3 |   demo  |   True  |
| 628660545a044ac4ac5c1a16ca7f4a2c | service |   True  |
+----------------------------------+---------+---------+
#就是service的ID号码,填写到nova_admin_tenant_id即可。

4.8.3.      配置ml2文件

1
2
3
4
5
6
[root@linux-node1 ~]# egrep -n '^[a-z]' /etc/neutron/plugins/ml2/ml2_conf.ini    
5:type_drivers = flat,vlan,gre,vxlan
12:tenant_network_types = flat,vlan,gre,vxlan
17:mechanism_drivers = linuxbridge,openvswitch
29:flat_networks = physnet1
62:enable_security_group = True

4.8.4.      配置linuxbridge文件

1
2
3
4
5
[root@linux-node1 ~]# egrep -n '^[a-z]' /etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini
20:network_vlan_ranges = physnet1
31:physical_interface_mappings = physnet1:eth0
74:firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
79:enable_security_group = True

4.8.5.      Nova服务配置Neutron

1)       没错,就是在Nova上面配置Neutron!

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@linux-node1 ~]# vim /etc/nova/nova.conf
1200 network_api_class=nova.network.neutronv2.api.API
1321 linuxnet_interface_driver=nova.network.linux_net.LinuxBridgeInterfaceDriver
1466 neutron_url=http://192.168.1.36:9696
1474 neutron_admin_username=neutron
1478 neutron_admin_password=neutron
1482 neutron_admin_tenant_id=628660545a044ac4ac5c1a16ca7f4a2c
1488 neutron_admin_tenant_name=service
1496 neutron_admin_auth_url=http://192.168.1.36:5000/v2.0
1503 neutron_auth_strategy=keystone
1536 security_group_api=neutron
1982 firewall_driver=nova.virt.libvirt.firewall.NoopFirewallDriver
2872 vif_driver=nova.virt.libvirt.vif.NeutronLinuxBridgeVIFDriver

2)       将配置文件推送到计算节点

1
2
3
4
5
[root@linux-node1 ~]# scp /etc/nova/nova.conf 192.168.1.37:/etc/nova/
#此时,需要去“计算节点”上更改一下参数即可:
vncserver_proxyclient_address=192.168.1.37  ç改成计算节点的IP地址
#在node2上重启openstack-nova-compute
[root@linux-node2 ~]# /etc/init.d/openstack-nova-compute restart

3)       重启Nova服务

1
[root@linux-node1 ~]# for i in {api,conductor,scheduler}; do service openstack-nova-"$i" restart;done

4.8.6.      创建service和endpoint

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@linux-node1 ~]# keystone service-create --name neutron --type network
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |                                  |
|   enabled   |               True               |
|      id     | 9588d468d7e044dc88a23cf39fef17f1 |
|     name    |             neutron              |
|     type    |             network              |
+-------------+----------------------------------+
[root@linux-node1 ~]# keystone endpoint-create --service-id=$(keystone service-list | awk '/ network / {print $2}') --publicurl=http://192.168.1.36:9696 --internalurl=http://192.168.1.36:9696 --adminurl=http://192.168.1.36:9696
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminurl  |     http://192.168.1.36:9696     |
|      id     | 0ff9f7f415f04491adde0b1dc4080b15 |
| internalurl |     http://192.168.1.36:9696     |
|  publicurl  |     http://192.168.1.36:9696     |
|    region   |            regionOne             |
|  service_id | 9588d468d7e044dc88a23cf39fef17f1 |
+-------------+----------------------------------+

4.8.7.      Neutron试启动

1
2
3
4
5
6
[root@linux-node1 ~]# neutron-server --config-file=/etc/neutron/neutron.conf  --config-file=/etc/neutron/plugins/ml2/ml2_conf.ini --config-file=/etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini
···中间信息略过···
2015-05-20 20:33:36.242 53514 INFO neutron.service [-] Neutron service started, listening on 0.0.0.0:9696
2015-05-20 20:33:36.252 53514 INFO neutron.openstack.common.rpc.common [-] Connected to AMQP server on 192.168.1.36:5672
2015-05-20 20:33:36.256 53514 INFO neutron.wsgi [-] (53514) wsgi starting up on http://0.0.0.0:9696/
#看到最后监听的端口则说明能启动成功!

4.8.8.      修改Neutron启动脚本

1)       修改neutron-server启动脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@linux-node1 ~]# vim /etc/init.d/neutron-server
#15-17行
configs=(
    "/usr/share/$prog/$prog-dist.conf" 
    "/etc/$prog/$prog.conf" 
    "/etc/$prog/plugin.ini" 
#由上面更改为下面的类容:
    "/etc/neutron/neutron.conf" 
    "/etc/neutron/plugins/ml2/ml2_conf.ini" 
    "/etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini" 
)
更改后的结果应该是:
configs=(
    "/etc/neutron/neutron.conf" 
    "/etc/neutron/plugins/ml2/ml2_conf.ini" 
    "/etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini" 
)

2)       修改neutron-linuxbridge-agent启动脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#16-18行
configs=(
    "/usr/share/$prog/$prog-dist.conf" 
    "/etc/$prog/$prog.conf" 
    "/etc/$prog/plugin.ini" 
#由上面更改为下面的类容:
    "/etc/neutron/neutron.conf" 
    "/etc/neutron/plugins/ml2/ml2_conf.ini" 
    "/etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini" 
)
更改后的结果应该是:
configs=(
    "/etc/neutron/neutron.conf" 
    "/etc/neutron/plugins/ml2/ml2_conf.ini" 
    "/etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini" 
)

4.8.9.      启动Nova服务

1
2
3
4
5
6
7
[root@linux-node1 ~]# /etc/init.d/neutron-server start
[root@linux-node1 ~]# /etc/init.d/neutron-linuxbridge-agent start
[root@linux-node1 ~]# chkconfig neutron-server on
[root@linux-node1 ~]# chkconfig neutron-linuxbridge-agent on
查看端口
[root@linux-node1 ~]# netstat -lntup|grep 9696
tcp        0      0 0.0.0.0:9696        0.0.0.0:*         LISTEN      53850/python

查看Neutron-list

1
2
3
4
5
6
 [root@linux-node1 ~]# neutron agent-list
+--------+--------------------+-------------------------+-------+----------------+
id     | agent_type         | host                    | alive | admin_state_up |
+--------+--------------------+-------------------------+-------+----------------+
| 6300bfdb-f315-4fcd-a92b-cd979ead793e | Linux bridge agent | linux-node1.example.com | <img draggable="false" class="emoji" alt="c="https://s.w.org/images/core/emoji/11/svg/1f642.svg">   | True           |
+--------+--------------------+-------------------------+-------+----------------+

4.9.       Neutron安装与配置(计算节点操作)

4.9.1.      Install Neutron

1
yum install openstack-neutron openstack-neutron-ml2 python-neutronclient openstack-neutron-linuxbridge

4.9.2.      复制控制节点的Neutron配置文件

温馨提示:此项需到“控制节点”上操作!

1
2
3
4
scp /etc/neutron/neutron.conf 192.168.1.37:/etc/neutron/
scp /etc/neutron/plugins/ml2/ml2_conf.ini 192.168.1.37:/etc/neutron/plugins/ml2/
scp /etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini 192.168.1.37:/etc/neutron/plugins/linuxbridge/
scp /etc/init.d/neutron-* 192.168.1.37:/etc/init.d/

4.9.3.      启动Neutron服务

计算节点只需要启动neutron-linuxbridge-agent即可

1
2
[root@linux-node2 ~]# /etc/init.d/neutron-linuxbridge-agent start
[root@linux-node2 ~]# chkconfig  neutron-linuxbridge-agent on

到控制节点查看

1
2
3
4
5
6
7
[root@linux-node1 ~]# neutron agent-list
+-----+--------------------+-------------------------+-------+----------------+
id                                   | agent_type         | host                    | alive | admin_state_up |
+-----+--------------------+-------------------------+-------+----------------+
| 6300bfdb-f315-4fcd-a92b-cd979ead793e | Linux bridge agent | linux-node1.example.com | <img draggable="false" class="emoji" alt="" src="https://s.w.org/images/core/emoji/11/svg/1f642.svg">   | True           |
| d45ca3a8-cca5-4bc0-9d6b-4a3519384fa6 | Linux bridge agent | linux-node2.example.com | <img draggable="false" class="emoji" alt="" src="https://s.w.org/images/core/emoji/11/svg/1f642.svg">   | True           |
+------+--------------------+-------------------------+-------+----------------+

4.10.    Horizon安装与配置

4.10.1.   安装dashboard等软件

1
yum install -y httpd mod_wsgi memcached python-memcached openstack-dashboard

4.10.2.   启动memcache

1
2
[root@linux-node1 ~]# /etc/init.d/memcached start
[root@linux-node1 ~]# chkconfig memcached on

4.10.3.   配置dashboard

1
2
3
4
5
6
7
8
9
10
11
12
[root@linux-node1 ~]#   vim /etc/openstack-dashboard/local_settings
1、打开memcache,默认是关闭状态只需把前面注释取消掉即可
98 CACHES = {
99    'default': {
100        'BACKEND' 'django.core.cache.backends.memcached.MemcachedCache',
101        'LOCATION' '127.0.0.1:11211',
102    }
103 }
2、更改Keystone的地址
128 OPENSTACK_HOST = "192.168.1.36"
3、增加允许的主机
15 ALLOWED_HOSTS = ['horizon.example.com''localhost','192.168.1.36']

4.10.4.   启动apache

1
2
[root@linux-node1 ~]# /etc/init.d/httpd start
[root@linux-node1 ~]# chkconfig httpd on

4.10.5.   访问dashboard

浏览器输入:http://192.168.1.36/dashboard/

用户名:admin,demo

密  码:admin,demo

4.10.6.   给租户ID创建网络

1)       创建网络

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@linux-node1 ~]# keystone tenant-list  ç第一步获取demo租户ID
+----------------------------------+---------+---------+
|                id                |   name  | enabled |
+----------------------------------+---------+---------+
| 707f2d26cdd5477ea66ede0b5c216c23 |  admin  |   True  |
| c4015c47e46f4b30bf68a6f39061ace3 |   demo  |   True  |
| 628660545a044ac4ac5c1a16ca7f4a2c | service |   True  |
+----------------------------------+---------+---------+
[root@linux-node1 ~]# neutron net-create --tenant-id c4015c47e46f4b30bf68a6f39061ace3 flat_net --shared --provider:network_type flat --provider:physical_network physnet1 
Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
id                        | 361e6757-9d01-4daf-b098-fd50bdf2f550 |
| name                      | flat_net                             |
| provider:network_type     | flat                                 |
| provider:physical_network | physnet1                             |
| provider:segmentation_id  |                                      |
| shared                    | True                                 |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | c4015c47e46f4b30bf68a6f39061ace3     |
+---------------------------+--------------------------------------+

查看创建的网络

1
2
3
4
5
6
[root@linux-node1 ~]# neutron net-list
+--------------------------------------+----------+---------+
id                                   | name     | subnets |
+--------------------------------------+----------+---------+
| 361e6757-9d01-4daf-b098-fd50bdf2f550 | flat_net |         |
+--------------------------------------+----------+---------+

2)       创建子网

这个环节需要在浏览器上面创建了

路径:管理员à系统面板à网络à创建网络

到此,子网创建完成,接下来用demo用户创建虚拟机

4.10.7.   创建虚拟机

1)       子网已连接

2)       创建虚拟机

路径:项目àComputeà实例à启动云主机

3)       创建好的虚拟机

4)       控制台

4.11.       Cinder安装与配置

4.11.1.      Install Cinder

1
yum install openstack-cinder python-cinderclient

4.11.2.      Config Cinder

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@linux-node1 ~]# egrep '^[a-z]' /etc/cinder/cinder.conf  -n
79:rabbit_host=192.168.1.36
83:rabbit_port=5672
89:rabbit_use_ssl=false
92:rabbit_userid=guest
95:rabbit_password=guest
181:rpc_backend=rabbit
456:my_ip=192.168.1.36
459:glance_host=$my_ip
573:auth_strategy=keystone
727:debug=true
1908:connection=mysql://cinder:cinder@192.168.1.36/cinder
2013:auth_host=192.168.1.36
2017:auth_port=35357
2021:auth_protocol=http
2024:auth_uri=http://192.168.1.36:5000
2029:identity_uri=http://192.168.1.36:35357/
2033:auth_version=v2.0
2057:admin_user=cinder
2060:admin_password=cinder
2064:admin_tenant_name=service

4.11.3.      同步数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@linux-node1 ~]# cinder-manage db sync
/usr/lib64/python2.6/site-packages/Crypto/Util/number.py:57: PowmInsecureWarning: Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.
  _warn("Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning)
/usr/lib64/python2.6/site-packages/Crypto/Util/randpool.py:40: RandomPool_DeprecationWarning: This application uses RandomPool, which is BROKEN in older releases.  See http://www.pycrypto.org/randpool-broken
  RandomPool_DeprecationWarning)
[root@linux-node1 ~]# mysql -h 192.168.1.36 -u cinder -pcinder -e 'use cinder;show tables;'
+--------------------------+
| Tables_in_cinder         |
+--------------------------+
| backups                  |
| encryption               |
| iscsi_targets            |
| migrate_version          |
| quality_of_service_specs |
| quota_classes            |
| quota_usages             |
| quotas                   |
| reservations             |
| services                 |
| snapshot_metadata        |
| snapshots                |
| transfers                |
| volume_admin_metadata    |
| volume_glance_metadata   |
| volume_metadata          |
| volume_type_extra_specs  |
| volume_types             |
| volumes                  |
+--------------------------+
[root@linux-node1 ~]#

4.11.4.      Keystone注册

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
[root@linux-node1 ~]# keystone user-create --name=cinder --pass=cinder
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |                                  |
| enabled  |               True               |
|    id    | 4720f1fbef9141ac937890c9bc155a18 |
|   name   |              cinder              |
| username |              cinder              |
+----------+----------------------------------+
 [root@linux-node1 ~]# keystone user-role-add --user=cinder --tenant=service --role=admin
 [root@linux-node1 ~]# keystone service-create --name=cinder --type=volume
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |                                  |
|   enabled   |               True               |
|      id     | e7e5fdadbe874485b3225c8a833f229e |
|     name    |              cinder              |
|     type    |              volume              |
+-------------+----------------------------------+
[root@linux-node1 ~]# keystone endpoint-create --service-id=e7e5fdadbe874485b3225c8a833f229e --publicurl=http://192.168.1.36:8776/v1/%\(tenant_id\)s --internalurl=http://192.168.1.36:8776/v1/%\(tenant_id\)s --adminurl=http://192.168.1.36:8776/v1/%\(tenant_id\)s
+-------------+-------------------------------------------+
|   Property  |                   Value                   |
+-------------+-------------------------------------------+
|   adminurl  | http://192.168.1.36:8776/v1/%(tenant_id)s |
|      id     |      a37fcb4b15fb465c9c621dcc6300e50b     |
| internalurl | http://192.168.1.36:8776/v1/%(tenant_id)s |
|  publicurl  | http://192.168.1.36:8776/v1/%(tenant_id)s |
|    region   |                 regionOne                 |
|  service_id |      e7e5fdadbe874485b3225c8a833f229e   |
+-------------+-------------------------------------------+
[root@linux-node1 ~]# keystone service-create --name=cinderv2 --type=volumev2
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |                                  |
|   enabled   |               True               |
|      id     | aee6b0eac6ed49f08fd2cebda1cb71d7 |
|     name    |             cinderv2             |
|     type    |              volume              |
+-------------+----------------------------------+
[root@linux-node1 ~]# keystone endpoint-create --service-id=aee6b0eac6ed49f08fd2cebda1cb71d7 --publicurl=http://192.168.1.36:8776/v2/%\(tenant_id\)s --internalurl=http://192.168.1.36:8776/v2/%\(tenant_id\)s --adminurl=http://192.168.1.36:8776/v2/%\(tenant_id\)s
+-------------+-------------------------------------------+
|   Property  |                   Value                   |
+-------------+-------------------------------------------+
|   adminurl  | http://192.168.1.36:8776/v2/%(tenant_id)s |
|      id     |      631c2347bab94dc294302e665e3bf1b0     |
| internalurl | http://192.168.1.36:8776/v2/%(tenant_id)s |
|  publicurl  | http://192.168.1.36:8776/v2/%(tenant_id)s |
|    region   |                 regionOne                 |
|  service_id |      aee6b0eac6ed49f08fd2cebda1cb71d7     |
+-------------+-------------------------------------------+
[root@linux-node1 ~]# keystone service-list
+----------------------------------+----------+----------+-------------+
|                id                |   name   |   type   | description |
+----------------------------------+----------+----------+-------------+
| e7e5fdadbe874485b3225c8a833f229e |  cinder  |  volume  |             |
| aee6b0eac6ed49f08fd2cebda1cb71d7 | cinderv2 |  volume  |             |
| 89da282fa357437da7a5332c48639250 |  glance  |  image   |             |
| cd2980e8eda84663b582f09f84b10d6b | keystone | identity |             |
| 23decaf91e5f4d50a476c0262e824412 | neutron  | network  |             |
| 60f89869d00b4a9e83ca90b85652b794 |   nova   | compute  |             |
+----------------------------------+----------+----------+-------------+
[root@linux-node1 ~]# cinder service-list
+------------------+-------------------------+------+---------+-------+----------------------------+-----------------+
|      Binary      |           Host          | Zone |  Status | State |         Updated_at         | Disabled Reason |
+------------------+-------------------------+------+---------+-------+----------------------------+-----------------+
| cinder-scheduler | linux-node1.example.com | nova | enabled |   up  | 2015-05-26T11:39:47.000000 |       None      |
+------------------+-------------------------+------+---------+-------+----------------------------+-----------------+
[root@linux-node1 ~]# keystone endpoint-list
+----------------------------------+-----------+-------------------------------------------+-------------------------------------------+-------------------------------------------+----------------------------------+
|                id                |   region  |                 publicurl                 |                internalurl                |                  adminurl                 |            service_id            |
+----------------------------------+-----------+-------------------------------------------+-------------------------------------------+-------------------------------------------+----------------------------------+
| 0019741e32994fd89da183fc949b02ee | regionOne |          http://192.168.1.36:9292         |          http://192.168.1.36:9292         |          http://192.168.1.36:9292         | 89da282fa357437da7a5332c48639250 |
| 11143240307447bf8512c54ce08b3490 | regionOne | http://192.168.1.36:8774/v2/%(tenant_id)s | http://192.168.1.36:8774/v2/%(tenant_id)s | http://192.168.1.36:8774/v2/%(tenant_id)s | 60f89869d00b4a9e83ca90b85652b794 |
| 37fe671f915746c8a2d79451dc5769d1 | regionOne | http://192.168.1.36:8776/v1/%(tenant_id)s | http://192.168.1.36:8776/v1/%(tenant_id)s | http://192.168.1.36:8776/v1/%(tenant_id)s | e7e5fdadbe874485b3225c8a833f229e |
| 6172a7484ade47aaa726ccbb39933f5a | regionOne |          http://192.168.1.36:9696         |          http://192.168.1.36:9696         |          http://192.168.1.36:9696         | 23decaf91e5f4d50a476c0262e824412 |
| 6385df8ead804fbe868bef8a4917e033 | regionOne |       http://192.168.1.36:5000/v2.0       |       http://192.168.1.36:5000/v2.0       |       http://192.168.1.36:35357/v2.0      | cd2980e8eda84663b582f09f84b10d6b |
| cf2dec5e815e40949a9586354026d85d | regionOne | http://192.168.1.36:8776/v2/%(tenant_id)s | http://192.168.1.36:8776/v2/%(tenant_id)s | http://192.168.1.36:8776/v2/%(tenant_id)s | aee6b0eac6ed49f08fd2cebda1cb71d7 |
+----------------------------------+-----------+-------------------------------------------+-------------------------------------------+-------------------------------------------+----------------------------------+

4.11.5.      Start Cinder

1
2
3
4
[root@linux-node1 ~]# /etc/init.d/openstack-cinder-api start
[root@linux-node1 ~]# /etc/init.d/openstack-cinder-scheduler start
[root@linux-node1 ~]# chkconfig openstack-cinder-api on
[root@linux-node1 ~]# chkconfig openstack-cinder-scheduler  on

到此,已经能在web界面看到有“云硬盘”选项:

接下来配置云硬盘。

4.12.       Cinder安装与配置(计算节点操作)

4.12.1.      Cinder-iSCSI云硬盘

在计算节点上添加一块硬盘,大小20G。添加好硬盘后,执行以下代码。

1)       部署ISCSI环境

1
2
3
4
5
6
7
8
9
10
pvcreate /dev/sdb
vgcreate cinder-volumes /dev/sdb
vim /etc/lvm/lvm.conf
在devices{}里面添加:
filter = [ "a/sda1/""a/sdb/""r/.*/" ]
yum install -y scsi-target-utils
vim /etc/tgt/targets.conf
include /etc/cinder/volumes/*
/etc/init.d/tgtd start
chkconfig tgtd on

2)       部署Cinder环境

1
2
3
4
5
6
7
8
9
10
[root@linux-node2 ~]# yum install openstack-cinder
在控制节点上推送配置文件到计算节点
[root@linux-node1 ~]# scp /etc/cinder/cinder.conf 192.168.1.37:/etc/cinder/
回计算节点操作
[root@linux-node2 ~]# vim /etc/cinder/cinder.conf
#配置iSCSI
957 iscsi_ip_address=$my_ip
970 volume_backend_name=iSCSI-Storage
991 iscsi_helper=tgtadm
1836 volume_driver=cinder.volume.drivers.lvm.LVMISCSIDriver

启动Cinder-volume

1
2
[root@linux-node2 ~]# /etc/init.d/openstack-cinder-volume start
[root@linux-node2 ~]# chkconfig openstack-cinder-volume on

控制节点查看

1
2
3
4
5
6
7
[root@linux-node1 ~]# cinder service-list
+------------------+-------------------------+------+---------+-------+----------------------------+-----------------+
|      Binary      |           Host          | Zone |  Status | State |         Updated_at         | Disabled Reason |
+------------------+-------------------------+------+---------+-------+----------------------------+-----------------+
| cinder-scheduler | linux-node1.example.com | nova | enabled |   up  | 2015-05-27T01:27:00.000000 |       None      |
|  cinder-volume   | linux-node2.example.com | nova | enabled |   up  | 2015-05-27T01:27:04.000000 |       None      |
+------------------+-------------------------+------+---------+-------+----------------------------+-----------------+

3)       创建iSCSI存储类型

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@linux-node1 ~]# cinder type-create iSCSI
+--------------------------------------+-------+
|                  ID                  |  Name |
+--------------------------------------+-------+
| 827a0535-cde1-4e91-99ff-7eb28e35d55c | iSCSI |
+--------------------------------------+-------+
[root@linux-node1 ~]# cinder type-key iSCSI set volume_backend_name=iSCSI-Storage
[root@linux-node1 ~]# cinder type-list
+--------------------------------------+-------+
|                  ID                  |  Name |
+--------------------------------------+-------+
| 827a0535-cde1-4e91-99ff-7eb28e35d55c | iSCSI |
+--------------------------------------+-------+

4)       创建iSCSI类型云硬盘

路径:项目à Computeà云硬盘à创建云硬盘

计算节点查看创建好的云硬盘信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@linux-node2 ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/cinder-volumes/volume-151d28ab-dc56-496c-bab5-584a427b2d43
  LV Name                volume-151d28ab-dc56-496c-bab5-584a427b2d43
  VG Name                cinder-volumes
  LV UUID                YLNTlK-X7x2-qe9C-n5gU-ZhXS-qJIP-T6Ud9r
  LV Write Access        read/write
  LV Creation host, time linux-node2.example.com, 2015-05-27 09:38:30 +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     256
  Block device           253:0

4.12.2.      Cinder-NFS云硬盘(部署在控制节点)

1)       部署NFS环境

1
2
3
4
5
6
7
8
yum install  nfs-utils rpcbind
mkdir -p /data/nfs
vim /etc/exports
/data/nfs *(rw,no_root_squash)
/etc/init.d/rpcbind start
/etc/init.d/nfs start
chkconfig rpcbind on
chkconfig nfs on

2)       部署Cinder环境

1
2
3
4
5
6
7
[root@linux-node1 ~]# vim /etc/cinder/cinder.conf
970 volume_backend_name=NFS-Storage
1492 nfs_shares_config=/etc/cinder/nfs_shares
1511 nfs_mount_point_base=$state_path/mnt
1837 volume_driver=cinder.volume.drivers.nfs.NfsDriver
[root@linux-node1 ~]# vim /etc/cinder/nfs_shares
192.168.1.36:/data/nfs

重启Cinder-volume

1
[root@linux-node1 ~]# /etc/init.d/openstack-cinder-volume start

控制节点查看

1
2
3
4
5
6
7
8
[root@linux-node1 ~]# cinder service-list
+------------------+-------------------------+------+---------+-------+----------------------------+-----------------+
|      Binary      |           Host          | Zone |  Status | State |         Updated_at         | Disabled Reason |
+------------------+-------------------------+------+---------+-------+----------------------------+-----------------+
| cinder-scheduler | linux-node1.example.com | nova | enabled |   up  | 2015-05-27T01:56:11.000000 |       None      |
|  cinder-volume   | linux-node1.example.com | nova | enabled |   up  | 2015-05-27T01:56:15.000000 |       None      |
|  cinder-volume   | linux-node2.example.com | nova | enabled |   up  | 2015-05-27T01:56:16.000000 |       None      |
+------------------+-------------------------+------+---------+-------+----------------------------+-----------------+

3)       创建NFS存储类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@linux-node1 ~]# cinder type-create NFS
+--------------------------------------+------+
|                  ID                  | Name |
+--------------------------------------+------+
| 22805989-61a6-4df1-aab1-8400f9567192 | NFS  |
+--------------------------------------+------+
[root@linux-node1 ~]# cinder type-key NFS set volume_backend_name=NFS-Storage
[root@linux-node1 ~]# cinder type-list 
+--------------------------------------+-------+
|                  ID                  |  Name |
+--------------------------------------+-------+
| 22805989-61a6-4df1-aab1-8400f9567192 |  NFS  |
| 827a0535-cde1-4e91-99ff-7eb28e35d55c | iSCSI |
+--------------------------------------+-------+

4)       创建NFS类型云硬盘

路径:项目à Computeà云硬盘à创建云硬盘

查看创建的卷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@linux-node1 ~]# mount
/dev/sda3 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
192.168.1.36:/data/nfs on /var/lib/cinder/mnt/8fb94a0748814faafd91bfc1a8f54747 type nfs (rw,vers=4,addr=192.168.1.36,clientaddr=192.168.1.36)
[root@linux-node1 ~]# cd /var/lib/cinder/mnt/8fb94a0748814faafd91bfc1a8f54747
[root@linux-node1 8fb94a0748814faafd91bfc1a8f54747]# ls
volume-aad7b59a-394e-4666-a024-36c9bd787614

4.12.3.      Cinder-GlusterFS云硬盘

1)       部署GlusterFS环境

控制节点和计算节点都需要安装配置

1
2
3
4
5
6
cd /etc/yum.repos.d/
wget http://download.gluster.org/pub/gluster/glusterfs/3.6/3.6.3/CentOS/glusterfs-epel.repo
yum install glusterfs-server
/etc/init.d/glusterd start
chkconfig glusterd on
mkdir -p /data/glusterfs/exp1

创建信任存储池

1
2
3
4
5
6
#控制节点操作
[root@linux-node1 ~]# gluster peer probe linux-node2.example.com
peer probe: success.
#计算节点操作
[root@linux-node2 ~]# gluster peer probe linux-node1.example.com
peer probe: success.

创建卷(在控制节点上创建)

1
2
[root@linux-node1 ~]# gluster volume create cinder-volome01 replica 2 linux-node1.example.com:/data/glusterfs/exp1/ linux-node2.example.com:/data/glusterfs/exp1 force
volume create: cinder-volome01: success: please start the volume to access data

启动卷

1
2
[root@linux-node1 ~]# gluster vol start cinder-volome01
volume start: cinder-volome01: success

查看卷

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@linux-node1 ~]# gluster vol info
  
Volume Name: cinder-volome01
Type: Replicate
Volume ID: 91ea6fb0-1b1e-4299-ba8b-976a61cc03d8
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: linux-node1.example.com:/data/glusterfs/exp1
Brick2: linux-node2.example.com:/data/glusterfs/exp1
Options Reconfigured:
performance.readdir-ahead: on

2)       部署Cinder环境

1
2
3
4
[root@linux-node1 ~]# vim /etc/cinder/cinder.conf
1104 glusterfs_shares_config=/etc/cinder/glusterfs_shares
[root@linux-node1 ~]# vim /etc/cinder/glusterfs_shares
192.168.1.36:/cinder-volome01

3)       创建GlustaerFS和NFS并用的存储类型(同时支持多个存储的方法)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@linux-node1 ~]# vim /etc/cinder/cinder.conf
#注释掉下面几行NFS的配置:
970 #volume_backend_name=NFS-Storage
1837 #volume_driver=cinder.volume.drivers.nfs.NfsDriver
#修改并添加如下几行的配置:
578 enabled_backends=NFS_Driver,GlusterFS_Driver
#放到文件最后
[NFS_Driver]
volume_group=NFS_Driver
volume_driver=cinder.volume.drivers.nfs.NfsDriver
volume_backend_name=NFS-Storage
  
[GlusterFS_Driver]
volume_group=GlusterFS_Driver
volume_driver=cinder.volume.drivers.glusterfs.GlusterfsDriver
volume_backend_name=GlusterFS-Storage

重启Cinder-volume

1
[root@linux-node1 ~]# /etc/init.d/openstack-cinder-volume restart

4)       创建GlusterFS存储类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@linux-node1 ~]# cinder type-create GlusterFS
+--------------------------------------+-----------+
|                  ID                  |    Name   |
+--------------------------------------+-----------+
| 0672dc36-e993-4a82-861d-2e37bf4cbaa3 | GlusterFS |
+--------------------------------------+-----------+
[root@linux-node1 ~]# cinder type-key GlusterFS set volume_backend_name=GlusterFS-Storage
[root@linux-node1 ~]# cinder type-list
+--------------------------------------+-----------+
|                  ID                  |    Name   |
+--------------------------------------+-----------+
| 0672dc36-e993-4a82-861d-2e37bf4cbaa3 | GlusterFS |
| 22805989-61a6-4df1-aab1-8400f9567192 |    NFS    |
| 827a0535-cde1-4e91-99ff-7eb28e35d55c |   iSCSI   |
+--------------------------------------+-----------+

5)       创建GlusterFS类型云硬盘

学习openstack(二)的更多相关文章

  1. 零基础学习openstack【完整中级篇】及openstack资源汇总

    1.你是如何学习openstack的?2.你对openstack的组件了解多少?3.你认为openstack该如何学习? 一直想写关于openstack的方面的内容,今天终于整理完成.算是完成一桩心事 ...

  2. 学习openstack(五)

    OpenStackOpenStack介绍OpenStack是一种免费的开源平台,帮助服务提供商实现类似于亚马逊EC2和S3的基础设施服务.OpenStack当前有三个核心项目:计算(Nova),对象存 ...

  3. 学习OpenStack之(6):Neutron 深入学习之 OVS + GRE 之 Compute node 篇

    0.环境 硬件环境见上一篇博客:学习OpenStack之(5):在Mac上部署Juno版本OpenStack 四节点环境 OpenStack网络配置:一个tenant, 2个虚机 Type drive ...

  4. crawler4j 学习(二)

    crawler4j 学习(二) 实现控制器类以制定抓取的种子(seed).中间数据存储的文件夹.并发线程的数目: public class Controller { public static voi ...

  5. 从零开始学习jQuery (二) 万能的选择器

    本系列文章导航 从零开始学习jQuery (二) 万能的选择器 一.摘要 本章讲解jQuery最重要的选择器部分的知识. 有了jQuery的选择器我们几乎可以获取页面上任意的一个或一组对象, 可以明显 ...

  6. Android Animation学习(二) ApiDemos解析:基本Animators使用

    Android Animation学习(二) ApiDemos解析:基本Animatiors使用 Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.O ...

  7. 学习OpenStack之(5):在Mac上部署Juno版本OpenStack 四节点环境

    0. 前沿 经过一段时间的折腾,终于在自己的Mac上装好了Juno版本的四节点环境.这过程中,花了大量的时间,碰到了许多问题,学到不少知识,折腾过不少其实不需要折腾的东西,本文试着来对这过程做个总结. ...

  8. AspectJ基础学习之二搭建环境(转载)

    AspectJ基础学习之二搭建环境(转载) 一.下载Aspectj以及AJDT 上一章已经列出了他的官方网站,自己上去download吧.AJDT是一个eclipse插件,开发aspectj必装,他可 ...

  9. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  10. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

随机推荐

  1. “四大高手”为你的 Vue 应用程序保驾护航

    全球都在处理数字化转型的问题,飞速发展的同时也为基础设施带来了一定的压力.同时许多黑客也在不断更新升级他们的攻击技术. 如果我们的应用程序有过多漏洞,被抓按住利用,就会变成大型芭比Q现场. 这也是为何 ...

  2. 360携手HarmonyOS打造独特的“天气大师”

    做创新,首先要找到有增长趋势的流量红利,对我们来说,HarmonyOS就是绝佳的合作伙伴. --申悦 360手机助手创研产品部负责人 一.我们是谁? 我们来自360,是一支致力于孵化新业务的内部创新小 ...

  3. git命令合集

    ##快捷键 ##一. 快捷键 1. 清屏快捷键 control+L 2. vim快捷操作 * control+b 往上翻页 * Control+f 往下翻页 * shift+g 回到末尾 3. oh ...

  4. 简单认识java enum枚举

    什么是枚举 枚举是java5中新增的特性,他是一个特殊的数据类型,他的特殊性在于他既是一种类类型,又比类类型多了安全性,简洁性,便捷性.java枚举类型是功能十分强大齐全的类,功能比其他语言中的对等物 ...

  5. tep完整教程帮你突破pytest

    持续维护的教程 tep教程会随着版本更新或经验积累,持续维护在电子书中,最新的最全的内容请锁定这篇文章[最新]tep完整教程帮你突破pytest: https://dongfanger.gitee.i ...

  6. chrome浏览器添加JSON插件

    1.下载JSON-Handel插件 1) http://jsonhandle.sinaapp.com 点击下载会将json-handle 插件(crx)下载本地 2.打开Chrome浏览器地址栏输入: ...

  7. 微信小程序表单验证(WxValidate使用)

    参考博客: https://www.cnblogs.com/zhangxiaoyong/p/10166951.html https://github.com/wux-weapp/wx-extend/b ...

  8. LGP3311题解

    为什么我和同学对比了一下,发现我和他的做法差别很大啊 对于这种问题,我们把整个字符串分为两个部分:前缀顶着最高位和后缀没有顶着最高位. 我们枚举这个前缀,然后后缀通过 DP 来搞定. 不包含任何一个子 ...

  9. Xgboost的基本使用

    import xgboost as xgb from sklearn.model_selection import train_test_split import pandas as pd data ...

  10. Net6 Configuration & Options 源码分析 Part2 Options

    Net6 Configuration & Options 源码分析 Part2 Options 第二部分主要记录Options 模型 OptionsConfigurationServiceCo ...