云计算概述
云计算的服务模型
- laaS(基础架构即服务)
提供底层IT基础设施服务,包括处理能力、存储空间、网络资源(比如迅雷)等 面向对象一般是IT管理人员 - PaaS (平台即服务)
把安装好开发环境的系统平台作为一-种服务通过互联网提供给用户 面向对象一般是开发人员 - SaaS (软件即服务)
直接通过互联网为用户提供软件和应用程序等服务 面向对象一般是普通用户
OpenStack概述
- NASA (美国国家航空航天局)和Rackspace共同发起
- 以Apache许可证授权的自由软件和开放源代码项目
- 为公有云及私有云的建设与管理提供软件的开源项目:
公有云是所有人都能用 私有云是企业内部使用,交给阿里云或者华为云托管 专有云是企业内部使用,用的是自己的服务器搭建的 混合云是几者都有,一般银行用的多
OpenStack核心组件
- 计算服务(Compute):nova:管理实例生命周期,计算资源的单位,对Hypervisor进行屏蔽,支持多种虚拟化技术,支持横向扩展
- 网络 服务(Network):neutron:负责虚拟网络的管理 为实例创建网络的拓扑结构
- 镜像服务(Image Service):glance:提供虚拟机镜像模板的注册与管理,将做好的操纵系统拷贝为镜像模板,在创建虚拟机的时候,可支持多格式的镜像
- 身份认证服务(Identify):keystone :负责OpenStack内外交互,以及内部所有组件交互时的认证
- 控制面板服务(Dashboard) :horizon :用户登陆、使用的控制台界面
- 块存储服务(Block Service):cinder:负责为运行实例提供持久的块存储设备
- 对象存储服务(Object Storage):swift:提供基于云的弹性存储,支持集群单点故障
- 计量服务(Telemetry):celimitor :用于度量、监控和控制数据资源的集中来源,为用户提供记账途径
OpenStack优势
- 控制性:完全开源的平台,提供API接口,方便与第三方技术集成
- 兼容性:OpenStack兼容其他公有云,方便用户进行数据迁移
- 可扩展性:模块化设计,可以通过横向扩展,增加节点,添加资源
- 灵活性:根据自己的需要建立相应基础设施。增加集群规模
- 行业标准:众多IT领军企业已经加入到OpenStack项目中
OpenStack架构
OpenStack设计基本原则
- 按照不同的功能和通用性划分不同的项目,拆分子系统
- 按照逻辑计划、规范子系统之间的通信
- 通过分层设计整个系统架构
- 不同的功能子系统间提供统一的API接口
OpenStack逻辑框架
- 创建过程:
利用Nova服务创建虚拟机实例—>虛拟机实例采用Glance提供镜像服务—>使用Neutron为新建的虚拟机分配IP地址,并将其纳入虚拟网络中—>通过Cinder创建的卷为虚拟机挂载存储块,整个过程都在Ceilometer模块资源的监控下,Cinder产生的卷(Volume) 和Glance提供的镜像(Image) 可以通过Swift的对象存储机制进行保存。 - 主要组件
全局:Keystone(全局认证)、Ceilometer(监控、计费)、Horizon(控制台) 核心:Nove(计算)、Glance(镜像)、Neutron(网络)、Swift(块存储)、Cinder(对象存储) 支持/辅助:Ironic(裸金属)、Trove(数据库管理)、Hent(数据编排) - 逻辑架构图分为几个层次
①逻辑架构图介绍了OpenStack核心组件有哪些,全局,核心,支持组件等 ②以上的三个部分如何对接(根据公共API接口对接) ③单个核心项目内部,分为多个子功能模块,子功能模块之间用AMQP消息代理进行交互
OpenStack组建通信关系
- 基于AMQP协议通信
用于每个项目内部各个组件之间的通信 - 基于SQL通信
用于各个项目内部的通信 - 基于HTTP协议进行通信
通过各项目的API建立的通信关系,API是restful web API - 通过Native API实现通信
OpenStack个主键和第三方硬件之间的通信
OpenStack物理架构图
OpenStack网络节点
- 提供者网络
联网管理 ML2插件 Linux网络工具 Linux Bridge代理 DHCP代理 元数据代理(Metadata Agent) - 自服务网络
联网管理 ML2插件 Linux网络工具 Linux Bridge代理 三层代理(L3 Agent) DHCP代理 元数据代理(Metadata Agent)
OpenStack环境部署
1、控制节点ct CPU:双核双线程-CPU虚拟化开启 内存:8G 硬盘:300G 双网卡:VM1-(局域网)192.168.100.1 NAT-192.168.1.10 操作系统:Centos 7.6(1810)-最小化安装 2、计算节点c1 CPU:双核双线程-CPU虚拟化开启 内存:8G 硬盘:300G 双网卡:VM1(局域网)-192.168.100.2 NAT-192.168.1.11 操作系统:Centos 7.6(1810)-最小化安装 3、计算节点c2 CPU:双核双线程-CPU虚拟化开启 内存:8G 硬盘:300G 双网卡:VM1(局域网)-192.168.100.3 NAT-192.168.1.12 操作系统:Centos 7.6(1810)-最小化安装
yum -y install net-tools bash-completion vim gcc gcc-c++ make pcre pcre-devel expat-devel cmake bzip2 lrzsz
//EXPAT C语言发开库
yum -y install centos-release-openstack-train python-openstackclient openstack-selinux openstack-utils
[root@ct ~]
[root@ct ~]
server ntp.aliyun.com iburst //配置阿里云时钟服务
allow 192.168.100.0/24 //允许100网段允许
[root@ct ~]
[root@ct ~]
- 使用 chronyc sources 命令查询时间同步信息
[root@ct ~]
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 203.107.6.88 2 10 377 85 +823us[+1008us] +/- 24ms
[root@c1 ~]
server ct iburst //配置阿里云时钟服务器源
[root@c1 ~]
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* ct 3 6 377 60 -293us[ -357us] +/- 24ms
[root@ct ~]
*/2 * * * * /usr/bin/chronyc sources >>/var/log/chronyc.log
[root@c1 ~]
*/2 * * * * /usr/bin/chronyc sources >>/var/log/chronyc.log
[root@c2 ~]
*/2 * * * * /usr/bin/chronyc sources >>/var/log/chronyc.log
[root@ct ~]
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPV4_ROUTE_METRIC=90 //优先级,使得此网卡优先
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=ens33
UUID=3436e908-bbbf-4b72-8b12-2b933f807a77
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.10
NATMASK=255.255.255.0
GATEWAY=192.168.1.2
[root@ct ~]
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=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=192.168.100.1
NATMASK=255.255.255.0
计算节点c1上
[root@c1 ~]
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPV4_ROUTE_METRIC=90
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=ens33
UUID=be08df7f-9542-4495-8fb3-53a344ac10b2
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.11
NETMASK=255.255.255.0
GATEWAY=192.168.1.2
[root@c1 ~]
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=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=192.168.100.2
NETMASK=255.255.255.0
计算节点c3
[root@c2 ~]
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPV4_ROUTE_METRIC=90
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=ens33
UUID=7aab080d-d50d-4c2a-a3c2-7a92e135be2a
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.12
NETMASK=255.255.255.0
GATEWAY=192.168.1.2
[root@c2 ~]
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPV4_ROUTE_METRIC=90
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=ens33
UUID=7aab080d-d50d-4c2a-a3c2-7a92e135be2a
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.12
NETMASK=255.255.255.0
GATEWAY=192.168.1.2
[root@ct ~]
192.168.100.1 ct
192.168.100.2 c1
192.168.100.3 c2
[root@ct ~]
[root@ct ~]
[root@ct ~]
[root@ct ~]
安装mariadb
[root@ct ~]
[root@ct ~]
[root@ct ~]
[mysqld]
bind-address = 192.168.100.1 //控制节点局域网地址
default-storage-engine = innodb //默认存储引擎
innodb_file_per_table = on //每张表独立表空间文件
max_connections = 4096 //最大连接数
collation-server = utf8_general_ci //默认字符集
character-set-server = utf8
[root@ct my.cnf.d]
[root@ct my.cnf.d]
[root@ct my.cnf.d]
Enter current password for root (enter for none): //回车
OK, successfully used password, moving on...
Set root password? [Y/n] Y
New password: //设置密码
Re-enter new password: //再次输入密码
Password updated successfully!
Reloading privilege tables..
... Success!
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
安装rabbitmq
[root@ct ~]
[root@ct my.cnf.d]
Created symlink from /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service to /usr/lib/systemd/system/rabbitmq-server.service.
[root@ct my.cnf.d]
- 创建消息队列用户,用于controler和 计算节点连接rabbitmq的认证(关联)
[root@ct my.cnf.d]
Creating user "openstack"
- 配置openstack用户的操作权限(正则,配置读写权限)
[root@ct my.cnf.d]
Setting permissions for user "openstack" in vhost "/"
[root@ct my.cnf.d]
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 35618/beam.smp
tcp 0 0 192.168.100.1:42292 192.168.100.1:25672 TIME_WAIT -
tcp6 0 0 :::5672 :::* LISTEN 35618/beam.smp
[root@ct my.cnf.d]
Configured: E = explicitly enabled; e = implicitly enabled
| Status: * = running on rabbit@ct
|/
[ ] amqp_client 3.6.16
[ ] cowboy 1.0.4
[ ] cowlib 1.0.2
[ ] rabbitmq_amqp1_0 3.6.16
[ ] rabbitmq_auth_backend_ldap 3.6.16
[ ] rabbitmq_auth_mechanism_ssl 3.6.16
[ ] rabbitmq_consistent_hash_exchange 3.6.16
[ ] rabbitmq_event_exchange 3.6.16
[ ] rabbitmq_federation 3.6.16
[ ] rabbitmq_federation_management 3.6.16
[ ] rabbitmq_jms_topic_exchange 3.6.16
[ ] rabbitmq_management 3.6.16
[ ] rabbitmq_management_agent 3.6.16
[ ] rabbitmq_management_visualiser 3.6.16
[ ] rabbitmq_mqtt 3.6.16
[ ] rabbitmq_random_exchange 3.6.16
[ ] rabbitmq_recent_history_exchange 3.6.16
[ ] rabbitmq_sharding 3.6.16
[ ] rabbitmq_shovel 3.6.16
[ ] rabbitmq_shovel_management 3.6.16
[ ] rabbitmq_stomp 3.6.16
[ ] rabbitmq_top 3.6.16
[ ] rabbitmq_tracing 3.6.16
[ ] rabbitmq_trust_store 3.6.16
[ ] rabbitmq_web_dispatch 3.6.16
[ ] rabbitmq_web_mqtt 3.6.16
[ ] rabbitmq_web_mqtt_examples 3.6.16
[ ] rabbitmq_web_stomp 3.6.16
[ ] rabbitmq_web_stomp_examples 3.6.16
[ ] sockjs 0.3.4
- 开启rabbitmq的web管理界面的插件,端口为15672
[root@ct my.cnf.d]
The following plugins have been enabled:
amqp_client
cowlib
cowboy
rabbitmq_web_dispatch
rabbitmq_management_agent
rabbitmq_management
Applying plugin configuration to rabbit@ct... started 6 plugins.
[root@ct my.cnf.d]
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 35618/beam.smp
tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 35618/beam.smp
tcp 0 0 192.168.100.1:51431 192.168.100.1:25672 TIME_WAIT -
tcp 0 0 192.168.100.1:40878 192.168.100.1:25672 TIME_WAIT -
tcp6 0 0 :::5672 :::* LISTEN 35618/beam.smp
- 用web访问
安装memcached
- 安装memcached是用于存储session信息;服务身份验证机制(keystone)使用Memcached来缓存令牌 在登录openstack的dashboard时,会产生一些session信息,这些session信息会存放到memcached中
- 安装Memcached
[root@ct ~]
[root@ct ~]
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1,::1,ct"
[root@ct my.cnf.d]
[root@ct my.cnf.d]
Created symlink from /etc/systemd/system/multi-user.target.wants/memcached.service to /usr/lib/systemd/system/memcached.service.
[root@ct my.cnf.d]
[root@ct my.cnf.d]
tcp 0 0 192.168.100.1:11211 0.0.0.0:* LISTEN 37206/memcached
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 37206/memcached
tcp6 0 0 ::1:11211 :::* LISTEN 37206/memcached
安装etcd
[root@ct ~]
[root@ct etcd]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" //数据目录位置
ETCD_LISTEN_PEER_URLS="http://192.168.100.1:2380" //监听其他etcd member的url(2380端口,集群之间通讯,域名为无效值)
ETCD_LISTEN_CLIENT_URLS="http://192.168.100.1:2379" //对外提供服务的地址(2379端口,集群内部的通讯端口)
ETCD_NAME="ct" //集群中节点标识(名称)
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.100.1:2380" //该节点成员的URL地址,2380端口:用于集群之间通讯。
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.100.1:2379"
ETCD_INITIAL_CLUSTER="ct=http://192.168.100.1:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01" //集群唯一标识
ETCD_INITIAL_CLUSTER_STATE="new" //初始集群状态,new为静态,若为existing,则表示此ETCD服务将尝试加入已有的集群
若为DNS,则表示此集群将作为被加入的对象
[root@ct etcd]
Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.
[root@ct etcd]
[root@ct etcd]
tcp 0 0 192.168.100.1:2379 0.0.0.0:* LISTEN 37679/etcd
tcp 0 0 192.168.100.1:2379 192.168.100.1:37614 ESTABLISHED 37679/etcd
tcp 0 0 192.168.100.1:37614 192.168.100.1:2379 ESTABLISHED 37679/etcd
[root@ct etcd]
tcp 0 0 192.168.100.1:2380 0.0.0.0:* LISTEN 37679/etcd
|