目录
1. 云计算三种服务模型
1.1 laaS(基础架构即服务)]
提供底层IT基础设施服务,包括处理能力、存储空间、网络资源(比如迅雷)等
面向对象一般是IT管理人员
1.2 PaaS (平台即服务)
把安装好开发环境的系统平台作为一-种服务通过互联网提供给用户
面向对象一般是开发人员
1.3 SaaS (软件即服务)
直接通过互联网为用户提供软件和应用程序等服务
面向对象一般是普通用戶
比如LNMP架构,打包成SaaS服务,用户若是购买这个服务即拥有LNMP架构
2. openstack概述
OpenStack 是一系列开源工具(或开源项目)的组合,主要使用池化虚拟资源来构建和管理私有云及公共云。其中的八个项目主要负责处理核心云计算服务,包括计算、网络、存储、身份和镜像服务。还有另外十多个可选项目,用户可把它们捆绑打包,用来创建独特、可部署的云架构。
2.1 openstack优势
OpenStack 在控制性、 兼容性、 可扩展性、 灵活性方面具备有优势, 它可能成为云计算领域的行业标准。
控制性: 完全开源的平台, 模块化的设计, 提供相应的 API 接口, 方便与第三方技术集成, 从而满足自身业务需求。
兼容性: OpenStack 兼容其他公有云, 方便用户进行数据迁移
可扩展性: Openstack 采用模块化的设计, 支持主流发行版本的 Linux, 可以通过横向扩展, 增加节点、 添加资源。
灵活性: 用户可以根据自己的需要建立基础设施, 也可以轻松地为自己的群集增加规模 。
Openstack 项目采用 Apache2 许可, 意味着第三方厂家可以重新发布源代码。行业标准: 众多 IT 领军企业都加入到 OpenStack 项目, 意味着 OpenStack 在未来可能形成云计算行业标准。
2.2. openstack组件
项目名称即核心服务,都是为实例服务的;实例就是虚拟机
项目与项目直接相互隔离的,借助于API对接的方式相互关联
3. openstack架构
3.1 设计原则
按照不同的功能和通用性划分不同的项目,拆分子系统
按照逻辑计划、规范子系统之间的通信
通过分层设计整个系统架构
不同的功能子系统间提供统一的API接口
3.2 概念架构
创建过程中:
利用Nova服务创建虚拟机实例—>虛拟机实例采用Glance提供镜像服务—>使用Neutron为新建的虚拟机分配IP地址,并将其纳入虚拟网络中—>通过Cinder创建的卷为虚拟机挂载存储块,整个过程都在Ceilometer模块资源的监控下,Cinder产生的卷(Volume) 和Glance提供的镜像(Image) 可以通过Swift的对象存储机制进行保存。
主要组件
全局:Keyston(全局认证)、Ceilometer(监控、计费)、Horizon(控制台)
核心:Nove(计算)、Glance(镜像)、Neutron(网络)、Swift(块存储)、Cinder(对象存储)
支持/辅助:Ironic(裸金属)、Trove(数据库管理)、Hent(数据编排)
通过以上解析可以看到 OpenStack 云平台服务的提供主要是依靠 Nova、Glance、Cinder 和 Neutron 四个核心模块完成的,四个辅助模块 Horizen、Ceilometer、Keystone、Swift 提供的访问、监控、权限和对象存储功能。
3.3 逻辑架构
OpenStack由多种服务组成,每种服务具有独立的命名。在整个OpenStack架构中, Keystone提供认证服务,接收来自用户和服务的认证请求,并对其身份进行认证。
各个服务之间通过公用的API接口进行交互。大部分服务均包含一个API进程,用于侦听API请求,根据服务的性质选择处理请求或转发请求。服务进程之间的通讯通过消息队列实现,如AMQP。
在部署完成的云系统平台上,用户通过 Dashboard或 RestaRt方式在经 Keystone模块认证授权后,可以执行创建虚拟机服务。通过Nova模块创建虚拟机实例,Nova调用 Glance模块提供的镜像服务,然后调用 Neutron模块提供网络服务。根据需要可以选择给虚拟机増加存储卷,卷功能由 Cinder模块提供服务。整个过程在Ceilometer模块的资源监控下完成。同时 Cinder提供的 Volume和 Glance提供的镜像可以诵讨 Swift对象存储机制讲行保存
3.4 物理架构
控制节点:
顾名思义就是OpenStack中实现数据中心控制的节点,管理 OpenStack的所有服务组件,所有组件不管在哪里,都需要在控制节点上完成类似注册的工作
控制节点必须安装三种类型的软件
第一种
控制接节点上必须安装的是一些相对于 Openstack服务来说的底层的软件,这些底层的软件需要为openstock组件来提供服务,这些软件有DB软件,消息队列软件, Memorycache和Etcd等
第二种
除了底层软件之外,控制节点上必须安装三个 OpenStack的核心组件
Keystone和glance是完整的安装在控制节点上的,Nova安装了一部分,Nova的安装是为了节点上的计算服务
Glance服务是可以控制节点上剥离的,一般 Glance占用资源小。一般大家都安装在控制节点上的
控制节点是可以安装 Nova computed的,但是生产环境是不会这么干的
第三种
除了底层服务软件和核心组件之外,OpenStack还支持其他可选的组件,比如你的集群中有存储接口,那么在 OpenStack上需要安装管理存储节点和对应的服务组件等等,类似核心组件Nova的套路
网络节点:网络节点只有Neutron组件,网络节点上的neutron安装core plugin(ML2)和service plugin(L3 service),具体的 Service Plugin可以根据你的需求选择
计算节点:包含Nova部分组件和 Neutron部分组件Nova- compute.,Neutron agent
存储节点:安装存储组件的节点,一般有代表性的 Cinder(块存储)和 Swift(对象存储)
3.5 各个组件通信关系
基于AMQP协议地通信:用于每个项目内部各个组件之间地通信
基于SQL地通信:用于各个项目内部地通信
基于HTTP协议进行通信:通过各项目地API简历地通信关系
通过Native API实现通信:OpenStack各组件和第三方软硬件之间的通信
4. openstack基础环境搭建
1.1 搭建环境:
需要三台最小化安装的虚拟机:CPU:双核双线程-CPU虚拟化开启 内存:8G 硬盘:300G
双网卡:vm1 vm8(nat模式)
手动分区:/boot 300M | swap 15G | / 剩下大小都分给根
ct——vm1:192.168.52.10 vm8: 192.168.152.10
c1——vm1:192.168.52.20 vm8: 192.168.152.20
c2——vm1:192.168.52.30 vm8: 192.168.152.30
1.2 部署思路:
一、配置操作系统+OpenStack运行环境
二、配置OpenStack平台基础服务(rabbitmq、mariadb、memcache、Apache)
三、配置OpenStack keystone组件
四、配置OpenStack Glance组件
五、配置placement服务
六、配置OpenStack Nova组件
七、配置OpenStack Neutron组件
八、配置OpenStack dashboard组件
九、配置OpenStack Cinder组件
十、常用云主机操作
1.3 基础环境配置:
所有节点:使用命令hostnamectl set-hostname ct 修改好各自的名字,方便辨识
hostnamectl set-hostname ct
hostnamectl set-hostname c1
hostnamectl set-hostname c2
su
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld
setenforce 0 #核心防护
首先配置双网卡:
cd /etc/sysconfig/network-scripts
vi ifcfg-eth0 //我的第一块网卡设置的是vm1
[root@ct network-scripts]# cat ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=286a8a16-9762-4f71-8b7a-336a890d180c
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.52.10
NETMASK=255.255.255.0
vi ifcfg-eth1 //我的第二块网卡设置的是net8
[root@ct network-scripts]# cat ifcfg-eth1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV4_ROUTE_METRIC=90 #调由优先级,NAT网
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth1
UUID=e0e7c132-6d74-4f84-8d47-6d6ae32f623e
DEVICE=eth1
ONBOOT=yes
IPADDR=192.168.152.10
NETMASK=255.255.255.0
GATEWAY=192.168.152.2
DNS1=114.114.114.114
vi /etc/resolv.conf ##配置DNS(所有节点)
nameserver 114.114.114.114
vi /etc/hosts ##配置内网地址
192.168.10.100 ct
192.168.10.101 c1
192.168.10.102 c2
三台节点分别互相做免交互:
[root@ct ~]# ssh-keygen -t rsa
[root@ct ~]# ssh-copy-id ct
[root@ct ~]# ssh-copy-id c1
[root@ct ~]# ssh-copy-id c2
基础环境依赖包:
yum -y install net-tools bash-completion vim gcc gcc-c++ make pcre pcre-devel expat-devel cmake bzip2 lrzsz
yum -y install centos-release-openstack-train python-openstackclient openstack-selinux openstack-utils
#OpenStack 的 train 版本仓库源安装包,同时安装 OpenStack 客户端和 openstack-selinux 安装包;
#最好多安装几次,提示已安装并且是最新版本即可
配置时间同步:
ct同步阿里云时钟服务器,c1 c2 同步 ct,并设置周期性计划任务
[root@ct ~]# yum -y install chrony
[root@ct ~]# vim /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server ntp1.aliyun.com iburst
allow 192.168.152.0/8
[root@ct ~]# systemctl enable chronyd //永久开启时间同步服务器
[root@ct ~]# systemctl restart chronyd //重启时间同步服务器
[root@ct ~]# chronyc sources //查询时间同步信息
c1 c2:
[root@c1 ~]# yum -y install chrony
[root@c1 ~]# vim /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server ct iburst
[root@c1 ~]# systemctl enable chronyd
[root@c1 ~]# systemctl restart chronyd
crontab -e
crontab -l
*/2 * * * * /usr/bin/chronyc sources >> /var/log/chronyc.log
1.4 系统环境配置:
1. 安装配置MariaDB:
[root@ct ~]# yum -y install mariadb mariadb-server python2-PyMySQL
#ibibverbs此包用于openstack的控制端连接mysql所需要的模块,如果不安装,则无法连接数据库;此包只安装在控制端
[root@ct ~]# yum -y install libibverbs
[root@ct ~]# vim /etc/my.cnf.d/openstack.cnf
#添加MySQL子配置文件,增加如下内容
[mysqld]
bind-address = 192.168.52.10 #控制节点局域网地址,即本机
default-storage-engine = innodb #默认引擎
innodb_file_per_table = on #开启表空间
max_connections = 4096 #最大连接4096
collation-server = utf8_general_ci
character-set-server = utf8 #默认字符集
[root@ct ~]# systemctl enable mariadb #开机自启
Created symlink from /etc/systemd/system/mysql.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/mysqld.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[root@ct ~]# systemctl start mariadb #开启服务
[root@ct ~]# netstat -napt | grep 3306 # 查看端口号
tcp 0 0 192.168.52.10:3306 0.0.0.0:* LISTEN 31009/mysqld
[root@ct ~]# mysql_secure_installation #执行MariaDB 安全配置脚本
Enter current password for root (enter for none): #回车
OK, successfully used password, moving on...
Set root password? [Y/n] Y #是否需要创建密码
Remove anonymous users? [Y/n] Y #是否需要移除其他用户
... Success!
Disallow root login remotely? [Y/n] N #是否不允许root用户远程登陆
... skipping.
Remove test database and access to it? [Y/n] Y #是否删除test测试库
Reload privilege tables now? [Y/n] Y #是否现在就重载以上的配置
2.安装RabbitMQ:
所有创建虚拟机的指令,控制端都会发送到rabbitmq,计算节点监听rabbitmq
[root@ct ~]# yum -y install rabbitmq-server
#配置服务,启动RabbitMQ服务,并设置其开机启动
[root@ct ~]# systemctl start rabbitmq-server
[root@ct ~]# systemctl enable rabbitmq-server
[root@ct ~]# rabbitmqctl add_user openstack RABBIT_PASS
#创建消息队列用户,用于控制节点 和 计算节点连接rabbitmq的认证(关联)
[root@ct ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
# 配置openstack用户的操作权限(正则,配置读写权限)
[root@ct ~]# netstat -antp | grep 5672
#可查看25672和5672 两个端口(5672是Rabbitmq默认端口,25672是Rabbit的测试工具CLI的端口)
选择配置:
[root@ct ~]# rabbitmq-plugins list
#查看rabbitmq插件列表;plugins:插件
[root@ct ~]# rabbitmq-plugins enable rabbitmq_management
Plugin configuration unchanged.
Applying plugin configuration to rabbit@localhost... nothing to do.
#检查端口(25672 5672 15672)
[root@ct ~]# netstat -napt | grep 5672
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 36091/beam.smp
tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 36091/beam.smp
tcp 0 0 127.0.0.1:49088 127.0.0.1:25672 TIME_WAIT -
tcp 0 0 127.0.0.1:36564 127.0.0.1:25672 TIME_WAIT -
tcp 0 0 127.0.0.1:49383 127.0.0.1:25672 TIME_WAIT -
tcp6 0 0 :::5672 :::* LISTEN 36091/beam.smp
可访问192.168.52.10:15672;账号密码均默认为:guest
3.安装memcached:
安装memcached是用于存储session信息;服务身份验证机制(keystone)使用Memcached来缓存令牌;在登录openstack的dashboard时,会产生一些session信息,这些session信息会存放到memcached缓存中;session保持会话信息
令牌有效期是半小时
[root@ct ~]# yum install -y memcached python-memcached #安装Memcached
[root@ct ~]# vim /etc/sysconfig/memcached #修改Memcached配置文件
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1,::1,ct" #添加ct
[root@ct ~]# systemctl start memcached
[root@ct ~]# systemctl enable memcached
[root@ct ~]# netstat -nautp | grep 11211
tcp 0 0 192.168.152.10:11211 0.0.0.0:* LISTEN 37642/memcached
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 37642/memcached
tcp6 0 0 ::1:11211 :::* LISTEN 37642/memcached
[root@ct ~]#
4.安装etcd:
[root@ct ~]# yum -y install etcd #安装etcd
[root@ct ~]# vim /etc/etcd/etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#默认数据目录
ETCD_LISTEN_PEER_URLS="http://192.168.52.10:2380"
#监听其他etcd member的url(2380端口,集群之间通讯,域名为无效值)
ETCD_LISTEN_CLIENT_URLS="http://192.168.52.10:2379"
#对外提供服务的地址(2379端口,集群内部的通讯端口)
ETCD_NAME="ct"
#集群中节点标识(名称)
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.52.10:2380"
#该节点成员的URL地址,2380端口:用于集群之间通讯
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.52.10:2379"
#客户端的地址
ETCD_INITIAL_CLUSTER="ct=http://192.168.52.10:2380"
#etcd在集群中的定位
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
#集群唯一标识
ETCD_INITIAL_CLUSTER_STATE="new"
#初始集群状态,new为静态
#若为existing,则表示此ETCD服务将尝试加入已有的集群
#若为DNS,则表示此集群将作为被加入的对
[root@ct ~]# systemctl start etcd
[root@ct ~]# systemctl enable etcd
Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.
[root@ct ~]# netstat -anutp | grep 2379
tcp 0 0 192.168.52.10:2379 0.0.0.0:* LISTEN 38294/etcd
tcp 0 0 192.168.52.10:2379 192.168.52.10:42526 ESTABLISHED 38294/etcd
tcp 0 0 192.168.52.10:42526 192.168.52.10:2379 ESTABLISHED 38294/etcd
[root@ct ~]# netstat -anutp | grep 2380
tcp 0 0 192.168.52.10:2380 0.0.0.0:* LISTEN 38294/etcd
[root@ct ~]#
5.c1、c2安装OpenStack组件:
[root@c1 ~]# yum -y install centos-release-openstack-train python-openstackclient openstack-selinux openstack-utils
1.5 小结之环境部署的步骤:
①安装环境软件包
②安装了openstack-T 软件包
③网卡vm内网nat外网(外网模式需要指定route,ipvs_ route_metric=90)
④时间同步、免交互
⑤安装mariadb
⑥安装rabbitmq
①安装memcached (缓存session和token)
⑧安装etcd (去中心化分布式存储,特点是自动发现版本V3)