php从底层读取pdf文档-无需PDF函数库支持-fPDF类使用详解

一.资源下载:

Adobe Reader 6.0
Adobe 的PDF阅读器6.0版。

本文章所覆盖的技术无法使Adobe Reader 4.0及其之前的版本支持简体中文。

FPDF类

ZIP-Format: http://www.fpdf.org/en/dl.php?v=152&f=zip

TGZ-Format: http://www.fpdf.org/en/dl.php?v=152&f=tgz

一个使用PHP编写的PDF类,不需要PHP的PDF函数库,直接从底层操作。

压缩包中包括:FPDF类、使用文档、演示、创建字体程序。

授权方式:Freeware,可以任意使用、修改、发布。

FPDF扩展类

以下是FPDF的多语言扩展类:

ZIP-Format: http://www.fpdf.org/download/chinese.zip

中文(简/繁体)支持。

ZIP-Format: http://www.fpdf.org/download/japanese.zip

日本语支持。

ZIP-Format: http://www.fpdf.org/download/korean.zip

朝鲜语支持。

字体格式转换程序

ZIP-Format: http://heanet.dl.sourceforge.net/sourceforge/ttf2pt1/ttf2pt1-3.4.4.zip

TGZ-Format: http://heanet.dl.sourceforge.net/sourceforge/ttf2pt1/ttf2pt1-3.4.4.tgz

Windows-Binary: http://www.fpdf.org/fr/dl.php?id=22

“TTF2PT1”是一个将TureType(.ttf)字体转换为Type1(.afm)字体的工具。

ZIP-Format: http://heanet.dl.sourceforge.net/sourceforge/ttf2pt1/ttf2pt1-chinese-3.4.0.zip

TGZ-Format: http://heanet.dl.sourceforge.net/sourceforge/ttf2pt1/ttf2pt1-chinese-3.4.0.tgz

这是”TTF2PT1”的中文语言支持。

ZIP-Format: http://www.fpdf.org/fr/dl.php?id=34

“PFM2AFM”是一个将PFM(.pfb)字体转换为Type1(.afm)字体的工具。

下面讲的内容都将与TureType字体有关,如果想使用PFM字体就自己研究吧,应该很简单。

二.安装:

Windows
FPDF类及其扩展类:

解压缩FPDF类到C:\www\fpdf目录,然后将其扩展类中的文件复制C:\www\fpdf目录。

TTF2PT1:

将Windows二进制版解压缩到C:\ttf2pt1目录,将中文支持包中的ugb.map(或ugbk.map)复制到C:\ttf2pt1目录。

Linux/UNIX
FPDF类及其扩展类:

解压缩FPDF类到/var/html/www/fpdf目录,然后将其扩展类中的文件复制/var/html/www/fpdf目录。

TTF2PT1:

将源代码解压缩到/tmp/ttf2pt1目录。

  1. cd /tmp/ttf2pt1
  2. make
  3. make install
  4. make uninstall (卸载)

将中文支持包中的ugb.map(或ugbk.map)复制到/usr/local/ttf2pt1/map(可能是这个,其实复制到哪里无所谓。)

三.转换字体格式

Windows

1.安装字体

  1. C:\ttf2pt1\ttf2pt1.exe –a –L ugb.map+a1 C:\Windows\Fonts\FZCQJW.ttf FZCQJW

上面以方正粗倩简体为例,将会生成C:\ttf2pt1\FZCQJW.afm和C:\ttf2pt1\FZCQJW.t1a两个文件,我们需要将TTF字体(FZCQJW.ttf)和AFM字体(FZCQJW.afm)复制到C:\www\fpdf\font目录。

2.引入文件

  1. <?php
  2. require(‘./makefont/makefont.php’);
  3. MakeFont(‘./FZCQJW.ttf’, ‘./FZCQJW.afm’);
  4. ?>

将以上代码保存到C:\www\fpdf\font\makefont.php文件并运行。

将会生成FZCQJW.php和FZCQJW.z两个文件,如果.z文件不存在需要手动将FZCQJW.ttf CopyTo FZCQJW.z。

删除FZCQJW.ttf和makefont.php。

Linux/UNIX
类似Windows的方式,自己琢磨一下吧,很简单这里就不详细说了。

四.开始!创建PDF!

Windows

  1. <?php
  2. require(‘chinese.php’);
  3. $pdf=new PDF_Chinese();
  4. $pdf->AddGBFont(‘FZCQJW’, ‘方正粗倩简体’);
  5. $pdf->Open();
  6. $pdf->AddPage();
  7. $pdf->SetFont(‘FZCQJW’,”,20); $pdf->Write(10,’测试中文还有英文’);
  8. $pdf->SetFont(‘FZCQJW’,”,10); $pdf->Write(10,’ BY [方正粗倩简体]’);
  9. $pdf->SetFont(‘FZCQJW’,”,10); $pdf->Write(10,”\n中文 English”);
  10. $pdf->Output();
  11. ?>

将以上代码保存到C:\www\fpdf\test_chinese.php文件并运行,如果安装了Adobe Reader 6.0将会在浏览器中直接显示,否则可以下载后再打开。

Linux/UNIX
类似Windows的方式,很简单这里就不详细说了。

用MediaCreationTool工具下载官方原版win10系统

WIN10系统的获取
1.将下面链接复制到任意浏览器地址栏(微软官网链接,选系统,我相信官网)

https://www.microsoft.com/zh-cn/software-download/windows10/

网址界面,点击“立即下载工具”

教你打造自己的win10精简系统(超详细)
2.打开MEDIACREATIONTOOL工具

点击“接受”

教你打造自己的win10精简系统(超详细)

点击“为另一台电脑创建安装介质(U盘、DVD、或IOS文件)”,并选择“下一步”

教你打造自己的win10精简系统(超详细)

或者

根据自己的需求,选择“语言”、“版本”、“体系结构” 或者直接选择 “对这台电脑使用推荐的选项” ,然后点击“下一步”

选择“IOS文件”,“下一步”

教你打造自己的win10精简系统(超详细)

这一步会让你选择下载系统保存的位置,选择好之后点击“保存”(为了操作方便,我直接保存在桌面了)

工具开始下载win10系统

image.png

下载完成后,工具会自动创建win10系统的安装介质

创建完成之后,直接点击“完成”即可

路由器工作原理

定义

路由器(router)是互联网的枢纽,是连接英特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送数据。
作用在OSI模型的第三层,提供了路由转发两种重要机制

在这里插入图片描述
路由:路由器控制层面的工作,决定数据包从来源端到目的端所经过的路由路径(host到host至今的最佳传输路径)
在这里插入图片描述

转发:路由器数据层面的工作,将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行)
在这里插入图片描述

路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。
也就是说,将路由器某个输入端口收到的分组,按照分组要去的目的地,把该分组从路由器的某个合适的输出端口转发给下一跳的路由器。
下一跳的路由器也按照这种方法处理分组,直到该分组到达终点为止。


路由器的功能

  • 路由:收集网络拓扑信息并动态形成路由表
  • 转发:根据转发表(FIB)转发IP数据包
  • 子网间速率适配
  • 隔离子网
  • 隔离广播域
  • 指定访问规则
  • 不同类型的网络互联:路由器经常会收到以某种类型的数据链路帧封装的数据包,当转发这种数据包时,路由器可能需要将其封装为另一种类型的数据链路帧。数据链路封装取决于路由器接口的类型及其连接的介质类型。

基本工作过程

在这里插入图片描述
路由器工作在OSI模型三层(网络层)
收到数据包后根据OSI模型层层将数据包拆开,到网络层后根据IP进行路由转发
根据接口协议层层封装,实现异种网络的互联

在这里插入图片描述


路由器的结构

在这里插入图片描述
路由器内部整体分为两部分:路由选择部分、分组转发部分
路由选择部分:软件、控制层面、核心是路由选择处理机
分组转发部分:硬件、数据层面、核心是处理芯片和交换结构


报文处理路径

在这里插入图片描述
控制路径: 处理目的地址是本路由器的高层协议报文,特别是各种路由协议报
文。虽然控制路径不是路由器的关键路径,但是它负责完成路由信息的交互,从
而保证了数据路径上的报文沿着最优的路径转发

数据路径: 处理目的地址不是本路由器而需要转发的报文,因此数据路径是整个
路由器的关键路路径,它直接影响路由器的整体性能


路由表和转发表

每个路由器中都有一个路由表和FIB(Forward Information Base)表:路由表用来决策路由,FIB用来转发分组。

路由表:这里个表都用来保存路由信息,路由表通常由路由协议和路由管理模块维护,包括更多的信息(IP地址/IP子网、下一跳、路由度量、超时间等);
路由表中路由有三类:
(1)链路层协议发现的路由(即是直连路由)
(2)静态路由
(3)动态路由协议发现的路由。

转发表(FIB):是基于路由生成的,路由器实际转发时使用转发表(只包括IP地址/IP子网和下一跳/出接口);
转发表中每条转发项都指明分组到某个网段或者某个主机应该通过路由器的那个物理接口发送,然后就可以到达该路径的下一个路由器,或者不再经过别的路由器而传送到直接相连的网络中的目的主机。
高性能路由器转发表通常都用硬件来实现,有利于高速查找。

CAM、TCAM是一种特殊的存储器,无论表大小如何,都会在一个时钟周期内检索出地址

CAM:执行二元运算

  • 基于0或1匹配;所有比特都必须匹配
  • “命中”将返回结果(出接口)
  • 用于MAC地址查询
    在这里插入图片描述

TCAM:执行三元运算

  • 基于0、1或X(不关心)匹配
  • 最长匹配返回“命中”
  • 适用于并非所有值都需要精确匹配的查询(ACL或IP路由表)
    在这里插入图片描述

分组转发部分

输入端口

在这里插入图片描述

交换结构

交换结构是一台路由器的核心组件,它的作用就是根据转发表对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去

输出端口

在这里插入图片描述


路由器演化史

第一代路由器

集中转发,固定接口
在这里插入图片描述

  • X86架构,转发速率小于0.5Gb/s,接口种类少
  • 由一个中央处理器和若干网卡通过共享总线互联而成
  • 主要功能是软件实现的
  • 结构简单,容易实现,性能低
  • 性能低的原因:
  1. CPU既运行路由协议,也负责数据包的处理和转发,存在严重的处理瓶颈
  2. 主要的数据处理涉及到存储器,对其的访问速度会影响系统性能
  3. 数据移动必须两次通过总线,耗时,有时甚至超出数据包头的处理时间

第二代路由器

集中转发,模块化接口
在这里插入图片描述

  • 数据在第一次到达时生成转发表,然后将转发表从CPU下发到接口线卡缓存,一次转发多次路由
  • 路由状况不断变化的环境中,IP路由表的改变会使得转发表无效,线卡缓存需要不断从CPU中同步转发表,性能优势会受到很大限制

第三代路由器

分布式软件转发
在这里插入图片描述

  • 转发速录小于5Gb/s,处理能力强,接口种类多,配置灵活
  • 提高了线卡的处理能力,将CPU从路由转发中解放出来
  • 从板拥有自己的CPU,内存和若干网卡的独立子系统,在本地线卡进行存储和转发判断
  • 主板基本不参与路由转发操作,主要负责整个系统的管理操作和路由计算等任务,把转发表发布到各个从板上
  • 主板和从板的分布式结构大大提高了系统的整体性能

缺点:

  • 共享总线的容量直接限制了路由器的吞吐率,成为系统无法避免的瓶颈

第四代路由器

基于ASIC与交换矩阵
在这里插入图片描述

  • 转发速率小于50Gb/s,IP处理能力由质的突破,端口较丰富,端口r容量大
  • 交换结构的引入解决了总线的瓶颈,显示无阻塞交换
  • 对QOS,MPLS VPN,IPV6,组播支持能力弱
  • 引入交换结构代替原来的共享总线,提供了比共享总线高得多的带宽
  • 线卡上不采用通用CPU,而是采用ASIC实现的专用转发引擎或者是针对网络处理进行了优化的网络处理器

NP (network processor)芯片

可编程,同时对多业务硬件处理进行加速
网络芯片(NP)技术的出现是为了了适应下一代高速网络特点的需要,提供网络服务质量(QoS)控制,不断适应新的网络应用,发展新的网络管理模式以及快速响应市场对新的网络功能的需求而推出的一项新的芯片技术。它同时具有通用芯片和专用集成电路
ASIC两方面的优点,既具有ASICs线速转发报文的高速度特性同时又具有通用芯片的可编程性。
在这里插入图片描述


第五代路由器

在这里插入图片描述

  • NP与ASIC之比较 性能更高:内部集成数十个CPU及硬件协处理器、硬件加速器,在实现 复杂的拥塞管理、队列调度等QOS功能前提下,仍能保持线速转发, 实现“硬转发”;
  • 扩展更灵活:预留的用户接口可编程,扩展灵活;
  • 业务支持能力强:对新的增值业务(MPLS、QOS、组播等等)迅速支持;
  • 管理灵活,开发方便,大大缩短二次开发周期;
  • 预留IPv6接口,可通过软件平滑升级;
  • 可靠性高:芯片转产前通过严格的疲劳性测试,适合开发电信级设备。

第六代路由器

在这里插入图片描述
三级交换结构、严格意义上的无阻塞结构 第二级通常是单独的中央交换框 F1、F2、F3之间采用光纤互连(光背板) 随着分组搜索系统的日趋复杂,设计师需要采用各种各样的解决方案以满足千差万别的搜索要求。
策略略查表法(例如存取控制表(ACL)和服务质量量(QoS))需要高性能以及超群的搜索灵活性和易用性——而所有这些都需
要采用TCAM。
另一方面,转发查表(包括虚拟路由器转发(VRF)和虚拟专用网(VPN))也可以使用TCAM技术进行加速。随着网络速度的剧增,传统的解决方案已
经无法满足速度要求,这时就需要一个专门的硬件来解决这个矛盾,该硬件通常称为NSE(网络搜索引擎),TCAM其实就是一种基于CAM技术的NSE
多级交换结构是由多个交换单元互联起来的,每个交换单元具有一整套输入输出,与普通交换机类似,提供输入输出的连接。通过互联多个小的交换单元,就可以制造一个大型的、可扩展的交换结构。多级结构之间的不同取决于交换单元之间是如何互联的。
典型的结构包括Benes网、Butterfly网、Clos网等形式。 Benes网使用方形交换单元(即:输入输出端口数相同)进行多级互联。
一般来说,3级N部Benes网的每一级均可以用N个输入/输出端口和N个交换单元来构造。这个格形结构在每个输入端和每个输出端之间形成N个可能的通路。Benes输出可以扩展至任意奇数级。 虽然对于小型系统单级结构的设计相对简单,成本也相对低,但是它不能满足下一代Internet扩展的需要。
多级结构在操作上较复杂,但是可以扩展到成百上千个端口,这对于下一代
Internet核心路路由系统是绝对必要的。
在多级拓拓扑结构中,Benes结构是最佳选择,因为它的系统复杂程度最低,性能好且满足可扩展的要求。


集群路由器

在这里插入图片描述
集群路由器,路由器矩阵、多机框互联、可扩展路由器 就是将多台路由器互联起来,形成一套逻辑上一体的路由器系统或由多个可独立运行的路由节点,通过某种互连结构连接而成性能和功能可扩展的单映像路由器

可扩展性主要体现在以下3个方面:
  1. 交换实体的分布性带来的规模可扩展性;
  2. 路由实体的分布性带来的路由计算可扩展性;
  3. 路由器操作系统的分布性带来的功能可扩展性;
集群技术的产生,主要有两个直接的原因:
  1. 单机容量逐步发展到极限;
  2. 超级节点的产生使得网络结构越趋复杂,运维管理难度加大 集群路由器体系结构是解决高性能路由器所面临问题的一个有效途径,它由若干个路由器节点构成,包含了多个路由实体和交换实体 它的交换结构由多个交换结构聚合而成,具有分布式的特点,能够满足性能、规模和可扩展性的要求
  3. 它还包含了多个具有路由计算能力的控制节点,有利于路由协议和控制协议等任务的分布式实现 集群路由器体系结构被认为是符合互联网发展需要的下一代高性能路由器体系结构。

https://blog.csdn.net/santtde/article/details/86765506

OSI参考模型

先胡扯一下:
OSI模型一共是有七层框架
物理层->数据链路层->网络层->传输层->会话层->表示层->应用层。
从左到右是第一层到第七层,怎么记?
我觉得应该这样理解OSI的含义是说:开放式系统互联,指说明任意两个不同系统之间如何通信的一个理论模型,说明OSI重点是要通信,通信的目的是在不同计算机系统的数据进行共享应用(互联网说白了也就是对数据进行操作,个人理解,轻拍),所以可以知道在这OSI的七层中肯定会与数据,网络,通信,应用等相关的层次。所以第一层是最底层也就是物理层面的东西,也就是第一层->物理层,对应最高层也就是第七层->应用层。而回到两个不同系统之间如何去把彼此的数据交互?应该是是要在不同的系统之间构造出网络层来通信,但由物理层的数据到网络层之间应该要有过渡,网的构成该是由许多链路组成的,这些链路的组成是数据,所以在物理层和网络层之间该是数据链路层,把第二层->数据链路层,也就推出第三层->网络层,数据经由数据链路通过网络,那么应该是要实现在任意两个系统之间去进行传输(想想OSI的目的不就是要让数据从一个系统到另一个系统吗),所以很明显第四层->传输层。现在有了网络,也有了传输层,那么不同的两个系统之间的数据应该是可以交互了,但注意,OSI的核心点之一是不同系统之间的相互通信而不去考虑底层的架构,那么想想一个只懂英语的一猿喜欢一个只懂爪哇语的媛,他想向媛表达爱意啊,但没有什么联系方式,只能用最土的方式写小字条。他找来一张纸,写上:I LOVE YOU ,此时物理层搞定,然后猿很害羞,所以,他托二猿去给他送信(数据链路层),二猿本不想干这事,但看着一猿都快五十了,居然还没女票,所以。。。。。但走着走着想起家里在烧开水,然后托三猿去送(网络层),三猿是个好猿,二话不说就走去送了(传输层),信是送到了媛手里啊,但媛是说爪哇语的,看不到啥子叫I LOVE YOU ,所以媛拿着这封不知道是什么东西的东西去找她的邻居猫博士,猫博士一看知道了是有猿喜欢上了他邻居,好心的猫博士把信的内容翻译给媛说有只多毛的东西说要跟你生猴子(会话层),媛你怎么想,看这只猿还蛮急的,你赶紧回复下,表个态(表示层),媛说,好吧,我答应了(女程序员真的是这么好泡吗,我要学面向对象编程。。。。),时候猿和媛愉快地走在了乡间的小路上(应用层)。
这样子,是不是把七层都记住了。当然这些都是乱扯,目的是要更好的记忆七层到底是啥跟啥。。。
事实上,这七层的作用,更像是在一方面从7层到1层,对数据层次包装对数据添加不同的报文,在另一个系统则是从1层到7层层层分解,最终得到数据。
————————————————
版权声明:本文为CSDN博主「ljsnail01」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_30495361/article/details/52054496

OSI参考模型
一、OSI(Open System Interconnect)即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互联模型。该体系结构标准定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层),即ISO开放系统互连参考模型。在这一框架下进一步详细规定了每一层的功能,以实现开放系统环境中的互连性、互操作性和应用的可移植性。
二、各层功能:
1、物理层:物理层是OSI参考模型的最低层,它利用传输介质为数据链路层提供物理连接。它主要关心的是通过物理链路从一个节点向另一个节点传送比特流,物理链路可能是铜线、卫星、微波或其他的通讯媒介。物理层关心的是链路的机械、电气、功能和规程特性。
2、数据链路层:数据链路层是为网络层提供服务的,解决两个相邻结点之间的通信问题,传送的协议数据单元称为数据帧。数据帧中包含物理地址(又称MAC地址)、控制码、数据及校验码等信息。该层的主要作用是通过校验、确认和反馈重发等手段,将不可靠的物理链路转换成对网络层来说无差错的数据链路。数据链路层还要协调收发双方的数据传输速率,即进行流量控制,以防止接收方因来不及处理发送方来的高速数据而导致缓冲器溢出及线路阻塞。
3、网络层:网络层是为传输层提供服务的,传送的协议数据单元称为数据包或分组。该层的主要作用是解决如何使数据包通过各结点传送的问题,即通过路径选择算法(路由)将数据包送到目的地。为避免通信子网中出现过多的数据包而造成网络阻塞,需要对流入的数据包数量进行控制(拥塞控制)。当数据包要跨越多个通信子网才能到达目的地时,还要解决网际互连的问题。
4、传输层:传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路。传输层传送的协议数据单元称为段或报文。
5、会话层:会话层主要功能是管理和协调不同主机上各种进程之间的通信(对话),即负责建立、管理和终止应用程序之间的会话。会话层得名的原因是它很类似于两个实体间的会话概念。例如,一个交互的用户会话以登录到计算机开始,以注销结束。
6、表示层:表示层处理流经结点的数据编码的表示方式问题,以保证一个系统应用层发出的信息可被另一系统的应用层读出。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据表示格式转换成网络通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。
7、应用层:应用层是OSI参考模型的最高层,是用户与网络的接口。该层通过应用程序来完成网络用户的应用需求,如文件传输、收发电子邮件等。

ubuntu 18.04 设置静态ip方法

1. 前言

本教程将会演示如何设置Ubuntu16.04 Server版和Ubuntu18.04 Server版系统的静态固定IP地址。

2. 确认你要修改的网卡号

先确认你要修改的网卡号,假设你的服务器有多张网卡:

ubuntu1804:~$ ip addr

我的服务器配置如下:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:f1:b5:e1 brd ff:ff:ff:ff:ff:ff
inet 172.16.87.140/24 brd 172.16.87.255 scope global dynamic ens33
valid_lft 1500sec preferred_lft 1500sec
inet6 fe80::20c:29ff:fef1:b5e1/64 scope link
valid_lft forever preferred_lft forever

3. 默认的网卡配置文件

默认情况下,网络使用DHCP

ubuntu1804:~$ cat /etc/netplan/50-cloud-init.yaml
配置文件内容如下

network:
    ethernets:
        ens33:
            dhcp4: yes
            addresses: []

    version: 2

4. 设置静态IP

需要把配置文件修改为以下内容:

ubuntu1804:~$ sudo vi /etc/netplan/50-cloud-init.yaml

假设IP地址修改为192.168.1.100,子网掩码24位即255.255.255.0,网关设置为192.168.1.1,DNS1:223.5.5.5,DNS2:223.6.6.6

network:
    ethernets:
        ens33:
            dhcp4: no
            addresses: [192.168.1.100/24]
            optional: true
            gateway4: 192.168.1.1
            nameservers:
                    addresses: [223.5.5.5,223.6.6.6]

    version: 2

5. 应用新配置

ubuntu1804:~$ sudo netplan apply

使用ip addr检查新地址

ubuntu1804:~$ ip addr

6. 测试网络连通性

ubuntu1804:~$ ping 192.168.1.100

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

https://cloud.tencent.com/developer/article/1514181
此记录之

完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)–基础环境搭建

公司在IDC机房有两台很高配置的服务器,计划在上面部署openstack云平台虚拟化环境,用于承载后期开发测试和其他的一些对内业务。 以下对openstack的部署过程及其使用做一详细介绍,仅仅依据本人实际经验而述,如有不当,敬请指出~

********************************************************************************************************************************

1 OpenStack 介绍

1.1 百度百科 OpenStack 是一个由 NASA ( 美国国家航空航天局)和 Rackspace 合作研发并发起的,以 Apache 许可证授权的自由软件和开放源代码项目。

1.2 版本历史

1.3 openstack 架构概念

1.4 openstack 各个服务名称对应

***************************************************************************************************************

以下安装部署已经过测试,完全通过!

建议在物理机上部署openstack,并且是centos7或ubuntu系统下,centos6x的源里已不支持openstack部分组件下载了。

2 环境准备 openstack 主机名不能改,装的时候是什么就是什么, 运维标准化。

1、 CentOS 7.2 系统 2 台 node1 即作为控制节点,也作为计算节点;(即可以单机部署,单机部署时则下面记录的控制节点和计算节点的操作步骤都要在本机执行下) node2 就只是计算节点 控制节点去操控计算节点,计算节点上可以创建虚拟机

linux-node1.openstack   192.168.1.17 网卡 NAT em2 (外网ip假设是58.68.250.17)(em2是内网网卡,下面neutron配置文件里会设置到) linux-node2.openstack   192.168.1.8   网卡 NAT em2

控制节点:linux-node1.openstack    192.168.1.17

计算节点:linux-node2.openstack 192.168.1.8

2.域名解析和关闭防火墙 (控制节点和计算节点都做) /etc/hosts                                                         #主机名一开始设置好,后面就不能更改了,否则就会出问题!这里设置好ip与主机名的对应关系 192.168.1.17 linux-node1.openstack       192.168.1.8   linux-node2.openstack

关闭 selinux sed -i ‘s#SELINUX=enforcing#SELINUX=disabled#g’ /etc/sysconfig/selinux setenforce 0 关闭 iptables systemctl start firewalld.service systemctl stop firewalld.service systemctl disable firewalld.service

3 安装配置 OpenStack 官方文档 http://docs.openstack.org/

3.1 安装软件包

linux-node1.openstack   安装

*************************************************************************************

#Base yum install -y http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm yum install -y centos-release-openstack-liberty yum install -y python-openstackclient

##MySQL yum install -y mariadb mariadb-server MySQL-python

##RabbitMQ yum install -y rabbitmq-server

##Keystone yum install -y openstack-keystone httpd mod_wsgi memcached python-memcached

##Glance yum install -y openstack-glance python-glance python-glanceclient

##Nova yum install -y openstack-nova-api openstack-nova-cert openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler python-novaclient

##Neutron linux-node1.example.com yum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge python-neutronclient ebtables ipset

##Dashboard yum install -y openstack-dashboard

##Cinder yum install -y openstack-cinder python-cinderclient

*************************************************************************************

linux-node2.openstack   安装

##Base yum install -y http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm yum install centos-release-openstack-liberty yum install python-openstackclient

##Nova linux-node2.openstack yum install -y openstack-nova-compute sysfsutils

##Neutron linux-node2.openstack yum install -y openstack-neutron openstack-neutron-linuxbridge ebtables ipset

##Cinder yum install -y openstack-cinder python-cinderclient targetcli python-oslo-policy

*************************************************************************************

3.2 设置时间同步、 关闭 selinux 和 iptables 在 linux-node1 上配置( 只有 centos7 能用, 6 还用 ntp) [root@linux-node1 ~]# yum install -y chrony [root@linux-node1 ~]# vim /etc/chrony.conf allow 192.168/16 #允许那些服务器和自己同步时间 [root@linux-node1 ~]# systemctl enable chronyd.service    #开机启动 [root@linux-node1 ~]# systemctl start chronyd.service [root@linux-node1 ~]# timedatectl set-timezone Asia/Shanghai     #设置时区 [root@linux-node1 ~]# timedatectl status Local time: Fri 2016-08-26 11:14:19 CST Universal time: Fri 2016-08-26 03:14:19 UTC RTC time: Fri 2016-08-26 03:14:19 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: n/a

在 linux-node2 上配置 [root@linux-node2 ~]# yum install -y chrony [root@linux-node2 ~]# vim /etc/chrony.conf server 192.168.1.17 iburst #只留一行 [root@linux-node2 ~]# systemctl enable chronyd.service [root@linux-node2 ~]# systemctl start chronyd.service [root@linux-node2 ~]# timedatectl set-timezone Asia/Shanghai [root@linux-node2 ~]# chronyc sources

3.3 安装及配置 mysql

[root@linux-node1 ~]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf                   #或者是/usr/share/mariadb/my-medium.cnf [mysqld] default-storage-engine = innodb innodb_file_per_table collation-server = utf8_general_ci init-connect = ‘SET NAMES utf8’ character-set-server = utf8 [root@linux-node1 ~]# systemctl enable mariadb.service                                                      #Centos7里面mysql叫maridb [root@linux-node1 ~]# ln -s ‘/usr/lib/systemd/system/mariadb.service’ ‘/etc/systemd/system/multi-user.target.wants/mariadb.service’ [root@linux-node1 ~]# mysql_install_db –datadir=”/var/lib/mysql” –user=”mysql”               #初始化数据库 [root@linux-node1 ~]# systemctl start mariadb.service [root@linux-node1 ~]# mysql_secure_installation                                                                 #设置密码及初始化 密码 123456,一路 y 回车

创建数据库 [root@openstack-server ~]# mysql -p123456 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 5579 Server version: 5.5.50-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement. MariaDB [(none)]> CREATE DATABASE keystone; MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@’localhost’ IDENTIFIED BY ‘keystone’; MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@’%’ IDENTIFIED BY ‘keystone’; MariaDB [(none)]> CREATE DATABASE glance; MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO ‘glance’@’localhost’ IDENTIFIED BY ‘glance’; MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO ‘glance’@’%’ IDENTIFIED BY ‘glance’; MariaDB [(none)]> CREATE DATABASE nova; MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO ‘nova’@’localhost’ IDENTIFIED BY ‘nova’; MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO ‘nova’@’%’ IDENTIFIED BY ‘nova’; MariaDB [(none)]> CREATE DATABASE neutron; MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO ‘neutron’@’localhost’ IDENTIFIED BY ‘neutron’; MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO ‘neutron’@’%’ IDENTIFIED BY ‘neutron’; MariaDB [(none)]> CREATE DATABASE cinder; MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO ‘cinder’@’localhost’ IDENTIFIED BY ‘cinder’; MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO ‘cinder’@’%’ IDENTIFIED BY ‘cinder’; MariaDB [(none)]> flush privileges; MariaDB [(none)]> show databases; +——————–+ | Database | +——————–+ | information_schema   | | cinder                       | | glance                       | | keystone                    | | mysql                        | | neutron                     | | nova                         | | performance_schema | +——————–+ 8 rows in set (0.00 sec)

MariaDB [(none)]>

—————————————————————————————————————————- 参考另一篇博客:http://www.cnblogs.com/kevingrace/p/5811167.html 修改下mysql的连接数,否则openstack后面的操作会报错:“ERROR 1040 (08004): Too many connections ” —————————————————————————————————————————-

3.4 配置 rabbitmq MQ 全称为 Message Queue, 消息队列( MQ)是一种应用程序对应用程序的通信方法。应用 程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。 消 息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通 信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。 队列的使用除去了接收和发送应用程序同时执行的要求。 RabbitMQ 是一个在 AMQP 基础上完整的,可复用的企业消息系统。他遵循 Mozilla Public License 开源协议。 启动 rabbitmq, 端口 5672,添加 openstack 用户

[root@linux-node1 ~]# systemctl enable rabbitmq-server.service [root@linux-node1 ~]# ln -s ‘/usr/lib/systemd/system/rabbitmq-server.service’ ‘/etc/systemd/system/multi-user.target.wants/rabbitmq-server.service’ [root@linux-node1 ~]# systemctl start rabbitmq-server.service [root@linux-node1 ~]# rabbitmqctl add_user openstack openstack                               #添加用户及密码 [root@linux-node1 ~]# rabbitmqctl set_permissions openstack “.*” “.*” “.*”                                   #允许配置、写、读访问 openstack [root@linux-node1 ~]# rabbitmq-plugins list                                 #查看支持的插件 ……… [ ] rabbitmq_management 3.6.2                                    #使用此插件实现 web 管理 ……… [root@linux-node1 ~]# 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. [root@linux-node1 ~]# systemctl restart rabbitmq-server.service

[root@linux-node1 ~]#lsof -i:15672

访问RabbitMQ,访问地址是http://58.68.250.17:15672 默认用户名密码都是guest,浏览器添加openstack用户到组并登陆测试,连不上情况一般是防火墙没有关闭所致!

之后退出使用 openstack 登录 如何使用 zabbix 监控? 左下角有 HTTP API 的介绍,可以实现 zabbix 的监控

*********************************************************************************************

以上完成基础环境的配置,下面开始安装 openstack 的组件

3.5 配置 Keystone 验证服务 所有的服务,都需要在 keystone 上注册 3.5.1 Keystone 介绍

3.5.2 配置 Keystone 端口 5000 和 35357

1、修改/etc/keystone/keystone.conf 取一个随机数 [root@linux-node1 ~]# openssl rand -hex 10 35d6e6f377a889571bcf [root@linux-node1 ~]# cat /etc/keystone/keystone.conf|grep -v “^#”|grep -v “^$” [DEFAULT] admin_token = 35d6e6f377a889571bcf                                    #设置 token,和上面产生的随机数值一致 verbose = true [assignment] [auth] [cache] [catalog] [cors] [cors.subdomain] [credential] [database] connection = mysql://keystone:keystone@192.168.1.17/keystone                                          #设置数据库连接 写到database下 [domain_config] [endpoint_filter] [endpoint_policy] [eventlet_server] [eventlet_server_ssl] [federation] [fernet_tokens] [identity] [identity_mapping] [kvs] [ldap] [matchmaker_redis] [matchmaker_ring] [memcache] servers = 192.168.1.17:11211 [oauth1] [os_inherit] [oslo_messaging_amqp] [oslo_messaging_qpid] [oslo_messaging_rabbit] [oslo_middleware] [oslo_policy] [paste_deploy] [policy] [resource] [revoke] driver = sql [role] [saml] [signing] [ssl] [token] provider = uuid driver = memcache [tokenless_auth] [trust]

2、 创建数据库表, 使用命令同步 [root@linux-node1 ~]# su -s /bin/sh -c “keystone-manage db_sync” keystone No handlers could be found for logger “oslo_config.cfg”                                          #出现这个信息,不影响后续操作!忽略~

[root@linux-node1 ~]# ll /var/log/keystone/keystone.log -rw-r–r–. 1 keystone keystone 298370 Aug 26 11:36 /var/log/keystone/keystone.log      #之所以上面 su 切换是因为这个日志文件属主 [root@linux-node1 config]# mysql -h 192.168.1.17 -u keystone -p      #数据库检查表,生产环境密码不要用keystone,改成复杂点的密码

3、 启动 memcached 和 apache 启动 memcached [root@linux-node1 ~]# systemctl enable memcached [root@linux-node1 ~]#ln -s ‘/usr/lib/systemd/system/memcached.service’ ‘/etc/systemd/system/multi-user.target.wants/memcached.service’ [root@linux-node1 ~]# systemctl start memcached 配置 httpd [root@linux-node1 ~]# vim /etc/httpd/conf/httpd.conf ServerName 192.168.1.17:80 [root@linux-node1 ~]# cat /etc/httpd/conf.d/wsgi-keystone.conf Listen 5000 Listen 35357

<VirtualHost *:5000> WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP} WSGIProcessGroup keystone-public WSGIScriptAlias / /usr/bin/keystone-wsgi-public WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On <IfVersion >= 2.4> ErrorLogFormat “%{cu}t %M” </IfVersion> ErrorLog /var/log/httpd/keystone-error.log CustomLog /var/log/httpd/keystone-access.log combined <Directory /usr/bin> <IfVersion >= 2.4> Require all granted </IfVersion> <IfVersion < 2.4> Order allow,deny Allow from all </IfVersion> </Directory> </VirtualHost>

<VirtualHost *:35357> WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP} WSGIProcessGroup keystone-admin WSGIScriptAlias / /usr/bin/keystone-wsgi-admin WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On <IfVersion >= 2.4> ErrorLogFormat “%{cu}t %M” </IfVersion> ErrorLog /var/log/httpd/keystone-error.log CustomLog /var/log/httpd/keystone-access.log combined <Directory /usr/bin> <IfVersion >= 2.4> Require all granted </IfVersion> <IfVersion < 2.4> Order allow,deny Allow from all </IfVersion> </Directory> </VirtualHost>

启动 httpd [root@linux-node1 config]# systemctl enable httpd [root@linux-node1 config]#ln -s ‘/usr/lib/systemd/system/httpd.service’ ‘/etc/systemd/system/multi-user.target.wants/httpd.service’ [root@linux-node1 config]# systemctl start httpd [root@linux-node1 ~]# netstat -lntup|grep httpd tcp6 0 0 :::5000 :::* LISTEN 23632/httpd tcp6 0 0 :::80 :::* LISTEN 23632/httpd tcp6 0 0 :::35357 :::* LISTEN 23632/httpd 如果 http 起不来关闭 selinux 或者安装 yum install openstack-selinux

4、 创建 keystone 用户 临时设置 admin_token 用户的环境变量,用来创建用户 [root@linux-node1 ~]# export OS_TOKEN=35d6e6f377a889571bcf                           #上面产生的随机数值 [root@linux-node1 ~]# export OS_URL=http://192.168.1.17:35357/v3 [root@linux-node1 ~]# export OS_IDENTITY_API_VERSION=3

创建 admin 项目—创建 admin 用户(密码 admin,生产不要这么玩) —创建 admin 角色—把 admin 用户加入到 admin 项目赋予 admin 的角色(三个 admin 的位置:项目,用户,角色) [root@linux-node1 ~]#openstack project create –domain default –description “Admin Project” admin [root@linux-node1 ~]#openstack user create –domain default –password-prompt admin [root@linux-node1 ~]#openstack role create admin [root@linux-node1 ~]#openstack role add –project admin –user admin admin 创建一个普通用户 demo [root@linux-node1 ~]#openstack project create –domain default –description “Demo Project” demo [root@linux-node1 ~]#openstack user create –domain default –password=demo demo [root@linux-node1 ~]#openstack role create user [root@linux-node1 ~]#openstack role add –project demo –user demo user

创建 service 项目,用来管理其他服务用 [root@linux-node1 ~]#openstack project create –domain default –description “Service Project” service

以上的名字都是固定的,不能改

查看创建的而用户和项目 [root@linux-node1 ~]# openstack user list +———————————-+——-+ | ID | Name | +———————————-+——-+ | b1f164577a2d43b9a6393527f38e3f75 | demo | | b694d8f0b70b41d883665f9524c77766 | admin | +———————————-+——-+ [root@linux-node1 ~]# openstack project list +———————————-+———+ | ID | Name | +———————————-+———+ | 604f9f78853847ac9ea3c31f2c7f677d | demo | | 777f4f0108b1476eabc11e00dccaea9f | admin | | aa087f62f1d44676834d43d0d902d473 | service | +———————————-+———+ 5、注册 keystone 服务,以下三种类型分别为公共的、内部的、管理的。 [root@linux-node1 ~]#openstack service create –name keystone –description “OpenStack Identity” identity [root@linux-node1 ~]#openstack endpoint create –region RegionOne identity public http://192.168.1.17:5000/v2.0 [root@linux-node1 ~]#openstack endpoint create –region RegionOne identity internal http://192.168.1.17:5000/v2.0 [root@linux-node1 ~]#openstack endpoint create –region RegionOne identity admin http://192.168.1.17:35357/v2.0 [root@linux-node1 ~]# openstack endpoint list #查看 +———————————-+———–+————–+————–+———+—- ——-+———————————+ | ID | Region | Service Name | Service Type | Enabled | Interface | URL | +———————————-+———–+————–+————–+———+—- ——-+———————————+ | 011a24def8664506985815e0ed2f8fa5 | RegionOne | keystone | identity | True | internal | http://192.168.1.17:5000/v2.0 | | b0981cae6a8c4b3186edef818733fec6 | RegionOne | keystone | identity | True | public | http://192.168.1.17:5000/v2.0 | | c4e0c79c0a8142eda4d9653064563991 | RegionOne | keystone | identity | True | admin | http://192.168.1.17:35357/v2.0 | +———————————-+———–+————–+————–+———+—- ——-+———————————+ [root@linux-node1 ~]# openstack endpoint delete ID                                    #使用这个命令删除

6、 验证,获取 token,只有获取到才能说明 keystone 配置成功 [root@linux-node1 ~]# unset OS_TOKEN [root@linux-node1 ~]# unset OS_URL [root@linux-node1 ~]# openstack –os-auth-url http://192.168.1.17:35357/v3 –os-project-domain-id default –os-user-domain-id default –os-project-name admin –os-username admin –os-auth-type password token issue                   #回车 Password: admin +————+———————————-+ | Field | Value | +————+———————————-+ | expires | 2015-12-17T04:22:00.600668Z | | id | 1b530a078b874438aadb77af11ce297e | | project_id | 777f4f0108b1476eabc11e00dccaea9f | | user_id | b694d8f0b70b41d883665f9524c77766 | +————+———————————-+

使用环境变量来获取 token,环境变量在后面创建虚拟机时也需要用。 创建两个环境变量文件,使用时直接 source!!!(注意,下面两个sh文件所在的路径,在查看命令前都要source下,不然会报错!!) [root@linux-node1 ~]# cat admin-openrc.sh export OS_PROJECT_DOMAIN_ID=default export OS_USER_DOMAIN_ID=default export OS_PROJECT_NAME=admin export OS_TENANT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=admin export OS_AUTH_URL=http://192.168.1.17:35357/v3 export OS_IDENTITY_API_VERSION=3

[root@linux-node1 ~]# cat demo-openrc.sh export OS_PROJECT_DOMAIN_ID=default export OS_USER_DOMAIN_ID=default export OS_PROJECT_NAME=demo export OS_TENANT_NAME=demo export OS_USERNAME=demo export OS_PASSWORD=demo export OS_AUTH_URL=http://192.168.1.17:5000/v3 export OS_IDENTITY_API_VERSION=3 [root@linux-node1 ~]# source admin-openrc.sh [root@linux-node1 ~]# openstack token issue +————+———————————-+ | Field | Value | +————+———————————-+ | expires | 2015-12-17T04:26:08.625399Z | | id | 58370ae3b9bb4c07a67700dd184ad3b1 | 16 | project_id | 777f4f0108b1476eabc11e00dccaea9f | | user_id | b694d8f0b70b41d883665f9524c77766 | +————+———————————-+

3.6 配置 glance 镜像服务 3.6.1 glance 介绍

3.6.2 glance 配置 端口: api            9191 registry    9292 1、修改/etc/glance/glance-api.conf 和/etc/glance/glance-registry.conf [root@linux-node1 ~]# cat /etc/glance/glance-api.conf|grep -v “^#”|grep -v “^$” [DEFAULT] verbose=True notification_driver = noop                                           #galnce 不需要消息队列 [database] connection=mysql://glance:glance@192.168.1.17/glance [glance_store] default_store=file filesystem_store_datadir=/var/lib/glance/images/ [image_format] [keystone_authtoken] auth_uri = http://192.168.1.17:5000 auth_url = http://192.168.1.17:35357 auth_plugin = password project_domain_id = default user_domain_id = default project_name = service username = glance password = glance [matchmaker_redis] [matchmaker_ring] [oslo_concurrency] [oslo_messaging_amqp] [oslo_messaging_qpid] [oslo_messaging_rabbit] [oslo_policy] [paste_deploy] flavor=keystone [store_type_location_strategy] [task] [taskflow_executor]

[root@linux-node1 ~]# cat /etc/glance/glance-registry.conf|grep -v “^#”|grep -v “^$” [DEFAULT] verbose=True notification_driver = noop [database] connection=mysql://glance:glance@192.168.1.17/glance [glance_store] [keystone_authtoken] auth_uri = http://192.168.1.17:5000 auth_url = http://192.168.1.17:35357 auth_plugin = password project_domain_id = default user_domain_id = default project_name = service username = glance password = glance [matchmaker_redis] [matchmaker_ring] [oslo_messaging_amqp] [oslo_messaging_qpid] [oslo_messaging_rabbit] [oslo_policy] [paste_deploy] flavor=keystone

2、创建数据库表,同步数据库 [root@linux-node1 ~]# su -s /bin/sh -c “glance-manage db_sync” glance [root@linux-node1 ~]# mysql -h 192.168.1.17 -uglance -p

3、 创建关于 glance 的 keystone 用户 [root@linux-node1 ~]# source admin-openrc.sh [root@linux-node1 ~]# openstack user create –domain default –password=glance glance [root@linux-node1 ~]# openstack role add –project service –user glance admin

4、启动 glance [root@linux-node1 ~]#systemctl enable openstack-glance-api [root@linux-node1 ~]#systemctl enable openstack-glance-registry [root@linux-node1 ~]#systemctl start openstack-glance-api [root@linux-node1 ~]#systemctl start openstack-glance-registry [root@linux-node1 ~]# netstat -lnutp |grep 9191 #registry tcp 0 0 0.0.0.0:9191 0.0.0.0:* LISTEN 24890/python2 [root@linux-node1 ~]# netstat -lnutp |grep 9292 #api tcp 0 0 0.0.0.0:9292 0.0.0.0:* LISTEN 24877/python2

5、在 keystone 上注册 [root@linux-node1 ~]# source admin-openrc.sh [root@linux-node1 ~]#openstack service create –name glance –description “OpenStack Image service” image [root@linux-node1 ~]#openstack endpoint create –region RegionOne image public http://192.168.1.17:9292 [root@linux-node1 ~]#openstack endpoint create –region RegionOne image internal http://192.168.1.17:9292 [root@linux-node1 ~]#openstack endpoint create –region RegionOne image admin http://192.168.1.17:9292

6、添加 glance 环境变量并测试 [root@linux-node1 src]# echo “export OS_IMAGE_API_VERSION=2” | tee -a admin-openrc.sh demo-openrc.sh [root@linux-node1 src]# glance image-list +—-+——+ | ID | Name | +—-+——+ +—-+——+

7、 下载镜像并上传到 glance 【此处下载的qcow2格式镜像比较小,可以直接下载ios格式镜像,然后用oz工具制造】 [root@linux-node1 ~]# wget -q http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img   #也可以提前下载下来 [root@linux-node1 ~]# glance image-create –name “cirros” –file cirros-0.3.4-x86_64-disk.img –disk-format qcow2 –container-format bare –visibility public –progress [=============================>] 100% +——————+————————————–+ | Property | Value | +——————+————————————–+ | checksum | ee1eca47dc88f4879d8a229cc70a07c6 | | container_format | bare | | created_at | 2015-12-17T04:11:02Z | | disk_format | qcow2 | | id | 2707a30b-853f-4d04-861d-e05b0f1855c8 | | min_disk | 0 | | min_ram | 0 | | name | cirros | | owner | 777f4f0108b1476eabc11e00dccaea9f | | protected | False | | size | 13287936 | | status | active | | tags | [] | | updated_at | 2015-12-17T04:11:03Z | | virtual_size | None | | visibility | public | +——————+————————————–+ ——————————————————————————————————————————- 下载ios格式镜像,需要用OZ工具制造openstack镜像,具体操作请见另一篇博客:

实际生产环境下,肯定要使用ios镜像进行制作了

http://www.cnblogs.com/kevingrace/p/5821823.html

——————————————————————————————————————————-

或者直接下载centos的qcow2格式镜像进行上传,qcow2格式镜像直接就可以在openstack里使用,不需要进行格式转换! 下载地址:http://cloud.centos.org/centos,可以到里面下载centos5/6/7的qcow2格式的镜像

[root@linux-node1 ~]#wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2 [root@linux-node1 ~]#glance image-create –name “CentOS-7-x86_64” –file CentOS-7-x86_64-GenericCloud.qcow2 –disk-format qcow2 –container-format bare –visibility public –progress

——————————————————————————————————————————

[root@linux-node1 ~]# glance image-list +————————————–+——–+ | ID | Name | +————————————–+——–+ | 2707a30b-853f-4d04-861d-e05b0f1855c8 | cirros | +————————————–+——–+

[root@linux-node1 ~]# ll /var/lib/glance/images/ 总用量 12980 -rw-r—–. 1 glance glance 1569390592 Aug 26 12:50 35b36f08-eeb9-4a91-9366-561f0a308a1b

3.7 配置 nova 计算服务 3.7.1 nova 介绍 nova 必备的组件

nova scheduler

3.7.2 Nova 控制节点配置

1、修改/etc/nova/nova.conf [root@linux-node1 ~]# cat /etc/nova/nova.conf|grep -v “^#”|grep -v “^$” [DEFAULT] my_ip=192.168.1.17 enabled_apis=osapi_compute,metadata auth_strategy=keystone network_api_class=nova.network.neutronv2.api.API linuxnet_interface_driver=nova.network.linux_net.NeutronLinuxBridgeInterfaceDriver security_group_api=neutron firewall_driver = nova.virt.firewall.NoopFirewallDriver debug=true verbose=true rpc_backend=rabbit allow_resize_to_same_host=True scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter [api_database] [barbican] [cells] [cinder] [conductor] [cors] [cors.subdomain] [database] connection=mysql://nova:nova@192.168.1.17/nova [ephemeral_storage_encryption] [glance] host=$my_ip [guestfs] [hyperv] [image_file_url] [ironic] [keymgr] [keystone_authtoken] auth_uri = http://192.168.1.17:5000 auth_url = http://192.168.1.17:35357 auth_plugin = password project_domain_id = default user_domain_id = default project_name = service username = nova password = nova [libvirt] virt_type=kvm #如果控制节点也作为计算节点(单机部署的话),这一行也添加上(这行是计算节点配置的) [matchmaker_redis] [matchmaker_ring] [metrics] [neutron] url = http://192.168.1.17:9696 auth_url = http://192.168.1.17:35357 auth_plugin = password project_domain_id = default user_domain_id = default region_name = RegionOne project_name = service username = neutron password = neutron service_metadata_proxy = True metadata_proxy_shared_secret = neutron lock_path=/var/lib/nova/tmp [osapi_v21] [oslo_concurrency] [oslo_messaging_amqp] [oslo_messaging_qpid] [oslo_messaging_rabbit] rabbit_host=192.168.1.17 rabbit_port=5672 rabbit_userid=openstack rabbit_password=openstack [oslo_middleware] [rdp] [serial_console] [spice] [ssl] [trusted_computing] [upgrade_levels] [vmware] [vnc] novncproxy_base_url=http://58.68.250.17:6080/vnc_auto.html  #如果控制节点也作为计算节点(单机部署的话),这一行也添加上(这行是计算节点配置的),配置控制节点的公网ip vncserver_listen= $my_ip vncserver_proxyclient_address= $my_ip keymap=en-us #如果控制节点也作为计算节点(单机部署的话),这一行也添加上(这行是计算节点配置的) [workarounds] [xenserver] [zookeeper]

*********************************************************************** {网络部分为啥这么写:network_api_class=nova.network.neutronv2.api.API} [root@linux-node1 ~]# ls /usr/lib/python2.7/site-packages/nova/network/neutronv2/api.py /usr/lib/python2.7/site-packages/nova/network/neutronv2/api.py 这里面有一个 API 方法,其他配置类似 ***********************************************************************

2、同步数据库 [root@linux-node1 ~]# su -s /bin/sh -c “nova-manage db sync” nova [root@linux-node1 ~]# mysql -h 192.168.1.17 -unova -p 检查

3、创建 nova 的 keystone 用户 [root@linux-node1 ~]# openstack user create –domain default –password=nova nova [root@linux-node1 ~]# openstack role add –project service –user nova admin

4、启动 nova 相关服务 [root@linux-node1 ~]#systemctl enable openstack-nova-api.service openstack-nova-cert.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service [root@linux-node1 ~]#systemctl start openstack-nova-api.service openstack-nova-cert.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service

5、在 keystone 上注册 [root@linux-node1 ~]# source admin-openrc.sh [root@linux-node1 ~]# openstack service create –name nova –description “OpenStack Compute” compute [root@linux-node1 ~]# openstack endpoint create –region RegionOne compute public http://192.168.1.17:8774/v2/%\(tenant_id\)s [root@linux-node1 ~]# openstack endpoint create –region RegionOne compute internal http://192.168.1.17:8774/v2/%\(tenant_id\)s [root@linux-node1 ~]# openstack endpoint create –region RegionOne compute admin http://192.168.1.17:8774/v2/%\(tenant_id\)s 检查 [root@linux-node1 ~]# openstack host list +—————————+————-+———-+ | Host Name | Service | Zone | +—————————+————-+———-+ | linux-node1.oldboyedu.com | conductor | internal | | linux-node1.oldboyedu.com | scheduler | internal | | linux-node1.oldboyedu.com | consoleauth | internal | | linux-node1.oldboyedu.com | cert | internal | +—————————+————-+———-+

3.7.3   nova 计算节点配置 1、 nova compute 介绍

2、修改配置文件/etc/nova/nova.conf 可以直接从 node1 拷贝到 node2 上 [root@linux-node1 ~]# scp /etc/nova/nova.conf 192.168.1.8:/etc/nova/ 手动更改如下配置 [root@linux-node2 ~]# vim /etc/nova/nova.conf my_ip=192.168.1.8 novncproxy_base_url=http://192.168.1.17:6080/vnc_auto.html vncserver_listen=0.0.0.0 vncserver_proxyclient_address= $my_ip keymap=en-us [glance] host=192.168.56.17 [libvirt] virt_type=kvm                   #虚拟机类型,默认是 kvm

3、启动服务 [root@linux-node2 ~]# systemctl enable libvirtd openstack-nova-compute [root@linux-node2 ~]# systemctl start libvirtd openstack-nova-compute

4、在控制节点测试(计算节点上也行,需要环境变量) [root@linux-node1 ~]# openstack host list +—————————+————-+———-+ | Host Name | Service | Zone | +—————————+————-+———-+ | linux-node1.oldboyedu.com | conductor | internal | | linux-node1.oldboyedu.com | consoleauth | internal | | linux-node1.oldboyedu.com | scheduler | internal | | linux-node1.oldboyedu.com | cert | internal | | linux-node2.oldboyedu.com | compute | nova | +—————————+————-+———-+

[root@linux-node1 ~]# nova image-list                  #测试 glance 是否正常 +————————————–+——–+——–+——–+ | ID | Name | Status | Server | +————————————–+——–+——–+——–+ | 2707a30b-853f-4d04-861d-e05b0f1855c8 | cirros | ACTIVE | | +————————————–+——–+——–+——–+ [root@linux-node1 ~]# nova endpoints                     #测试 keystone WARNING: keystone has no endpoint in ! Available endpoints for this service:           #这一行告警不影响后面的操作 +———–+———————————-+ | keystone | Value | +———–+———————————-+ | id | 02fed35802734518922d0ca2d672f469 | | interface | internal | | region | RegionOne | | region_id | RegionOne | | url | http://192.168.1.17:5000/v2.0 | +———–+———————————-+ +———–+———————————-+ | keystone | Value | +———–+———————————-+ | id | 52b0a1a700f04773a220ff0e365dea45 | | interface | public | | region | RegionOne | | region_id | RegionOne | | url | http://192.168.1.17:5000/v2.0 | +———–+———————————-+ +———–+———————————-+ | keystone | Value | +———–+———————————-+ | id | 88df7df6427d45619df192979219e65c | | interface | admin | | region | RegionOne | | region_id | RegionOne | | url | http://192.168.1.17:35357/v2.0 | +———–+———————————-+ WARNING: nova has no endpoint in ! Available endpoints for this service: +———–+————————————————————–+ | nova | Value | +———–+————————————————————–+ | id | 1a3115941ff54b7499a800c7c43ee92a | | interface | internal | | region | RegionOne | | region_id | RegionOne | | url | http://192.168.1.17:8774/v2/65a0c00638c247a0a274837aa6eb165f | +———–+————————————————————–+ +———–+————————————————————–+ | nova | Value | +———–+————————————————————–+ | id | 5278f33a42754c9a8d90937932b8c0b3 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | url | http://192.168.1.17:8774/v2/65a0c00638c247a0a274837aa6eb165f | +———–+————————————————————–+ +———–+————————————————————–+ | nova | Value | +———–+————————————————————–+ | id | 8c4fa7b9a24949c5882949d13d161d36 | | interface | public | | region | RegionOne | | region_id | RegionOne | | url | http://192.168.1.17:8774/v2/65a0c00638c247a0a274837aa6eb165f | +———–+————————————————————–+ WARNING: glance has no endpoint in ! Available endpoints for this service: +———–+———————————-+ | glance | Value | +———–+———————————-+ | id | 31fbf72537a14ba7927fe9c7b7d06a65 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | url | http://192.168.1.17:9292 | +———–+———————————-+ +———–+———————————-+ | glance | Value | +———–+———————————-+ | id | be788b4aa2ce4251b424a3182d0eea11 | | interface | public | | region | RegionOne | | region_id | RegionOne | | url | http://192.168.1.17:9292 | +———–+———————————-+ +———–+———————————-+ | glance | Value | +———–+———————————-+ | id | d0052712051a4f04bb59c06e2d5b2a0b | | interface | internal | | region | RegionOne | | region_id | RegionOne | | url | http://192.168.1.17:9292 | +———–+———————————-+

3.8 Neutron 网络服务 3.8.1 Neutron 介绍 neutron 由来

openstack 网络分类:

Neutron 组件

3.8.2 Neutron 控制节点配置( 5 个配置文件) 1、修改/etc/neutron/neutron.conf 文件

[root@linux-node1 ~]# cat /etc/neutron/neutron.conf|grep -v “^#”|grep -v “^$” [DEFAULT] state_path = /var/lib/neutron core_plugin = ml2 service_plugins = router auth_strategy = keystone notify_nova_on_port_status_changes = True notify_nova_on_port_data_changes = True nova_url = http://192.168.1.17:8774/v2 rpc_backend=rabbit [matchmaker_redis] [matchmaker_ring] [quotas] [agent] [keystone_authtoken] auth_uri = http://192.168.1.17:5000 auth_url = http://192.168.1.17:35357 auth_plugin = password project_domain_id = default user_domain_id = default project_name = service username = neutron password = neutron admin_tenant_name = %SERVICE_TENANT_NAME% admin_user = %SERVICE_USER% admin_password = %SERVICE_PASSWORD% [database] connection = mysql://neutron:neutron@192.168.1.17:3306/neutron [nova] auth_url = http://192.168.1.17:35357 auth_plugin = password project_domain_id = default user_domain_id = default region_name = RegionOne project_name = service username = nova password = nova [oslo_concurrency] lock_path = $state_path/lock [oslo_policy] [oslo_messaging_amqp] [oslo_messaging_qpid] [oslo_messaging_rabbit] rabbit_host = 192.168.1.17 rabbit_port = 5672 rabbit_userid = openstack rabbit_password = openstack [qos]

2、 配置/etc/neutron/plugins/ml2/ml2_conf.ini [root@linux-node1 ~]# cat /etc/neutron/plugins/ml2/ml2_conf.ini|grep -v “^#”|grep -v “^$” [ml2] type_drivers = flat,vlan,gre,vxlan,geneve tenant_network_types = vlan,gre,vxlan,geneve mechanism_drivers = openvswitch,linuxbridge extension_drivers = port_security [ml2_type_flat] flat_networks = physnet1 [ml2_type_vlan] [ml2_type_gre] [ml2_type_vxlan] [ml2_type_geneve] [securitygroup] enable_ipset = True

3、配置/etc/neutron/plugins/ml2/ linuxbridge_agent.ini [root@linux-node1 ~]# cat /etc/neutron/plugins/ml2/linuxbridge_agent.ini|grep -v “^#”|grep -v “^$” [linux_bridge] physical_interface_mappings = physnet1:em2 [vxlan] enable_vxlan = false [agent] prevent_arp_spoofing = True [securitygroup] firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver enable_security_group = True

4、修改/etc/neutron/dhcp_agent.ini [root@linux-node1 ~]# cat /etc/neutron/dhcp_agent.ini|grep -v “^#”|grep -v “^$” [DEFAULT] interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq enable_isolated_metadata = true [AGENT]

5、修改/etc/neutron/metadata_agent.ini [root@linux-node1 ~]# cat /etc/neutron/metadata_agent.ini|grep -v “^#”|grep -v “^$” [DEFAULT] auth_uri = http://192.168.1.17:5000 auth_url = http://192.168.1.17:35357 auth_region = RegionOne auth_plugin = password project_domain_id = default user_domain_id = default project_name = service username = neutron password = neutron nova_metadata_ip = 192.168.1.17 metadata_proxy_shared_secret = neutron admin_tenant_name = %SERVICE_TENANT_NAME% admin_user = %SERVICE_USER% admin_password = %SERVICE_PASSWORD% [AGENT]

6、创建连接并创建 keystone 的用户 [root@linux-node1 ~]# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini [root@linux-node1 ~]# openstack user create –domain default –password=neutron neutron [root@linux-node1 ~]# openstack role add –project service –user neutron admin

7、更新数据库 [root@linux-node1 ~]# su -s /bin/sh -c “neutron-db-manage –config-file /etc/neutron/neutron.conf –config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head” neutron

8、注册 keystone [root@linux-node1 ~]# source admin-openrc.sh [root@linux-node1 ~]# openstack service create –name neutron –description “OpenStack Networking” network [root@linux-node1 ~]# openstack endpoint create –region RegionOne network public http://192.168.1.17:9696 [root@linux-node1 ~]# openstack endpoint create –region RegionOne network internal http://192.168.1.17:9696 [root@linux-node1 ~]# openstack endpoint create –region RegionOne network admin http://192.168.1.17:9696

9、 启动服务并检查 因为neutron和nova有联系,做neutron时修改nova的配置文件,上面nova.conf已经做了neutron的关联配置,所以要重启openstack-nova-api服务。 这里将nova的关联服务都一并重启了: [root@linux-node1 ~]# systemctl restart openstack-nova-api.service openstack-nova-cert.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service

启动neutron相关服务 [root@linux-node1 ~]# systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service [root@linux-node1 ~]# systemctl start neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service

检查 [root@linux-node1 ~]# neutron agent-list +————————————–+——————–+——————+——-+—————-+—————————+ | id | agent_type | host | alive | admin_state_up | binary | +————————————–+——————–+——————+——-+—————-+—————————+ | 385cebf9-9b34-4eca-b780-c515dbc7eec0 | Linux bridge agent | openstack-server | 🙂 | True | neutron-linuxbridge-agent | | b3ff8ffe-1ff2-4659-b823-331def4e6a93 | DHCP agent | openstack-server | 🙂 | True | neutron-dhcp-agent | | b5bed625-47fd-4e79-aa55-01cf8a8cc577 | Metadata agent | openstack-server | 🙂 | True | neutron-metadata-agent | +————————————–+——————–+——————+——-+—————-+—————————+

查看注册信息 [root@openstack-server src]# openstack endpoint list +———————————-+———–+————–+————–+———+———–+——————————————-+ | ID | Region | Service Name | Service Type | Enabled | Interface | URL | +———————————-+———–+————–+————–+———+———–+——————————————-+ | 02fed35802734518922d0ca2d672f469 | RegionOne | keystone | identity | True | internal | http://192.168.1.17:5000/v2.0 | | 1a3115941ff54b7499a800c7c43ee92a | RegionOne | nova | compute | True | internal | http://192.168.1.17:8774/v2/%(tenant_id)s | | 31fbf72537a14ba7927fe9c7b7d06a65 | RegionOne | glance | image | True | admin | http://192.168.1.17:9292 | | 5278f33a42754c9a8d90937932b8c0b3 | RegionOne | nova | compute | True | admin | http://192.168.1.17:8774/v2/%(tenant_id)s | | 52b0a1a700f04773a220ff0e365dea45 | RegionOne | keystone | identity | True | public | http://192.168.1.17:5000/v2.0 | | 88df7df6427d45619df192979219e65c | RegionOne | keystone | identity | True | admin | http://192.168.1.17:35357/v2.0 | | 8c4fa7b9a24949c5882949d13d161d36 | RegionOne | nova | compute | True | public | http://192.168.1.17:8774/v2/%(tenant_id)s | | be788b4aa2ce4251b424a3182d0eea11 | RegionOne | glance | image | True | public | http://192.168.1.17:9292 | | c059a07fa3e141a0a0b7fc2f46ca922c | RegionOne | neutron | network | True | public | http://192.168.1.17:9696 | | d0052712051a4f04bb59c06e2d5b2a0b | RegionOne | glance | image | True | internal | http://192.168.1.17:9292 | | ea325a8a2e6e4165997b2e24a8948469 | RegionOne | neutron | network | True | internal | http://192.168.1.17:9696 | | ffdec11ccf024240931e8ca548876ef0 | RegionOne | neutron | network | True | admin | http://192.168.1.17:9696 | +———————————-+———–+————–+————–+———+———–+——————————————-+

3.8.3 Neutron 计算节点配置 1、修改相关配置文件 从 node1 上直接拷贝

[root@linux-node1 ~]# scp /etc/neutron/neutron.conf 192.168.1.8:/etc/neutron/ [root@linux-node1 ~]# scp /etc/neutron/plugins/ml2/linuxbridge_agent.ini 192.168.1.8:/etc/neutron/plugins/ml2/ [root@linux-node1 ~]# scp /etc/neutron/plugins/ml2/ml2_conf.ini 192.168.1.8:/etc/neutron/plugins/ml2/ 修改计算节点的 nova 配置文件中 neutron 部分, 并重启 openstack-nova-compute 服务, 因为 上面 nova 计算节点也是从控制节点拷贝的,此处无需操作

2、 创建软连接并启动服务 [root@linux-node2 ~]# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini [root@linux-node2 ~]# systemctl enable neutron-linuxbridge-agent.service [root@linux-node2 ~]# systemctl start neutron-linuxbridge-agent.service

检查 [root@linux-node1 ~]# neutron agent-list +————————————–+——————–+——————+——-+—————-+—————————+ | id | agent_type | host | alive | admin_state_up | binary | +————————————–+——————–+——————+——-+—————-+—————————+ | 385cebf9-9b34-4eca-b780-c515dbc7eec0 | Linux bridge agent | openstack-server | 🙂 | True | neutron-linuxbridge-agent | | b3ff8ffe-1ff2-4659-b823-331def4e6a93 | DHCP agent | openstack-server | 🙂 | True | neutron-dhcp-agent | | b5bed625-47fd-4e79-aa55-01cf8a8cc577 | Metadata agent | openstack-server | 🙂 | True | neutron-metadata-agent | +————————————–+——————–+——————+——-+—————-+—————————+

3.9 创建虚拟机 3.9.1 创建桥接网络

1、 创建网络 [root@linux-node1 ~]# source admin-openrc.sh                     #在哪个项目下创建虚拟机,这里选择在demo下创建;也可以在admin下 [root@linux-node1 ~]# neutron net-create flat –shared –provider:physical_network physnet1 –provider:network_type flat

2、 创建子网(填写宿主机的内网网关,下面DNS和内网网关可以设置成宿主机的内网ip,下面192.168.1.100-200是分配给虚拟机的ip范围) [root@linux-node1 ~]# neutron subnet-create flat 192.168.1.0/24 –name flat-subnet –allocation-pool start=192.168.1.100,end=192.168.1.200 –dns-nameserver 192.168.1.1 –gateway 192.168.1.1

3、 查看子网 [root@linux-node1 ~]# neutron net-list +————————————–+——+—————————————————–+ | id | name | subnets | +————————————–+——+—————————————————–+ | 1d9657f6-de9e-488f-911f-020c8622fe78 | flat | c53da14a-01fe-4f6c-8485-232489deaa6e 192.168.1.0/24 | +————————————–+——+—————————————————–+

[root@linux-node1 ~]# neutron subnet-list +————————————–+————-+—————-+—————————————————-+ | id | name | cidr | allocation_pools | +————————————–+————-+—————-+—————————————————-+ | c53da14a-01fe-4f6c-8485-232489deaa6e | flat-subnet | 192.168.1.0/24 | {“start”: “192.168.1.100”, “end”: “192.168.1.200”} | +————————————–+————-+—————-+—————————————————-+ 需要关闭 VMware 的 dhcp

3.9.2 创建虚拟机(为vm分配内网ip,后续利用squid代理或宿主机NAT端口转发进行对外或对内访问) 1、创建 key [root@linux-node1 ~]# source demo-openrc.sh               (这是在demo账号下创建虚拟机;要是在admin账号下创建虚拟机,就用source admin-openrc.sh) [root@linux-node1 ~]# ssh-keygen -q -N “”

2、将公钥添加到虚拟机 [root@linux-node1 ~]# nova keypair-add –pub-key /root/.ssh/id_rsa.pub mykey [root@linux-node1 ~]# nova keypair-list +——-+————————————————-+ | Name | Fingerprint | +——-+————————————————-+ | mykey | cd:7a:1e:cd:c0:43:9b:b1:f4:3b:cf:cd:5e:95:f8:00 | +——-+————————————————-+

3、创建安全组 [root@linux-node1 ~]# nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 [root@linux-node1 ~]# nova secgroup-add-rule default tcp 22 22 0.0.0.0/0

4、 创建虚拟机 查看支持的虚拟机类型 [root@linux-node1 ~]# nova flavor-list +—-+———–+———–+——+———–+——+——-+————-+———–+ | ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public | +—-+———–+———–+——+———–+——+——-+————-+———–+ | 1 | m1.tiny | 512 | 1 | 0 | | 1 | 1.0 | True | | 2 | m1.small | 2048 | 20 | 0 | | 1 | 1.0 | True | | 3 | m1.medium | 4096 | 40 | 0 | | 2 | 1.0 | True | | 4 | m1.large | 8192 | 80 | 0 | | 4 | 1.0 | True | | 5 | m1.xlarge | 16384 | 160 | 0 | | 8 | 1.0 | True | +—-+———–+———–+——+———–+——+——-+————-+———–+ 查看镜像 [root@linux-node1 ~]# nova image-list +————————————–+——–+——–+——–+ | ID | Name | Status | Server | +————————————–+——–+——–+——–+ | 2707a30b-853f-4d04-861d-e05b0f1855c8 | cirros | ACTIVE | | +————————————–+——–+——–+——–+ 查看网络 [root@linux-node1 ~]# neutron net-list +————————————–+——+—————————————————–+ | id | name | subnets | +————————————–+——+—————————————————–+ | 1d9657f6-de9e-488f-911f-020c8622fe78 | flat | c53da14a-01fe-4f6c-8485-232489deaa6e 192.168.1.0/24 | +————————————–+——+—————————————————–+

创建虚拟机 【这一步容易报错,一般都是由于上面的 nova.conf 配置填写有误所致】 [root@linux-node1 ~]# nova boot –flavor m1.tiny –image cirros –nic net-id=1d9657f6-de9e-488f-911f-020c8622fe78 –security-group default –key-name mykey hello-instance

5、查看虚拟机

[root@linux-node1 ~]# nova list +————————————–+—————+——–+————+————-+——————–+ | ID | Name | Status | Task State | Power State | Networks | +————————————–+—————+——–+————+————-+——————–+ | 7a6215ac-aea7-4e87-99a3-b62c06d4610e | hello-instance| ACTIVE | – | Running | flat=192.168.1.102 | +————————————–+—————+——–+————+————-+——————–+

************************************************************************* 如果要删除虚拟机(利用虚拟机ID进行删除) [root@linux-node1 ~]# nova delete 7a6215ac-aea7-4e87-99a3-b62c06d4610e *************************************************************************

[root@linux-node1 src]# nova list +————————————–+—————-+——–+————+————-+——————–+ | ID | Name | Status | Task State | Power State | Networks | +————————————–+—————-+——–+————+————-+——————–+ | 007db18f-ae3b-463a-b86d-9a8455a21e2d | hello-instance | ACTIVE | – | Running | flat=192.168.1.101 | +————————————–+—————-+——–+————+————-+——————–+

[root@linux-node1 ~]# ssh cirros@192.168.1.101 登录查看

******************************************************************************

上面创建虚拟机的时候,openstack在neutron组网内是采用dhcp-agent自动分配ip的!

可以在创建虚拟机的时候,指定固定ip,方法详见于另一篇博客:

http://www.cnblogs.com/kevingrace/p/5822660.html

******************************************************************************

6、 web 界面打开虚拟机 [root@linux-node1 ~]# nova get-vnc-console hello-instance novnc +——-+———————————————————————————– -+ | Type | Url | + ——-+———————————————————————————– -+ | novnc | http://58.68.250.17:6080/vnc_auto.html?token=303d5a78-c85f-4ed9-93b6-be9d5d28fba6 |       #访问这个链接即可打开vnc界面 +——-+———————————————————————————– -+

4.0 安装 dashboard,登陆 web 管理界面 [root@linux-node1 ~]# yum install openstack-dashboard -y [root@linux-node1 ~]# vim /etc/openstack-dashboard/local_settings               #按照下面几行进行配置修改 OPENSTACK_HOST = “192.168.1.17”                                 #更改为keystone机器地址 OPENSTACK_KEYSTONE_DEFAULT_ROLE = “user”              #默认的角色 ALLOWED_HOSTS = [‘*’]                                                 #允许所有主机访问 CACHES = { ‘default’: { ‘BACKEND’: ‘django.core.cache.backends.memcached.MemcachedCache’, ‘LOCATION’: ‘192.168.1.17:11211’,                                   #连接memcached } } #CACHES = { # ‘default’: { # ‘BACKEND’: ‘django.core.cache.backends.locmem.LocMemCache’, # } #} TIME_ZONE = “Asia/Shanghai”                        #设置时区

重启 httpd 服务 [root@linux-node1 ~]# systemctl restart httpd

web 界面登录访问dashboard http://58.68.250.17/dashboard/ 用户密码 demo 或者 admin(管理员)

image.png

——————————————————————————————— 如果要修改dashboard的访问端口(比如将80端口改为8080端口),则需要修改下面两个配置文件: 1)vim /etc/httpd/conf/httpd.conf 将80端口修改为8080端口

Listen 8080 ServerName 192.168.1.17:8080

2)vim /etc/openstack-dashboard/local_settings #将下面两处的端口由80改为8080 ‘from_port’: ‘8080’, ‘to_port’: ‘8080’,

然后重启http服务: systemctl restart httpd

如果开启了防火墙,还需要开通8080端口访问规则

这样,dashboard访问url: http://58.68.250.17:8080/dashboard ———————————————————————————————

前面建立了两个账号:admin 和 demo,两个账号都可以登陆web!只不过, admin 是管理员账号, admin 登陆后可以看到其他账号下的状态 demo 等普通账号登陆后只能看到自己的状态 注意: 上面的 Rabbit 账号 admin 和 openstack 是消息队列的 web 登陆账号。 比如一下子要建立 10 个虚拟机的指令,但是当前资源处理不过来,就通过 Rabbit 进行排队!!

———————————————————————————————————————– 修改OpenStack中dashboard用户登陆密码的方法:

登陆dashboard:

————————————————————————————————————————————————–

创建虚拟机的时候,我们可以自己定义虚拟机的类型(即配置)。

登陆openstack的web管理界面里进行自定义,也可以将之前的删除。

查看上传到glance的镜像

查看创建的虚拟机实例

自定义虚拟主机类型,设置如下:

(如果想让虚拟机有空闲磁盘空间,用于新建分区之用,则可以在这里分配临时磁盘)

我创建了四个虚拟机实例,采用的是同一个虚拟主机类型(即上面的kvm002),四个实例总共占用宿主机40G的空间。

image.png

登陆到openstack,可以看到,左侧一共有四个标签栏:

—————————————————————————————————————————————————- 可以登陆dashboard界面,在“计算”->“实例”里选择“启动云主机”或者“计算->网络->网络拓扑”里选择“启动虚拟机”就可以再创建一个虚拟机 也可以按照快照再启动(创建)一个虚拟机,不过这样启动起来的虚拟机是一个新的ip(快照前的源虚拟机就要关机了)

查看实例,发现kvm-server005虚拟机已经创建成功了。默认创建后的ip是dhcp自动分配的,可以登陆虚拟机改成static静态ip

image.png

———————————————————————————————————————————————

在openstack 中重启实例有两种,分别被称为“软重启”和“硬重启”。所谓的软重启会尝试正常关机并重启实例,硬重启会直接将实例“断电”并重启。也就是说硬重启会“关闭”电源。其具体命令如下: 默认情况下,如果您通过nova重启,执行的是软重启。 $ nova reboot SERVER 如果您需要执行硬重启,添加–hard参数即可: $ nova reboot –hard SERVER

nova命令管理虚拟机:

$ nova list #查看虚拟机 $ nova stop [vm-name]或[vm-id] #关闭虚拟机 $ nova start [vm-name]或[vm-id] #启动虚拟机 $ nova suspend [vm-name]或[vm-id] #暂停虚拟机 $ nova resume [vm-name]或[vm-id] #启动暂停的虚拟机 $ nova delete [vm-name]或[vm-id] #删除虚拟机

$nova-manage service list    #检查服务是否正常

[root@openstack-server ~]# source /usr/local/src/admin-openrc.sh [root@openstack-server ~]# nova list +————————————–+—————-+——–+————+————-+——————–+ | ID | Name | Status | Task State | Power State | Networks | +————————————–+—————-+——–+————+————-+——————–+ | 11e7ad7f-c0a8-482b-abca-3a4b7cfdd55d | hello-instance | ACTIVE | – | Running | flat=192.168.1.107 | | 67f71703-c32c-4bf1-8778-b2a6600ad34a | kvm-server0 | ACTIVE | – | Running | flat=192.168.1.120 | +————————————–+—————-+——–+————+————-+——————–+ [root@openstack-server ~]# ll /var/lib/nova/instances/           #下面是虚拟机的存放路径 total 8 drwxr-xr-x. 2 nova nova 85 Aug 29 15:22 11e7ad7f-c0a8-482b-abca-3a4b7cfdd55d drwxr-xr-x. 2 nova nova 85 Aug 29 15:48 67f71703-c32c-4bf1-8778-b2a6600ad34a drwxr-xr-x. 2 nova nova 80 Aug 29 15:40 _base -rw-r–r–. 1 nova nova 39 Aug 29 16:44 compute_nodes drwxr-xr-x. 2 nova nova 4096 Aug 29 13:58 locks

———————————————————————————————————————————– virsh命令行管理虚拟机:

[root@openstack-server ~]# virsh list #查看虚拟机

Id Name State —————————————————- 9 instance-00000008 running 41 instance-00000015 running [root@openstack-server ~]# ll /etc/libvirt/qemu/ #虚拟机文件 total 16 -rw——-. 1 root root 4457 Aug 26 17:46 instance-00000008.xml -rw——-. 1 root root 4599 Aug 29 15:40 instance-00000015.xml drwx——. 3 root root 22 Aug 24 12:06 networks

其中: virsh list #显示本地活动虚拟机 virsh list –all #显示本地所有的虚拟机(活动的+不活动的) virsh define instance-00000015.xml #通过配置文件定义一个虚拟机(这个虚拟机还不是活动的) virsh edit instance-00000015 # 编辑配置文件(一般是在刚定义完虚拟机之后) virsh start instance-00000015 #启动名字为ubuntu的非活动虚拟机 virsh reboot instance-00000015 #重启虚拟机 virsh create instance-00000015.xml #创建虚拟机(创建后,虚拟机立即执行,成为活动主机) virsh suspend instance-00000015 #暂停虚拟机 virsh resume instance-00000015 #启动暂停的虚拟机 virsh shutdown instance-00000015 #正常关闭虚拟机 virsh destroy instance-00000015 #强制关闭虚拟机 virsh dominfo instance-00000015 #显示虚拟机的基本信息 virsh domname 2 #显示id号为2的虚拟机名 virsh domid instance-00000015 #显示虚拟机id号 virsh domuuid instance-00000015 #显示虚拟机的uuid virsh domstate instance-00000015 #显示虚拟机的当前状态 virsh dumpxml instance-00000015 #显示虚拟机的当前配置文件(可能和定义虚拟机时的配置不同,因为当虚拟机启动时,需要给虚拟机分配id号、uuid、vnc端口号等等) virsh setmem instance-00000015 512000 #给不活动虚拟机设置内存大小 virsh setvcpus instance-00000015 4 # 给不活动虚拟机设置cpu个数 virsh save instance-00000015 a  #将该instance-00000015虚拟机的运行状态存储到文件a中 virsh restore a    #恢复被存储状态的虚拟机的状态,即便虚拟机被删除也可以恢复(如果虚拟机已经被undefine移除,那么恢复的虚拟机也只是一个临时的状态,关闭后自动消失) virsh undefine instance-00000015    #移除虚拟机,虚拟机处于关闭状态后还可以启动,但是被该指令删除后不能启动。在虚拟机处于Running状态时,调用该指令,该指令暂时不生效,但是当虚拟机被关闭后,该指令生效移除该虚拟机,也可以在该指令生效之前调用define+TestKVM.xml取消该指令

注意: virsh destroy instance-00000015 这条命令并不是真正的删除这个虚拟机,只是将这个虚拟机强制关闭了。可以通过该虚拟机的xml文件恢复。如下: [root@kvm-server ~]# virsh list Id Name State —————————————————- 1 dev-new-test2 running 2 beta-new2 running 5 test-server running 8 ubuntu-test03 running 9 elk-node1 running 10 elk-node2 running 11 ubuntu-test01 running 12 ubuntu-test02 running

强制关闭虚拟机 [root@kvm-server ~]# virsh destroy ubuntu-test02 Domain ubuntu-test02 destroyed

发现ubuntu-test02虚拟机已经关闭了 [root@kvm-server ~]# virsh list Id Name State —————————————————- 1 dev-new-test2 running 2 beta-new2 running 5 test-server running 8 ubuntu-test03 running 9 elk-node1 running 10 elk-node2 running 11 ubuntu-test01 running

但是该虚拟机的xml文件还在,可以通过这个文件恢复 [root@kvm-server ~]# ll /etc/libvirt/qemu/ubuntu-test02.xml -rw——- 1 root root 2600 Dec 26 13:55 /etc/libvirt/qemu/ubuntu-test02.xml [root@kvm-server ~]# virsh define /etc/libvirt/qemu/ubuntu-test02.xml #这只是重新添加了这个虚拟机,目前还不是活动的虚拟机,需要启动下 [root@kvm-server ~]# virsh start ubuntu-test02 Domain ubuntu-test02 started [root@kvm-server ~]# virsh list Id Name State —————————————————- 1 dev-new-test2 running 2 beta-new2 running 5 test-server running 8 ubuntu-test03 running 9 elk-node1 running 10 elk-node2 running 11 ubuntu-test01 running 12 ubuntu-test02 running

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

https://cloud.tencent.com/developer/article/1026128

博纳云标准节点提交注意事项

1.标准节点分为静态IP专线(单设备 5Gbps – 10Gbps)及动态IP汇聚(单设备 3Gbps- 5Gbps)。
(1)静态IP专线要求及设备配置请参考:https://shimo.im/docs/pDQVDH8pr6Pk8qdv
(2)动态IP汇聚要求及设备配置请参考:https://shimo.im/docs/QqJtpkCkYvRTQWvx
2.标准节点收益根据有效带宽 95 峰月结,具体收益情况请加入官方社群咨询二猫。
(1)有效带宽 95 峰:按自然月结算,在一个自然月内,按账户取每5分钟有效带宽值(出带宽-入带宽)进行降序排列,将带宽数值最高的 5% 的点去掉,剩余最高带宽即为月95带宽峰值计费值。以一月30天为例,默认均为有效取值点,每5分钟1个带宽取值点,每天288个取值点,每月总取值点数为 288x 30 = 8640个;将所有的点按带宽数值降序排列,去掉前5%的点(8640 x 5% = 432 个点),即第433个点为月95峰值带宽计费点。
3.动态IP汇聚需要先填写拨号配置,请前往 软路由 – 汇聚拨号配置 填写,保存服务器信息后选择对应的拨号配置提交即可。
4.请点击下方添加节点提交设备信息,如有疑问,请加入官方群咨询二猫。
官方站点:
https://bonuscloud.work/