Openstack实验笔记

Openstack实验笔记

制作人:全心全意

Openstack:提供可靠的云部署方案及良好的扩展性
Openstack简单的说就是云操作系统,或者说是云管理平台,自身并不提供云服务,只是提供部署和管理平台
架构图:
http://m.qpic.cn/psb?/V12uCjhD3ATBKt/Mf6rnJXoRGXLpebCzPTUfETy68mVidyW.VTA2AbQxE0!/b/dDUBAAAAAAAA&bo=swFuAQAAAAARB.0!&rf=viewer_4
	
	Keystone作为Openstack的核心模块,为Nova(计算),Glance(镜像),Swift(对象存储),Cinder(块存储),Neutron(网络)以及Horizon(Dashboard)提供认证服务
	Glance:openstack的镜像服务组件,主要提供了一个虚拟机镜像文件的存储、查询和检索服务,通过提供一个虚拟磁盘映像目录和存储库,为Nova的虚拟机提供镜像服务,现在有v1和v2两个版本

物理硬件配置(最低)
	控制节点:
		1-2个cpu
		8G内存
		2个网卡
	计算节点:
		2-4个cpu
		8G内存
		2个网卡
	块节点:
		1-2个cpu
		4G内存
		1个网卡
		最少2个磁盘
	对象节点:
		1-2个cpu
		4G内存
		1个网卡
		最少2个磁盘

网络拓扑图:(实验中,管理、存储和本地网络合并)
http://m.qpic.cn/psb?/V12uCjhD3ATBKt/r30ELjijnHAaYX*RMZe4vhwVNcix4zUb2pNnovlYZ7E!/b/dL8AAAAAAAAA&bo=xgKqAQAAAAADB00!&rf=viewer_4


安装
控制节点:quan		172.16.1.211	172.16.1.221
计算节点:quan1		172.16.1.212	172.16.1.222
存储节点:storage	172.16.1.213	172.16.1.223
对象存储节点1:object01	172.16.1.214	172.16.1.224
对象存储节点2:object02	172.16.1.215	172.16.1.225



准备工作:
	关闭防火墙
	关闭selinux
	关闭NetworkManager

安装ntp服务:
	yum -y install chrony(所有主机)
	修改配置文件:允许网段中的主机访问
	allow 172.16.1.0/24
	
	systemctl enable chronyd.service 
	systemctl start chronyd.service
	
	其它节点:
	vi /etc/chrony.conf
	server quan iburst
	
	#注意:使用原始的centos网络源
	yum install epel-release
	yum install centos-release-openstack-queens
	
	yum install openstack-selinux
	yum install python-openstackclient

安装数据库
	控制(quan)节点安装数据库
	yum install -y mariadb mariadb-server python2-PyMySQL
	vi /etc/my.cnf.d/openstack.cnf
	bind-address=172.16.1.211
	default-storage-engine=innodb
	innodb_file_per_table=on
	max_connections=4096
	collation-server=utf8_general_ci
	character-set-server=utf8

	启动数据库,并设置开机启动
	systemctl enable mariadb.service && systemctl start mariadb.service

	初始化数据库
	mysql_secure_installation


控制节点(quan)安装消息队列(端口:5672)
	yum install rabbitmq-server -y

	服务启动,并设置开机启动
	systemctl enable rabbitmq-server.service && systemctl start rabbitmq-server.service

	添加openstack用户
	rabbitmqctl add openstack openstack

	为openstack用户添加读写权限
	rabbitmqctl set_permissions openstack ".*" ".*" ".*"


控制节点(quan)安装memcached缓存(端口:11211)
	yum -y install memcached python-memcached

	vi /etc/sysconfig/memcached
	OPTIONS="-l 127.0.0.1,::1,quan"

	服务启动,并设置开机启动
	systemctl enable memcached.service && systemctl start memcached.service


控制节点(quan)安装etcd服务(key-value存储系统)
	yum -y install etcd

	vi /etc/etcd/etcd.conf
	#[Member]
	ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
	ETCD_LISTEN_PEER_URLS="http://quan:2380"
	ETCD_LISTEN_CLIENT_URLS="http://quan:2379"
	ETCD_NAME="quan"
	#[Clustering]
	ETCD_INITIAL_ADVERTISE_PEER_URLS="http://quan:2380"
	ETCD_ADVERTISE_CLIENT_URLS="http://quan:2379"
	ETCD_INITIAL_CLUSTER="quan=http://quan:2380"
	ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
	ETCD_INITIAL_CLUSTER_STATE="new"

	服务启动,并设置开机启动
	systemctl enable etcd.service && systemctl start etcd.service

Keystone组件
Keystone作为Openstack的核心模块,为Nova(计算),Glance(镜像),Swift(对象存储),Cinder(块存储),Neutron(网络)以及Horizon(Dashboard)提供认证服务
基本概念:
	User:用户,代表可以通过keystone进行访问的人或程序。User通过认证信息(credentials,如密码,API Keys等)进行验证。
	Tenant:租户,各个服务中的一些可以访问的资源集合。例如,在Nova中一个tenant可以是一些机器,在Swift和Glance中一个tenant可以是一些镜像存储,在Neutron中一个tenant可以是一些网络资源。Users默认的总是绑定到某些tenant上。
	Role:角色,Roles代表一组用户可以访问的资源权限,例如Nova中的虚拟机、Glance中的镜像。Users可以被添加到任意一个全局的或租户的角色中。在全局的role中,用户的role权限作用于所有的租户,即可以对所有的租户执行role规定的权限,在租户内的role中,用户仅能在当前租户内执行role规定的权限。
	Service:服务,如Nove、Glance、Swift。根据User、Tenant和Role三个概念,一个服务可以确定当前用户是否具有访问其资源的权限,但是当一个user尝试着访问其租户内的service时,他必须知道这个service是否存在以及如何访问这个service,这里通常使用一些不同的名称表示不同的服务。
	Endpoint:端点,可以理解为是一个服务暴露出的访问点
	Token:访问资源的钥匙。通过Keystone验证后的返回值,在之后与其它服务器交互中只需要携带Token值即可,每个Token都有一个有效期。
	
	各概念之间的关系
	http://m.qpic.cn/psb?/V12uCjhD3ATBKt/PJAecZuZ1C44VKDjcsKLYotu5KOz3RNZwumR07nBIug!/b/dDUBAAAAAAAA&bo=BAIsAQAAAAADBwk!&rf=viewer_4
	1、租户下,管理者一堆用户(人,或程序)
	2、每个用户都有自己的credentials(凭证)用户名+密码或者用户名+API key,或其它凭证
	3、用户在访问其他资源(计算、存储)之前,需要用自己的credential去请求keystone服务,获得验证信息(主要是Token信息)和服务信息(服务目录和它们的endpoint)
	4、用户拿着Token信息,就可以去访问资源了
	
keystone在Openstack中的工作流程图
http://m.qpic.cn/psb?/V12uCjhD3ATBKt/ptROtuhyzh7Mq3vSVz3Ut1TtGDXuBbYf*WbN8UZdWDE!/b/dLgAAAAAAAAA&bo=igIRAgAAAAADB7k!&rf=viewer_4
	
搭建keystone
	创建数据库
	mysql -uroot -popenstack
	create database keystone;
	grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'openstack';
	grant all privileges on keystone.* to 'keystone'@'%' identified by 'openstack';
	
	安装
	yum -y install openstack-keystone httpd mod_wsgi
	vi /etc/keystone/keystone.conf
	[database]
	connection = mysql+pymysql://keystone:openstack@quan/keystone	#数据库连接 用户名:密码@主机名/数据库名
	[token]
	provider=fernet
	
	初始化keystone数据库
	su -s /bin/sh -c "keystone-manage db_sync" keystone
	
	初始化femet密钥存储库
	keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
	keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
	
	创建keystone的服务端口(会在endpoint中生成数据)
	keystone-manage bootstrap --bootstrap-password openstack --bootstrap-admin-url http://quan:35357/v3/ --bootstrap_internal-url http://quan:5000/v3/ --bootstrap-public-url http://quan:5000/v3/ --bootstrap-region-id RegionOne
	
	配置http服务
	vi /etc/httpd/conf/httpd.conf
	ServerName quan
	
	创建软链接
	ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
	
	服务启动,并设置开机启动
	systemctl enable httpd.service && systemctl start httpd.service
	
	创建管理员账号
	vim admin-openrc
	export OS_USERNAME=admin
	export OS_PASSWORD=openstack
	export OS_PROJECT_NAME=admin
	export OS_USER_DOMAIN_NAME=Default
	export OS_PROJECT_DOMAIN_NAME=Default
	export OS_AUTH_URL=http://quan:35357/v3
	export OS_IDENTITY_API_VERSION=3
	
	导入管理员账号
	source admin-openrc
	
	创建域/项目/用户/和角色
	创建项目
	openstack project create --domain default --description "Service Project" service
	openstack project create --domain default --description "Demo Project" demo
	
	创建用户(demo),并指定其密码
	openstack user create --domain default --password-prompt demo
	
	创建角色(user)
	openstack role create user
	
	将demo添加的user角色中
	openstack role add --project demo --user demo user
	
	
	验证
	解除之前的环境变量
	unset OS_AUTH_URL OS_PASSWORD
	
	执行下面的命令,输入admin的密码
	openstack --os-auth-url http://quan:35357/v3 \
	--os-project-domain-name Default \
	--os-user-domain-name Default \
	--os-project-name admin \
	--os-username admin token issue
	
	执行下面的命令,输入demo用户的密码
	openstack --os-auth-url http://quan:5000/v3 \
	--os-project-domain-name Default \
	--os-user-domain-name Default \
	--os-project-name demo \
	--os-username demo token issue
	
	创建openstack客户端脚本环境
	创建管理员账号
	vim admin-openrc
	export OS_USERNAME=admin		
	export OS_PASSWORD=openstack
	export OS_PROJECT_NAME=admin	
	export OS_USER_DOMAIN_NAME=Default
	export OS_PROJECT_DOMAIN_NAME=Default
	export OS_AUTH_URL=http://quan:35357/v3
	export OS_IDENTITY_API_VERSION=3	#指定认证服务版本
	export OS_IMAGE_API_VERSION=2	#指定镜像服务版本
	
	创建demo用户账号
	vim demo-openrc
	export OS_USERNAME=demo		
	export OS_PASSWORD=openstack
	export OS_PROJECT_NAME=demo
	export OS_USER_DOMAIN_NAME=Default
	export OS_PROJECT_DOMAIN_NAME=Default
	export OS_AUTH_URL=http://quan:35357/v3
	export OS_IDENTITY_API_VERSION=3	#指定认证服务版本
	export OS_IMAGE_API_VERSION=2	#指定镜像服务版本
	
	导入管理员账号
	source admin-openrc
	验证管理员
	openstack token issue
	
	导入demo用户
	source demo-openrc
	验证demo用户
	openstack token issue
	

glance组件
	Glance:openstack的镜像服务组件,主要提供了一个虚拟机镜像文件的存储、查询和检索服务,通过提供一个虚拟磁盘映像目录和存储库,为Nova的虚拟机提供镜像服务,现在有v1和v2两个版本
	
	Glance的架构图:
	http://m.qpic.cn/psb?/V12uCjhD3ATBKt/mkXPMrNM9RL.NizLwc22Vm*FHkAc2NWh9668JHk4zS0!/b/dLYAAAAAAAAA&bo=RQHZAAAAAAADB78!&rf=viewer_4
	
	镜像服务组件
	Glance-api:是一个对外的API接口,能够接受外部的API镜像请求。默认端口是9292
	glance-registry:用于存储、处理、获取Image Metadate。默认端口的9191
	glance-db:在Openstack中使用MySQL来支撑,用于存放Image Metadate。通过glance-registry保存在MySQL Database
	Image Store:用于存储镜像文件。通过Strore Backend后端存储接口来与glance-api联系。通过这个接口,glance可以从Image Store获取镜像文件再交由Nove用于创建虚拟机
	
	Glance通过Store Adapter(存储适配器)支持多种Image Store方案,支持swift、file system、s3、sheepdog、rbd、cinder等。
	
	Glance支持的Image格式
	raw:非结构化的镜像格式
	vhd:一种通用的虚拟机磁盘格式,可用于Vmware、Xen、VirtualBox等
	vmdk:Vmware的虚拟机磁盘格式
	vdi:VirtualBox、QEMU等支持的虚拟机磁盘格式
	qcow2:一种支持QEMU并且可以动态扩展的磁盘格式(默认使用)
	aki:Amazon Kernel镜像
	ari:Amazon Ramdisk镜像
	ami:Amazon虚拟机镜像
	
	Glance的访问权限
	public:公共的,可以被所有的Tenant使用
	Private:私有的/项目的,只能被Image Owner所在的Tenant使用
	Shared:共享的,一个非公共的Image可以共享给指定的Tenant,通过member-*操作来实现
	Protected:受保护的,不能被删除
	
	状态类型
	Queued:没有上传Image数据,只存有该镜像的元数据
	Saving:正在上传Image
	Active:正常状态
	Deleted/pending_delete:已删除/等待删除的Image
	Killed:Image元数据不正确,等待被删除
	
搭建glance
	创建数据库
	mysql -uroot -popenstack
	create database glance;
	grant all privileges on glance.* to 'glance'@'localhost' identified by 'openstack';
	grant all privileges on glance.* to 'glance'@'%' identified by 'openstack';
	
	创建glance用户,并在service项目中添加管理员角色
	source admin_openrc
	openstack user create --domain default --password-prompt glance  #输入其密码
	
	openstack role add --project service --user glance admin
	
	openstack user list  #可查看创建的用户
	
	创建glance服务
	openstack service create --name glance --description "OpenStack Image" image
	
	openstack endpoint create --region RegionOne image public http://quan:9292
	openstack endpoint create --region RegionOne image internal http://quan:9292
	openstack endpoint create --region RegionOne image admin http://quan:9292
	
	安装相关包并配置
	yum -y install openstack-glance
	
	vi /etc/glance/glance-api.conf
	[database]
	connection = mysql+pymysql://glance:openstack@quan/glance
	
	[keystone_authtoken]
	auth_uri=http://quan:5000
	auth-url=http://quan:35357
	memcached_servers=quan:11211
	auth_type=password
	project_domain_name=default
	user_domain_name=default
	project_name=service
	username = glance
	password = openstack
	
	[paste_deploy]
	flavor = keystone
	
	[glance_store]
	stores = file,http
	default_store = file
	filesystem_store_datadir = /var/lib/glance/images/
	
	
	vi /etc/glance/glance-registry.conf
	[database]
	connection = mysql+pymysql://glance:openstack@quan/glance
	[keystone_authtoken]
	auth_uri=http://quan:5000
	auth-url=http://quan:35357
	memcached_servers=quan:11211
	auth_type=password
	project_domain_name=default
	user_domain_name=default
	project_name=service
	username = glance
	password = openstack
	
	[paste_deploy]
	flavor = keystone
	
	初始化数据库
	su -s /bin/sh -c "glance-manage db_sync" glance
	
	服务启动,并设置开机启动
	systemctl enable openstack-glance-api.service openstack-glance-registry.service && systemctl start openstack-glance-api.service openstack-glance-registry.service
	
	验证
	source admin-openrc 
	
	下载实验镜像
	wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img
	创建镜像:
	openstack image create "cirros" --file cirros-0.3.5-x86_64-disk.img --disk-format qcow2 --container-format bare --public
	
	查看已存在的镜像
	openstack image list
	
	查看镜像的详细信息
	openstack image show (#镜像id)
	

Nova组件
	Nova:openstack中最核心的组件。openstack的其它组件归根结底是为Nova组件服务的,基于用户需求为VM提供计算资源管理
	Nova架构图:
	http://m.qpic.cn/psb?/V12uCjhD3ATBKt/bKTJmZis5k..ds6fjUYXv8KDu9EzeaB4WYyV883uAq8!/b/dL8AAAAAAAAA&bo=*QE1AQAAAAADB.o!&rf=viewer_4
	
	目前的Nova主要由API、Compute、Conductor、Scheduler四个核心服务组成,它们之间通过AMQP通信,API是进入Nova的HTTP接口。Compute是VMM(虚拟机管理器)交互来运行虚拟机并管理虚拟机的生命周期(通常一个主机一个Compute服务)。Scheduler从可用池中选择最合适的节点来创建虚拟机实例。Conductor主要用于和数据库进行交互。
	
	Nova逻辑模块
	Nova API:HTTP服务,用于接收和处理客户端发送的HTTP请求
	Nova Cell:Nova Cell子服务的目的是为了便于实现横向扩展和大规模的部署,同时不增加数据库和RPC消息中间件的复杂度。在Nova Scheduler服务的主机调度基础上实现了区域调度
	Nova Cert:用于管理证书,为了兼容AWS,AWS提供了一整套的基础设施和应用程序服务,使得几乎所有的应用程序在云上运行。
	Nova Comput:Nova组件中最核心的服务,实现虚拟机管理的功能。实现了在计算节点上创建、启动、暂停、关闭和删除虚拟机、虚拟机在不同的计算节点间迁移、虚拟机安全控制、管理虚拟机磁盘镜像以及快照等功能。
	Nova Conductor:RPC服务,主要提供数据库查询功能,以前的openstack版本中,Nova Compute子服务中定义了许多的数据库查询方法。但是,由于Nova Compute子服务需要在每个计算节点上启动,一旦某个计算节点被攻击,就将完全获得数据库的访问权限。有了Nova Compute子服务之后,便可在其中实现数据库访问权限的控制
	Nova Scheduler:Nova调度子服务。当客户端向Nova服务器发起创建虚拟机的请求时,决定将虚拟机创建在哪个节点上。
	
	Nova Console、Nova Consoleauth、Nova VNCProxy,Nova控制台子服务。功能是实现客户端通过代理服务器远程访问虚拟机实例的控制界面。
	
	nova启动虚拟机的过程图:
	http://m.qpic.cn/psb?/V12uCjhD3ATBKt/iy2efxOLLowl3RvoIcZ6d7KNZ3jcdOI7zY5XroEBPVM!/b/dDQBAAAAAAAA&bo=xQJnAgAAAAADJ6A!&rf=viewer_4
	
	
	Nova Scheduler Filter的类型
	选择一个虚拟机在哪个主机运行的方式有多种,nova支持的方式主要由以下三种:
	ChanceScheduler(随机调度器):从所有nova-compute服务正常运行的节点中随机选择
	FilterScheduler(过滤调度器):根据指定的过滤条件以及权重挑选最佳节点
	CachingScheduler:FilterScheduler的一种,在FilterScheduler的基础上,将主机资源的信息存到本地的内存中,然后通过后台的定时任务从数据库中获取最新的主机资源信息。
	
	Nova Scheduler的工作流程图:
	http://m.qpic.cn/psb?/V12uCjhD3ATBKt/LpB5fYBuLUgMASXWrH*Emw5qwkWHKM7slpof.lF21DY!/b/dEYBAAAAAAAA&bo=OQODAQAAAAADB5o!&rf=viewer_4
	FilterScheduler首先使用指定的Filters(过滤器)得到符合条件的主机,比如内存小于50%,然后对得到的主机重新计算权重并且排列,获取最佳的一个。具体的Filter有以下几种:
	1)RetryFilter:重试过滤,假设Host1、Host2、Host3过滤筛选出来了,Host1权重最高,被选中,由于某些原因VM在Host1上落地失败,nova-scheduler会重新筛选新的host,Host1因为失败不会入选。可通过scheduler_max_attempts=3设置重试的次数
	2)AvalilabilityZoneFilter可选域过滤,可以提供容灾行和隔离服务,计算节点可以纳入一个创建好的AZ中,创建VM的时候可以指定AZ,这样虚拟机会落到指定的host中
	3)RamFilter:内存过滤,创建VM时会选择flavor,不满足flavor中内存要求的host会过滤掉。超量使用的设置:ram_allocation_ratio=3(如果计算节点有16G内存,那么openstack会认为有48G内存)
	4)CoreFilter:CPU core过滤,创建VM时会选择flavor,不满足flavor中core要求的host会过滤掉。CPU的超量设置:cpu_allocation_ratio=16.0(若计算节点为24core,那么openstack会认为348core)
	5)DiskFilter:磁盘容量过滤,创建VM时会选择flavor,不满足flavor中磁盘要求的host会过滤掉。Disk超量设置:disk_allocation_ratio=1.0(硬盘容量不建议调大)
	6)ComputeFilter:nova-compute服务过滤,创建VM时,若host的nova-compute服务不正常,就会被筛选掉
	7)ComputeCababilitiesFilter:根据计算节点的特性来筛选,例如x86_64
	8)ImagePropertiesFilter:根据所选的image的属性来匹配计算节点,例如希望某个image只能运行在KVM的hypervisor上,可以通过"Hypervisor Type"属性来指定。
	9)ServerGroupAntiAffinityFilter:尽量将Instance部署到不同的节点上。例如vm1,vm2,vm3,计算节点有Host1,Host2,Host3
		创建一个anti-affinity策略server group “group-1”
		nova server-group-create-policy anti-affinity group-1
		nova boot-image IMAGE_ID -flavor 1 -hint group-group1 vm1
		nova boot-image IMAGE_ID -flavor 1 -hint group-group1 vm2
		nova boot-image IMAGE_ID -flavor 1 -hint group-group1 vm3
	10)ServerGroupAffinityFilter:尽量将Instance部署到同一节点上。例如vm1,vm2,vm3,计算节点有Host1,Host2,Host3
		创建一个group-affinity策略server group “group-2”
		nova server-group-create-policy anti-affinity group-2
		nova boot-image IMAGE_ID -flavor 1 -hint group-group2 vm1
		nova boot-image IMAGE_ID -flavor 1 -hint group-group2 vm2
		nova boot-image IMAGE_ID -flavor 1 -hint group-group2 vm3
		
搭建nova组件
	搭建nova控制节点
	数据库相关操作
	mysql -uroot -popenstack
	create database nova_api;
	create database nova;
	create database nova_cell0;
	grant all privileges on nova_api.* to 'nova'@'localhost' identified by 'openstack';
	grant all privileges on nova_api.* to 'nova'@'%' identified by 'openstack';
	grant all privileges on nova.* to 'nova'@'localhost' identified by 'openstack';
	grant all privileges on nova.* to 'nova'@'%' identified by 'openstack';
	grant all privileges on nova_cell0.* to 'nova'@'localhost' identified by 'openstack';
	grant all privileges on nova_cell0.* to 'nova'@'%' identified by 'openstack';
	
	创建nova用户,并在service项目中添加管理员角色
	source admin-openrc
	
	openstack user create --domain default --password-prompt nova	#创建nova用户
	
	openstack role --project service --user nova admin	#将nova用户加入到service项目管理员角色
	
	创建nova服务及端口
	openstack service create --name nova --description "OpenStack Compute" conpute
	
	openstack endpoint create --region RegionOne compute public http://quan:8774/v2.1
	openstack endpoint create --region RegionOne compute internal http://quan:8774/v2.1
	openstack endpoint create --region RegionOne compute admin http://quan:8774/v2.1
	
	创建placement用户,并在service项目中添加管理员角色
	source admin-openrc
	
	openstack user create --domain default --password-prompt placement	#创建placement用户
	
	openstack role --project service --user placement admin	#将placement用户加入到service项目管理员角色

	创建placement服务及端口
	openstack service create --name placement --description "Placement API" placement
	
	openstack endpoint create --region RegionOne placement public http://quan:8778
	openstack endpoint create --region RegionOne placement internal http://quan:8778
	openstack endpoint create --region RegionOne placement admin http://quan:8778

	
	删除端口的方法:
	查看端口:
		openstack endpoint list | grep placement
	根据id删除端口
		openstack endpoint delete 端口id
	
	
	安装相关包,并配置
	yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api
	
	vi /etc/nova/nova.conf
	[DEFAULT]
	enabled_apis = osapi_compute,metadata
	transport_url = rabbit://openstack:openstack@quan
	my_ip = 172.16.1.221
	use_neutron = True
	firewall_driver = nova.virt.firewall.NoopFirewallDriver
	
	[api_database]
	connection = mysql+pymysql://nova:openstack@quan/nova_api
	
	[database]
	connection = mysql+pymysql://nova:openstack@quan/nova

	[api]
	auth_strategy = keystone
	
	[keystone_authtoken]
	auth_uri = http://quan:5000
	auth_url = http://quan:35357
	memcached_servers = quan:11211
	auth_type = password
	project_domain_name = default
	user_domain_name = default
	project_name = service
	username = nova
	password = openstack
	
	[vnc]
	enabled = true
	vncserver_listen = 172.16.1.221
	vncserver_proxyclient_address = 172.16.1.221
	
	[glance]
	api_servers = http://quan:9292
	
	[oslo_concurrency]
	lock_path = /var/lib/nova/tmp
	
	[placement]
	os_region_name = RegionOne
	project_domain_name = Default
	project_name = service
	auth_type = password
	user_domain_name = Default
	auth_url = http://quan:35357/v3
	username = placement
	password = openstack
	
	
	vim /etc/httpd/conf.d/00-nova-placement-api.conf		#添加至末尾
	<Directory /usr/bin>
		<IfVersion >= 2.4>
			Require all granted
		</IfVersion>
		<IfVersion < 2.4>
			Order allow,deny
			Allow from all
		</IfVersion>
	</Directory>
	
	重启httpd服务
	systemctl restart httpd
	
	修改配置文件(解决初始化nova_api数据库表结构的bug)
	vi /usr/lib/python2.7/site-packages/oslo_db/sqlalchemy/enginefacade.py
	在175行中加入"use_tpool"
	
	初始化nova_api数据库表结构
	su -s /bin/sh -c "nova-manage api_db sync" nova
	
	注册cell0数据库
	su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
	
	创建cell1
	su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell --verbose" nova
	
	初始化nova数据库
	su -s /bin/sh -c "nova-manage db sync" nova
	
	验证cell0和cell1是否注册
	nova-manage cell_v2 list_cells
	
	服务启动,并设置开机启动
	systemctl enable openstack-nova-api openstack-nova-consoleauth openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
	systemctl start openstack-nova-api openstack-nova-consoleauth openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
	
	验证
	openstack compute service list
	
	
	搭建nova计算节点
	安装相关包并配置
	yum -y install openstack-nova-compute
	
	vim /etc/nova/nova.conf
	[DEFAULT]
	enabled_apis = osapi_compute,metadata
	transport_url = rabbit://openstack:openstack@quan
	my_ip = 172.16.1.222
	use_neutron = True
	firewall_driver = nova.virt.firewall.NoopFirewallDriver
	
	[api]
	auth_strategy = keystone
	
	[keystone_authtoken]
	auth_uri = http://quan:5000
	auth_url = http://quan:35357
	memcached_servers = quan:11211
	auth_type = password
	project_domain_name = default
	user_domain_name = default
	project_name = service
	username = nova
	password = openstack
	
	[vnc]
	enabled = True
	vncserver_listen = 0.0.0.0
	vncserver_proxyclient_address = 172.16.1.222
	novncproxy_base_url = http://172.16.1.221:6080/vnc_auto.html
	
	[glance]
	api_servers = http://quan:9292
	
	[oslo_concurrency]
	lock_path = /var/lib/nova/tmp
	
	[placement]
	os_region_name = RegionOne
	project_domain_name = Default
	project_name = service
	auth_type = password
	user_domain_name = Default
	auth_url = http://quan:35357/v3
	username = placement
	password = openstack
	
	查看机器是否支持虚拟化
	egrep -c '(vmx|svm)' /proc/cpuinfo
	若返回0,修改/etc/nova/nova.conf
	vi /etc/nova/nova.conf
	[libvirt]
	virt_type = qemu
	
	服务启动,并设置开机启动
	systemctl enable libvirt openstack-nova-compute && systemctl start libvirt openstack-nova-compute
	
	
	将compute节点添加到cell数据库(控制节点操作)
	source admin-openrc
	openstack compute service list --service nova-compute
	su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
	
	vi /etc/nova/nova.conf
	[scheduler]
	discover_hosts_in_cells_interval = 300
	
	验证
	source admin-openrc
	openstack compute service list
	openstack catalog list
	openstack image list
	nova-status upgrade check
	
	
neutron组件
	Neutron是Openstack中的一个项目,在各接口设备之间提供网络服务,而且受其它openstack服务管理,如Nova。Neutron为openstack云提供了更灵活的划分物理网络,在多租户的环境下提供给每个租户独立的网络环境。另外,Neutron提供API来实现这种目标。Neutron中的“网络”是一个可以被用户创建的对象,如果要和物理环境下的概念映射的话,这个对象相当于一个巨大的交换机,可以拥有无限多个动态可创建和销毁的虚拟端口。
	
	Neutron提供的网络虚拟化能力有:
	(1)二层到七层网络的虚拟化:L2(virtual switch)、L3(virtual Router和LB)、L4-L7(virtual Firewall)等
	(2)网络连通性:二层网络和三层网络
	(3)租户隔离性
	(4)网络安全性
	(5)网络扩展性
	(6)REST API
	(7)跟高级的服务:如LBaas
	
	Neutron的架构图:
	http://m.qpic.cn/psb?/V12uCjhD3ATBKt/Ei6CaKeBs.55JXz9GIW8xuGBeMGe*rVaB*3D3cGQDsY!/b/dFIBAAAAAAAA&bo=vQLoAQAAAAADB3Q!&rf=viewer_4
	总的来说,创建一个Neutron网络的过程如下:
	1、管理员拿到一组可在互联网上寻址的IP地址,并且创建一个外部网络和子网
	2、租户创建一个网络和子网
	3、租户创建一个路由器并且连接租户子网和外部网络
	4、租户创建虚拟机
	
	Neutron中的各种概念
	network:network是一个隔离的二层广播域。Neutron支持多种类型的network,包括local,flat,VLAN,VxLAN和GRE
		local:local网络与其它网络和节点隔离。local网络中的instance只能与同一节点上同一网络的instance通信,local网络主要用于单机测试
		flat:flat网络是无vlan tagging的网络。flat网络中的instance能与位于同一网络的instance通信,并且可以跨多个节点。
		vlan:vlan网络是具有802.1q tagging的网络。vlan是一个二层的广播域,同一vlan中的instance可以通信,不同vlan只能通过router通信。vlan网络可以跨节点,是应用最广泛的网络类型
		vxlan:vxlan是基于隧道技术的overlay网络。vxlan网络通过唯一的segmentation ID(也叫VNI)与其它vxlan网络区分。vxlan中数据包会通过VNI封装成UDP包进行传输。因为二层的包通过封装在三层传输,能够克服vlan和物理网络基础设施的限制。
		gre:gre是vxlan类似的一种overlay网络。主要区别在于使用IP包而非UDP进行封装。不同network之间在二层上是隔离的。
		
		network必须属于某个Project(Tenant租户),Project中可以创建多个network。network与Project之间是1对多的关系
	subnet:subject是一个IPv4或者IPv6地址段。instance的IP从subnet中分配。每个subnet需要定义IP地址的范围和掩码。
		subnet与network是1对多的关系。一个subnet只能属于某个network;一个network可以有多个subnet,这些subnet可以是不同的IP段,但不能重叠。
			例:有效的配置
				network A
					subnet A-a:10.10.1.0/24 {"start":"10.10.1.1","end":"10.10.1.50"}
					subnet A-b:10.10.2.0/24 {"start":"10.10.2.1","end":"10.10.2.50"}
				无效的配置(因为subnet有重叠)
				network A
					subnet A-a:10.10.1.0/24 {"start":"10.10.1.1","end":"10.10.1.50"}
					subnet A-b:10.10.1.0/24 {"start":"10.10.1.51","end":"10.10.1.100"}
			注:这里判断的不是IP地址是否重叠,而是子网是否重叠(10.10.1.0/24)
	port:port可以看做是虚拟交换机上的一个端口,port上定义了MAC地址和IP地址,当instance的虚拟网卡VIF(Virtual Interface)绑定到port时,port会将MAC和IP分配给VIF。port与subnet是1对多的关系。一个port必须属于某个subnet,一个subnet可以有多个port。
			
	
	Neutron中的Plugin和agent
	http://m.qpic.cn/psb?/V12uCjhD3ATBKt/Gm3J*.Vh27nLny6oXfuZlh.yXNYx.YE3I*Mwoea.MH4!/b/dL4AAAAAAAAA&bo=pAKJAQAAAAADBww!&rf=viewer_4
	
搭建neutron

	linuxbridge+vxlan模式
	
	控制节点:
	数据库相关操作
	mysql -uroot -popenstack
	create database neutron;
	grant all privileges on neutron.* to 'neutron'@'localhost' identified by 'openstack';
	grant all privileges on neutron.* to 'neutron'@'%' identified by 'openstack';
	
	创建neutron用户,并在service项目中添加管理员角色
	source admin_openrc
	
	openstack user create --domain default --password-prompt neutron
	
	openstack role add --project service --user neutron admin
	
	创建网络服务及端口
	openstack service create --name neutron --description "Openstack Networking" network
	
	openstack endpoint create --region RegionOne network public http://quan:9696
	openstack endpoint create --region RegionOne network internal http://quan:9696
	openstack endpoint create --region RegionOne network admin http://quan:9696
	
	安装相关包并配置
	yum -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
	
	vi /etc/neutron/neutron.conf
	[database]
	connection = mysql+pymysql://neutron:openstack@quan/neutron
	
	[DEFAULT]
	core_plugin=ml2
	service_plugins = router
	allow_overlapping_ips = true
	
	transport_url = rabbit://openstack:openstack@quan
	
	auth_strategy = keystone
	
	notify_nova_on_port_status_changes = true
	notify_nova_on_port_data_changes = true
	
	[keystone_authtoken]
	auth_uri = http://quan:5000
	auth_url = http://quan:35357
	memcached_servers = quan:11211
	auth_type = password
	project_domain_name = default
	user_domain_name = default
	project_name = service
	username = neutron
	password = openstack
	
	[nova]
	auth_url = http://quan:35357
	auth_type = password
	project_domain_name = default
	user_domain_name = default
	region_name = RegionOne
	project_name = service
	username = nova
	password = openstack
	
	[oslo_concurrency]
	lock_path = /var/lib/neutron/tmp
	
	
	vi /etc/neutron/plugins/ml2/ml2_conf.ini
	[ml2]
	type_drivers = flat,vlan,vxlan
	
	tenant_network_types = vxlan
	
	mechanism_drivers = linuxbridge,l2population
	
	extension_drivers = port_security
	
	[ml2_type_flat]
	flat_networks = provider
	
	[ml2_type_vxlan]
	vni_ranges = 1:1000
	
	[securitygroup]
	enable_ipset = true
	
	vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
	[linux_bridge]
	physical_interface_mappings = provider:ens34			#外部网卡设备
	
	[vxlan]
	enable_vxlan = true
	local_ip = 172.16.1.221
	l2_population = true
	
	[securitygroup]
	enable_security_group = true
	firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
	
	确认操作系统内核支持桥接
	echo "net.bridge.vridge-nf-call-iptables = 1" >> /etc/sysctl.conf
	echo "net.bridge.vridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
	sysctl -p  #若出现“No such file or directory”错误,执行下面的操作
		modinfo by_netfilter  #查看内核模块信息
		modprobe by_netfilter	#加载内核模块
		再次执行sysctl -p
	
	vi /etc/neutron/l3_agent.ini
	[DEFAULT]
	interface_driver = linuxbridge
	
	
	vi /etc/neutron/dhcp.agent.ini
	[DEFAULT]
	interface_driver = linuxbridge
	dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
	enable_isolated_metadata = true
	
	
	vi /etc/neutron/metadata_agent.ini
	[DEFAULT]
	nova_metadata_host = 172.16.1.221
	metadata_proxy_shared_secret = openstack
	
	
	vi /etc/nova/nova.conf
	[neutron]
	url = http://quan:9696
	auth_url = http://quan:35357
	auth_type = password
	project_domain_name = default
	user_domain_name = default
	region_name = RegionOne
	project_name = service
	username = neutron
	password = openstack
	service_metadata_proxy = true
	metadata_proxy_shared_secret = openstack
	
	
	#ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
	
	初始化neutron数据库
	su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugin/ml2/ml2_conf.ini upgrade head" neutron
	
	重启nova服务
	systemctl restart openstack-nova-api
	
	服务启动,并设置开机启动
	systemctl enable neutron-server neutron-linuxbridge neutron-dhcp-agent neutron-metadata-agent
	systemctl start neutron-server neutron-linuxbridge neutron-dhcp-agent neutron-metadata-agent
	
	systemctl enable neutron-l3-agent && systemctl start neutron-l3-agent
	
	
	计算节点:
	安装相关包并配置
	yum -y install openstack-neutron-linuxbridge ebtables ipset
	
	vi /etc/neutron/neutron.conf
	[DEFAULT]
	transport_url = rabbit://openstack:openstack@quan
	
	auth_strategy = keystone
	
	[keystone_authtoken]
	auth_uri = http://quan:5000
	auth_url = http://quan:35357
	memcached_servers = quan:11211
	auth_type = password
	project_domain_name = default
	user_domain_name = default
	project_name = service
	username = neutron
	password = openstack
	
	[oslo_concurrency]
	lock_path = /var/lib/neutron/tmp
	
	
	vi /etc/neutron/plugin/ml2/linuxbridge_agent.ini
	[linux_bridge]
	physical_interface_mappings = provider:ens34
	
	[vxlan]
	enable_vxlan = true
	local_ip = 172.16.1.222
	l2_population = true
	
	[securitygroup]
	enable_security_group = true
	firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
	
	
	vi /etc/nova/nova.conf
	[neutron]
	url = http://quan:9696
	auth_url = http://quan:35357
	auth_type = password
	project_domain_name = default
	user_domain_name = default
	region_name = RegionOne
	project_name = service
	username = neutron
	password = openstack
	
	重启nova-compute服务
	systemctl restart openstack-nova-compute
	
	服务启动,并设置开机启动
	systemctl enable neutron-linuxbridge-agent && systemctl strat neutron-linuxbridge-agent
	
	验证(控制节点)
	source admin-openrc
	openstack extension list --network
	openstack network agent list
	

horizon组件
	horizon:UI界面 (Dashboard)。OpenStack中各种服务的Web管理门户,用于简化用户对服务的操作

搭建horizon
	安装相关包并配置
	yum -y install openstack-dashboard
	
	vim /etc/openstack-dashboard/local_settings
	OPENSTACK_HOST = "quan"
	ALLOWED_HOSTS = ['*']
	
	SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
	
	CACHES = {
		'default':{
			'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',
			'LOCATION':'quan:11211',
		}
	}
	#注释掉其它的cache
	
	OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" %OPENSTACK_HOST
	OPENSTACK_kEYSTONE_MULTIDOMAIN_SUPPORT = True
	
	OPENSTACK_API_VERSIONS = {
		"identity":3,
		"image":2,
		"volume":2,	
	}
	OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
	OPENSTACK_KEYSTONE_DEFAULT_ROLE= 'user'
	
	OPENSTACK_NEUTRON_NETWORK = {
		...
		'enable_quotas':True,
		'enable_distributed_router':True,
		'enable_ha_router':True,
		'enable_lb':True,
		'enable_firewall':True,
		'enable_vpn':Flase,
		'enable_fip_topology_check':True,
	}
	
	TIME_ZONE = "Asia/Chongqing"
	
	
	vi /etc/httpd/conf.d/openstack-dashboard.conf
	WSGIApplicationGroup %{GLOBAL}
	
	重启相关服务
	systemctl restart httpd.service memcached.service
	
	访问地址:http://172.16.1.221/dashboard/
	
	关闭domain验证
	vi /etc/openstack-dashboard/local_settings
	#OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True		#注释此行
	重启相关服务
	systemctl restart httpd.service memcached.service
	
	用户名:admin 密码:openstack
	
	
通过命令行创建一个虚拟机的实例
	创建provider网络(外部网络)
	source admin-openrc
	
	openstack network create --share --external \
	--provider-physical-network provider \
	--provider-network-type flat provider
	
	openstack network create --network provider \				#创建外部子网(和物理网络位于同一网络)
	--allocation-pool start 172.16.1.231,end 172.16.1.240 \
	--dns-nameserver 8.8.4.4 --gateway 172.16.1.1 \
	--subnet-range 172.16.1.1/24 provider
	
	创建私有网络self-services
	source demo-openrc
	
	openstack network create selfservice					#创建私有网络
	
	openstack subnet create --network selfservice \			#创建私有网络子网
	--dns-nameserver 8.8.4.4 --gateway 192.168.0.1 \
	--subnet-range 192.168.0.0/24 selfservice
	
	openstack router create router		#创建虚拟路由
	
	openstack router add subnet selfservice		#为路由添加子网
	
	openstack router set router --extemal-gateway provider		#设置路由的外部网关
	
	
	验证
	source admin-openrc
	ip netns
	openstack port list --router router
	
	ping -c 网关ip
	
	创建flavor(启动虚拟机的模板,cpu是几个,内存是多少)
	openstack flavor --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
	
	查看创建的flavor
	source demo-openrc
	openstack flavor list
	
	生成秘钥对
	source demo-openrc
	ssh-keygen -q -N ""
	openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
	openstack keypair list
	
	添加安全组规则
	openstack security group rule create --proto icmp default  #允许ping通
	openstack security group rule create --proto tcp --dst-port 22 default		#允许连接tcp22号端口
	
	查看验证
	source demo-openrc
	openstack flavor list
	openstack image list
	openstack network list
	openstack security group list
	openstack security group rule list
	
	
	启动一个实例
	创建一个虚拟机
	openstack server create --flavor m1.nano --image cirros(可以是id也可以是名称) \
	--nic net-id SELFSERVICE_NET_ID --security-group default \
	--key-name mykey selfservice-instance(虚拟机名称)
	
	查看虚拟机
	openstack server list	#查看拥有的虚拟机
	openstack server show (虚拟机id)	#查看虚拟机详细信息
	
	通过界面绑定ip
	
	查看虚拟机控制台信息
	openstack console log show (虚拟机id)
	
	
cinder组件
	cinder:提供REST_API使用户能够查询和管理volume、volume snapshot以及volume type,
			提供scheduler调度volume创建请求,合理优化存储资源的分配
			通过driver架构支持多种back-end(后端)存储方式,包括LVM,NFS,Ceph和其它诸如EMC、IBM等商业存储产品方案
	
	cinder的架构图:
	http://m.qpic.cn/psb?/V12uCjhD3ATBKt/FpuhoZP0gP2rwhfFn*1Q1BXUZlHCtEvh7xmNRgJYqiw!/b/dL8AAAAAAAAA&bo=CQIYAQAAAAARByI!&rf=viewer_4
	
	cinder包含的组件:
		cinder-api:接收API请求,调用cinder-volume执行操作
		cinder-volume:管理volume的服务,与volume provider协调工作,管理volume的生命周期。运行cinder-volume服务的节点被称作为存储节点
		cinder-scheduler:scheduler通过调度算法选择最合适的存储节点创建volume
		volume provider:数据的存储设备,为volume提供物理存储空间。cinder-volume支持多种volume provider,每种volume provider通过自己的driver与cinder-volume协调工作
		Message Queue:cinder各个子服务通过消息队列实现进程间通信和相互协作。因为有了消息队列,子服务之间实现了解耦,这种松散的结构也是分布式系统的重要特征
		Database cinder:有一些数据需要存放到数据库中,一般使用MySQL。数据库是安装在控制节点上的。
	
搭建cinder组件
	控制节点
	数据库相关操作
	mysql -uroot -popenstack
	create database cinder;
	grant all privileges on cinder.* to 'cinder'@'localhost' identified by 'openstack';
	grant all privileges on cinder.* to 'cinder'@'%' identified by 'openstack';
	
	创建cinder用户,并在service项目中添加管理员角色
	source admin_openrc
	openstack user create --domain default --password-prompt cinder
	
	openstack role add --project service --user cinder admin
	
	创建cinder服务及端口
	openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
	
	openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3
	
	openstack endpoint create --region RegionOne volumev2 public http://quan:8776/v2/%\{project_id\}s
	openstack endpoint create --region RegionOne volumev2 internal http://quan:8776/v2/%\{project_id\}s
	openstack endpoint create --region RegionOne volumev2 admin http://quan:8776/v2/%\{project_id\}s
	
	openstack endpoint create --region RegionOne volumev3 public http://quan:8776/v3/%\{project_id\}s
	openstack endpoint create --region RegionOne volumev3 internal http://quan:8776/v3/%\{project_id\}s
	openstack endpoint create --region RegionOne volumev3 admin http://quan:8776/v3/%\{project_id\}s
	
	安装相关包并配置
	yum -y install openstack-cinder
	
	vim /etc/cinder/cinder.conf
	[database]
	connection = mysql+pymysql://cinder:openstack@quan/cinder
	
	[DEFAULT]
	transport_url = rabbit://openstack:openstack@quan
	
	auth_strategy = keystone
	
	my_ip = 172.16.1.221
	
	[keystone_authtoken]
	auth_uri = http://quan:5000
	auth_url = http://quan:35357
	memcached_servers = quan:11211
	auth_type = password
	project_domain_name = default
	user_domain_name = default
	project_name = service
	username = cinder
	password = openstack
	
	[oslo_concurrency]
	lock_path = /var/lib/cinder/tmp
	
	初始化数据库
	su -s /bin/sh -c "cinder-manage db sync" cinder

	配置计算服务使用cinder
	vi /etc/nova/nova.conf
	[cinder]
	os_region_name = RegionOne
	
	计算服务重启
	systemctl restart openstack-nova-api
	
	服务启动,并设置开机启动
	systemctl enable openstack-cinder-api openstack-cinder-scheduler && systemctl start openstack-cinder-api openstack-cinder-scheduler

	验证
	openstack volume service list	#state状态为up即为启动成功
	
	
	存储节点(除系统盘外要有磁盘)
	安装相关包并配置
	yum -y install lvm2 device-mapper-persistent-data
	
	systemctl enable lvm2-lvmetad && systemctl start lvm2-lvmetad

	pvcreate /dev/sdb		#创建pv
	vgcreate cinder-volume /dev/sdb		#创建vg
	
	vi /etc/lvm/lvm.conf
	devices{"a/dev/sda/","a/dev/sdb/","r/.*/"}
	#a表示接收,r表示拒绝
	
	可通过命令lsblk查看系统安装是否使用lvm,若sda磁盘没有使用lvm可不添加"a/dev/sda/"
	
	yum -y install openstack-cinder targetcli python-keystone
	
	vi /etc/cinder/cinder.conf
	[database]
	connection = mysql+pymysql://cinder:openstack@quan/cinder
	
	[DEFAULT]
	transport_url = rabbit://openstack:openstack@quan
	
	auth_strategy = keystone
	
	my_ip = 172.16.1.223
	
	enabled_backends = lvm
	
	glance_api_servers = http://quan:9292
	
	[keystone_authtoken]
	auth_uri = http://quan:5000
	auth_url = http://quan:35357
	memcached_servers = quan:11211
	auth_type = password
	project_domain_name = default
	user_domain_name = default
	project_name = service
	username = cinder
	password = openstack
	
	[lvm]
	volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
	volume_group = cinder-volumes		#vg的名称
	iscsi_protocol = iscsi
	iscsi_helper = lioadm
	
	[oslo_concurrency]
	lock_path = /var/lib/cinder/tmp
	
	服务启动,并设置开机启动
	system enable openstack-cinder-volume target && system start openstack-cinder-volume target
	
	
	验证
	source admin-openrc
	openstack volume service list
	
	
为虚拟机分配虚拟磁盘
	命令:
		source demo-openrc
		openstack volume create --size 2 volume2	#--size指定虚拟机磁盘大小2G
		openstack volume list	#状态为available可用的
		
		openstack server add volume selfservice-instance volume2	#为虚拟机挂载磁盘
		openstack volume list	#状态为in-use
		
		可登录虚拟机通过fdisk -l 查看挂载磁盘
		
		
		
Swift组件
	swift:被称为对象存储,提供了强大的扩展性、冗余和持久性。对象存储,用于永久类型的静态数据的长期存储
	
	
搭建swift组件
	控制节点
	创建swift用户,并在service项目中添加管理员角色
	source admin-openrc
	openstack user create --domain default --password-prompt swift
	
	openstack role add --project service --user swift admin
	
	创建swift服务及端口
	openstack service create --name swift --description "OpenStack Object Stroage" object-store
	
	openstack endpoint create --region RegionOne object-store public http://quan:8080/v1/AUTH_%\{project_id\}s
	openstack endpoint create --region RegionOne object-store internal http://quan:8080/v1/AUTH_%\{project_id\}s
	openstack endpoint create --region RegionOne object-store admin http://quan:8080/v1

	安装相关包
	yum -y install openstack-swift-proxy python-swiftclient python-keystoneclient python-keystonemiddleware memcached
	
	下载swift-proxy.conf的配置文件,并配置
	curl -o /etc/swift/proxy-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/proxy-server.conf-sample?h=stable/queens
	
	vi /etc/swift/proxy-server.conf
	[DEFAULT]
	bind_port = 8080
	swift_dir = /etc/swift
	user = swift
	
	[pipeline:main]
	pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk ratelimit authtoken keystoneauth container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server

	[app:proxy-server]
	use = egg:swift#proxy
	
	account_autocreate = True
	
	[filter:keystoneauth]
	use = egg:swift#keystoneauth
	
	operator_roles = admin,user
	
	[filter:authtoken]
	paste.filter_factory = keystonemiddleware.auth_token:filter_factory
	
	www_authenticate_uri = http://quan:5000
	auth_url = http://quan:35357
	memcached_servers = quan:11211
	auth_type = password
	project_domain_id = default
	user_domain_id = default
	project_name = service
	username = swift
	password = openstack
	delay_auth_decision = True
	
	[filter:cache]
	memcache_servers = quan:11211
	
	
	存储节点(所有的)
	安装相关包
	yum install xfsprogs rsync
	
	格式化磁盘
	mkfs.xfs /dev/sdb
	mkfs.xfs /dev/sdc
	
	mkdir -p /srv/node/sdb
	mkdir -p /src/node/sdc
	
	配置自动挂载
	vi /etc/fstab
	/dev/sdb /srv/node/sdb xfs noatime,nodiratime,nobarrier,logbufs=8 0 2
	/dev/sdc /srv/node/sdc xfs noatime,nodiratime,nobarrier,logbufs=8 0 2
	
	mount /srv/node/sdb
	mount /srv/node/sdc
	或者
	mount -a
	
	vi /etc/rsyncd.conf
	uid = swift
	gid = swift
	log_file = /var/log/rsyncd.log
	
	pid_file = /var/run/rsyncd.pid
	address =  172.16.1.224      #多个节点请自行调整          
	
	[account]
	max_connections = 2
	path = /srv/node/
	read only = False
	locak file = /var/lock/account.lock
	
	[container]
	max_connections = 2
	path = /srv/node/
	read only = False
	locak file = /var/lock/container.lock
	
	[object]
	max_connections = 2
	path = /srv/node/
	read only = False
	locak file = /var/lock/object.lock
	
	服务启动,并设置开机启动
	systemctl enable rsyncd && systemctl start rsyncd
	
	安装相关包
	yum -y install openstack-swift-account openstack-swift-container openstack-swift-object
	
	下载相关配置文件,并配置
	curl -o /etc/swift/account-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/account-server.conf-sample?h=stable/queens
	curl -o /etc/swift/container-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/container-server.conf-sample?h=stable/queens
	curl -o /etc/swift/object-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/object-server.conf-sample?h=stable/queens
	
	vi /etc/swift/account-server.conf
	[DEFAULT]
	bind_ip = 172.16.1.224
	bind_prot = 6202
	user = swift
	swift_dir = /etc/swift
	devices = /srv/node
	mount_check = True
	
	[pipeline:main]
	pipeline = healthcheck recon account-server
	
	[filter:recon]
	recon_cache_path = /var/cache/swift
	
	
	vi /etc/swift/container-server.conf
	[DEFAULT]
	bind_ip = 172.16.1.224
	bind_prot = 6201
	user = swift
	swift_dir = /etc/swift
	devices = /srv/node
	mount_check = True
	
	[filter:recon]
	recon_cache_path = /var/cache/swift
	
	
	vi /etc/swift/object-server.conf
	[DEFAULT]
	bind_ip = 172.16.1.224
	bind_prot = 6200
	user = swift
	swift_dir = /etc/swift
	devices = /srv/node
	mount_check = True
	
	[pipeline:main]
	pipeline = healthcheck recon object-server
	
	[filter:recon]
	recon_cache_path = /var/cache/swift
	recon_lock_path = /var/lock
	
	修改文件权限
	chown -R swfit:swift /srv/node
	mkdir -p /var/cache/swift
	chown -R root:swift /var/cache/swift
	chmod -R 755 /var/cache/swift
	
	终止存储节点操作,上述操作全部在所有存储节点中操作
	控制节点操作
	cd /etc/swift
	swift-ring-builder account.builder create 10 3 1
	
	创建第一存储节点
	swift-ring-builder account.builder add \
	--region 1 --zone 1 --ip 172.16.1.224 --port 6202 --device sdb --weight 100
	
	swift-ring-builder account.builder add \
	--region 1 --zone 1 --ip 172.16.1.224 --port 6202 --device sdc --weight 100
	
	创建第二存储节点
	swift-ring-builder account.builder add \
	--region 1 --zone 2 --ip 172.16.1.225 --port 6202 --device sdb --weight 100
	
	swift-ring-builder account.builder add \
	--region 1 --zone 2 --ip 172.16.1.225 --port 6202 --device sdc --weight 100
	
	swift-ring-builder account.builder
	swift-ring-builder account.builder rebalance
	
	
	
	swift-ring-builder container.builder create 10 3 1
	
	创建第一存储节点
	swift-ring-builder container.builder add \
	--region 1 --zone 1 --ip 172.16.1.224 --port 6202 --device sdb --weight 100
	
	swift-ring-builder container.builder add \
	--region 1 --zone 1 --ip 172.16.1.224 --port 6202 --device sdc --weight 100
	
	创建第二存储节点
	swift-ring-builder container.builder add \
	--region 1 --zone 2 --ip 172.16.1.225 --port 6202 --device sdb --weight 100
	
	swift-ring-builder container.builder add \
	--region 1 --zone 2 --ip 172.16.1.225 --port 6202 --device sdc --weight 100
	
	swift-ring-builder container.builder
	swift-ring-builder container.builder rebalance
	
	
	swift-ring-builder object.builder create 10 3 1
	
	创建第一存储节点
	swift-ring-builder object.builder add \
	--region 1 --zone 1 --ip 172.16.1.224 --port 6202 --device sdb --weight 100
	
	swift-ring-builder object.builder add \
	--region 1 --zone 1 --ip 172.16.1.224 --port 6202 --device sdc --weight 100
	
	创建第二存储节点
	swift-ring-builder object.builder add \
	--region 1 --zone 2 --ip 172.16.1.225 --port 6202 --device sdb --weight 100
	
	swift-ring-builder object.builder add \
	--region 1 --zone 2 --ip 172.16.1.225 --port 6202 --device sdc --weight 100
	
	swift-ring-builder object.builder
	swift-ring-builder object.builder rebalance
	
	将生成文件放到对象存储节点中
	scp account.ring.gz container.ring.gz object.ring.gz object01:/etc/swift/
	scp account.ring.gz container.ring.gz object.ring.gz object02:/etc/swift/
	
	获取swift.conf配置文件
	curl -o /etc/swift/swift.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/swift.conf-sample?h=stable/queens
	
	vi /etc/swift/swift.conf
	[swift-hash]
	swift_hash_path_suffix = HASH_PATH_SUFFIX
	swift_hash_path_prefix = HASH_PATH_PREFIX
	
	[storage-policy:0]
	name = Policy-0
	default = yes
	
	
	将swift.conf配置文件分发到对象存储节点
	scp /etc/swift/swift.conf object01:/etc/swift/
	scp /etc/swift/swift.conf object02:/etc/swift/
	
	控制节点和所有对象存储节点执行
	chown -R root:swift /etc/swift
	
	控制节点
	systemctl enable openstack-swift-proxy memcached && systemctl start openstack-swift-proxy memcached
	
	对象存储节点(所有)
	systemctl enable openstack-swift-account openstack-swift-account-auditor openstack-swift-account-reaper openstack-swift-account-replicator
	systemctl start openstack-swift-account openstack-swift-account-auditor openstack-swift-account-reaper openstack-swift-account-replicator
	systemctl enable openstack-swift-container openstack-swift-container-auditor openstack-swift-container-replicator openstack-swift-container-updater
	systemctl start openstack-swift-container openstack-swift-container-auditor openstack-swift-container-replicator openstack-swift-container-updater
	systemctl enable openstack-swift-object openstack-swift-object-auditor openstack-swift-object-replicator openstack-swift-object-updater
	systemctl start openstack-swift-object openstack-swift-object-auditor openstack-swift-object-replicator openstack-swift-object-updater
	
	验证(控制节点)
	备注:首先检查/var/log/audit/audit.log,若存在selinux的信息,使得swift进程无法访问,做如下修改:
	chcon -R system_u:object_r:swift_data_t:s0 /srv/node
	
	source demo-openrc
	swift stat  #查看swift状态
	
	openstack container create container1
	openstack object create container1 FILE	#上传文件到容器中
	openstack container list	#查看所有的container(容器)
	openstack object list container1	#查看container1容器中的文件
	openstack object save container1 FILE	#从容器中下载文件
	
	

  

转载于:https://www.cnblogs.com/zhangquan-yw/p/10509017.html

一、Virtual Box的安装 1、安装Virtual Box 2、 Virtual Box网络设定 3、 安装操作系统 二、 环境预配置 1、 网路设置 2、 分别修改三个虚拟机的主机名 3、 主机地址映射配置 4、 禁用selinux 5、 CentOS6本地yum源配置 注:先加载镜像 6、 NTP安装服务 三、 本地源制作 1. Centos6.6本地base、extra源制作 2. 本地base、extra源制作 3. 本地epel、openstack源制作 4. ftp服务安装 5. 修改yum源仓库指向文件 四、 keystone安装(上) 1. 安装Mysql服务 2. 安装rabbitmq消息队列 3. 为nova,neutron,cinder.heat创建用户并授权 五、 keystone安装(下) 1. 创建库和授权 2. 创建库和授权 3. 生成PKI认证所需要的证书文件 4. 同步keystone数据库,生成keystone所需的表 5. 启动keystone服务和校验服务状态 6. 创cron任务,配置定期清理过期的token 7. keystone创建user,tenant,role和endpoint 六、 Glance安装 1. Glance的安装 2. 配置glance-api服务 3. 配置glance-registry服务 4. 启动并校验glance服务 57 七、 Nova安装 59 1. nova的安装与配置 59 2. 安装和配置nova 60 八、 Neutron安装 63 1. neutron的安装与配置 63 2.Neutron使用二层组件 66 3. 配置OVS二层插件 67 4. 配置nova支持neutron 67 5. 启动neutron-server服务 68 6. 重启nova服务和neutron联动 69 7. 重启neutron-server 69 8. controller0上校验neutron的配置 69 九、 Horizon安装 71 1. Horizon组件的安装与配置 71 十、 Compute0安装nova 74 1. nova的安装与配置(compute0-10.20.0.30) 74 2. nova的安装与配置 75 十一、 Compute0安装neutron 78 1. neutron的安装与配置(compute0) 78 十二、 Network0安装neutron 83 1. neutron的安装与配置 83 十三、 新建网络 91 1. 配置安全组规则 91 2. 新建网络 92 3 .创建云主机 99 4 .分配浮动ip 101 十四、 心得体会 107
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值