Think Deep,Work Lean

openstack主要组件及基础环境搭建(1)

Posted on By zack

概述

官网 参考1 参考2

openstack三大项,计算网络存储

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

openstack主要目标是来简化资源的管理和分配,把计算 网络 存储。三大项虚拟成三大资源池,例如需要计算资源我这里可以提供,需要网络资源这里也可以提供以及存储资源的需求,对外提供api,通过api进行交互。

计算资源:管理cpu和内存
存储资源:存储数据
网络资源:网络资源这块,最近比较火的就是SDN,软件定义网络,真正生产使用的很少。青云的sdn做的比较好

命名从A开始
E版开始,在国内开始有用了,此时功能比较简陋,G版用的也比较多 I 版 :最后一个支持centos6和python2.6的,I版本以后的都是默认python2.7开始的了

示意图

示意图

业界使用openstack做公有云的有:金山云,乐视云,京东云,携程,惠普云,华为,IBM

阿里云,青云,腾讯云都是自己开发的

私有云以vmware为主

主要组件

openstack系统由几个关键服件组成,计算服务,认证服务网络服务镜像服务块存储服务对象存储服务计量服务编排服务数据库服务

认证服务(Identity,代号为“Keystone”)

为项目中的其他的服务组件提供身份认证和授权功能

计算服务(Compute,代号为“Nova”)

根据需求提供虚拟的服务器。Rackspace和HP公司提供商业云计算服务正是建立在Nova之上,在Mercado Libre和NASA(Nova项目的起源地)内部也是使用的Nova。

控制面板(Dashboard,代号为“Horizon”)

为OpenStack的所有服务提供一个模块化的基于Web的用户界面。使用这个Web图形界面,可以完成云计算平台上的大多数的操作,如启动客户机、分配IP地址、设置访问控制权限等。

网络服务(Network,代号为“Neutron”)

提供网络连接服务,同时也为Ironic提供PXE网络

镜像服务(Image,代号为“Glance”)

为虚拟机实例提供镜像服务,同时,Glance服务中的镜像介质存放在Swift中

块存储服务(Block Storage,代号为“Cinder”)

为虚拟机实例提供块设备,同时备份数据到Swift中

对象存储服务(Object Storage,代号为“Swift”)

提供的对象存储服务,允许对文件进行存储或者检索(但不是通过挂载文件服务器上目录的方式来实现)。 目前已经有好几家公司开始提供基于Swift的商业存储服务,这些公司包括KT公司、Rackspace公司(Swift项目的发源地)和Internap公司, 而且,有很多大公司内部也使用Swift来存储数据。

Ironic

提供物理机的添加、删除、电源管理和安装部署等功能

Data Processing Service(数据分析,代号“Sahara”)

通过Heat编排集群配置;在Swift中保存数据或二进制文件;将任务分派给虚拟机实例处理;通过Nova运行数据处理实例;在Glance中注册Hadoop镜像。

计量服务(Telemetry,代号为“ceilometer”)

为各组件提供监控、检索和计量功能

编排服务(Orchestration,代号为“Heat”)

可以编排Cinder、Neutron、Glance和Nova各种资源,通过Openstack-native REST API和CloudFormation-compatible Query API两个API,按照HOT或CloudFormation模板编排各种服务组件使用

数据库服务(Database,代号为“Trove”)

为虚拟机虚像提供注册服务;使用Nova启动数据库实例;依附虚拟机实例,提供数据存储、操作和管理;可以备份数据库实例到Swift中

文件共享系统服务

更多

实验环境准备

硬件所需最小资源 示意图

基础环境安装

Vmware Workstation
虚拟机系统2个
系统版本:centos7.1.1503 x86_64
内存:4GB
网络:两台机器都是nat
磁盘:40GB
额外:勾选vt-x
注意:vmare的网关为x.x.x.2,所以nameserver也要设置为x.x.x.2
IP:

控制节点 计算节点
192.168.56.11 192.168.56.12
linux-node1.example.com linux-node2.example.com

首先配置ssh免密登陆,在控制节点上依次执行 ssh-keygen,ssh-copy-id 192.168.56.12

然后直接在一个机器上向另外一台机器执行命令、写文件等,如:

#在11上执行这个命令,将配置文件写入到12上面去,这只是个例子而已
ssh 192.168.56.12  sudo tee /etc/ceph/ceph.conf </etc/ceph/ceph.conf

在安装系统时,设置Bios保证网卡名为eth0
网卡设置

[root@linux-node1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="static"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="192.168.56.11"
NETMASK="255.255.255.0"
GATEWAY="192.168.56.2"

两台主机配好主机名解析

[root@linux-node1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.56.11 linux-node1 linux-node1.example.com
192.168.56.12 linux-node2 linux-node2.example.com

换阿里源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak && curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \
yum makecache

如果不换阿里源,装个epel仓库也行,二选一即可

rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm

时钟同步


以下这个可以忽略,可当作个补充,请直接跳转至虚线以下

控制节点和计算节点同步时间,这里去同步阿里云的时间服务器

[root@linux-node1 ~]# yum install -y ntpdate
[root@linux-node1 ~]# ntpdate time1.aliyun.com

当然也可以设置控制节点为时间服务器,让计算节点来同步

watch ntpq -p

注意:在ntp server上重新启动ntp服务后,ntp server自身或者与其server的同步的需要一个时间段,这个过程可能是5分钟,在这个时间之内在客户端运行ntpdate命令时会产生no server suitable for synchronization found的错误

参考 这个地方使用ntpdate(相当于是ntpd的客户端命令,当服务端装一个ntpd服务后,可以使用这个命令,让client与server保持时间同步),不过centos7开始默认使用chrony,不过,即使这个不在使用,也比直接用date -s 10:00 这种强行来改时间的方法强。关于chrony,这里延伸一下

#chrony的相关用法
timedatectl #查看日期时间、时区及NTP状态
timedatectl list-timezones #查看时区列表
timedatectl set-timezone Asia/Shanghai #修改时区
timedatectl set-time "2015-01-21 11:50:00" #(可以只修改其中一个) 修改日期时间
timedatectl set-ntp true/flase  #开启NTP
timedatectl  status #查看状态
chronyc tracking #校准时间服务器

关于用chrony设置集群中时间同步,client及server都需要将配置文件中的同步源修改为server IP,参考1 参考2

——分割线——-


yum install -y chrony && systemctl start chronyd.service && systemctl enable chronyd.service && firewall-cmd --add-service ntp

安装openstack仓库

yum install -y centos-release-openstack-queens

安装openstack仓库,此时安装queen版本

yum install -y centos-release-openstack-queens

安装openstack client

yum install -y python-openstackclient

安装openstack selinx包,生产中我我们通常关闭selinx,但是如果我们不关闭,我们可以通过这个软件对它自动配置。

yum install -y openstack-selinux

mysql安装

yum install -y mariadb mariadb-server python2-PyMySQL   

修改mysql配置文件

vim /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 192.168.56.11 #设置监听的IP地址
default-storage-engine = innodb  #设置默认的存储引擎
innodb_file_per_table = on#使用独享表空间
collation-server = utf8_general_ci #服务器的默认校对规则
character-set-server = utf8 #服务器安装时指定的默认字符集设定
max_connections = 4096 #设置MySQL的最大连接数,生产请根据实际情况设置。

启动mysql

systemctl start mariadb && systemctl enable mariadb

初始化

mysql_secure_installation

用数据库连接客户端以 root 用户连接到数据库服务器

mysql -uroot -p

创建 keystone 数据库

CREATE DATABASE keystone;

对keystone给予恰当权限

grant all privileges on keystone.* to 'keystone'@'localhost' identified by '123.com';

grant all privileges on keystone.* to 'keystone'@'%' identified by '123.com';

退出后生成一个随机值,在初始的配置中作为管理员的令牌

[root@linux-node3 system]# openssl rand -hex 10
2cc4ea41401aae657ac2

类似地创建Glance Nova Neutron Cinder数据库

#Glance
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'glance';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance';
# Nova
CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova';
CREATE DATABASE nova_api;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'nova';
CREATE DATABASE nova_cell0;
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'nova';
#Neutron
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'neutron';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'neutron';
#Cinder
CREATE DATABASE cinder;
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'cinder';
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'cinder';

RabbitMQ安装

yum install -y rabbitmq-server && \
systemctl enable rabbitmq-server.service && \
systemctl start rabbitmq-server.service && \
systemctl status rabbitmq-server.service

添加openstack用户

rabbitmqctl add_user openstack openstack

给刚才的openstack用户给权限

rabbitmqctl set_permissions openstack ".*" ".*" ".*"

启用web插件

rabbitmq-plugins list
rabbitmq-plugins enable rabbitmq_management

端口说明:

[root@linux-node1 yum.repos.d]# netstat -nltp
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN      4880/beam           -> mq集群所需要的端口
tcp        0      0 192.168.56.11:3306      0.0.0.0:*               LISTEN      4569/mysqld         
tcp        0      0 192.168.56.11:11211     0.0.0.0:*               LISTEN      1110/memcached      
tcp        0      0 0.0.0.0:4369            0.0.0.0:*               LISTEN      4772/epmd           
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1101/sshd           
tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      4880/beam        -> mq的管理界面   
tcp6       0      0 :::5672                 :::*                    LISTEN      4880/beam        -> mq的端口   
tcp6       0      0 :::5000                 :::*                    LISTEN      1111/httpd          
tcp6       0      0 :::8778                 :::*                    LISTEN      1111/httpd          
tcp6       0      0 ::1:11211               :::*                    LISTEN      1110/memcached      
tcp6       0      0 :::80                   :::*                    LISTEN      1111/httpd          
tcp6       0      0 :::4369                 :::*                    LISTEN      4772/epmd           
tcp6       0      0 :::22                   :::*                    LISTEN      1101/sshd           
tcp6       0      0 :::35357                :::*                    LISTEN      1111/httpd       

web界面访问 http://192.168.56.11:15672/#/ 用户名:guest # guest

日志

在openstack手工搭建时候难免有些问题,要学会看日志,日志路径如下:

服务 路径
认证服务(keystone) /var/log/keystone/keystone.log
镜像服务(glance) /var/log/glance/api.log
镜像服务(glance) /var/log/glance/registry.log
网络服务(neutron) /var/log/neutron/dhcp-agent.log
网络服务(neutron) /var/log/neutron/l3-agent.log
网络服务(neutron) /var/log/neutron/lbaas-agent.log
网络服务(neutron) /var/log/neutron/linuxbridge-agent.log
网络服务(neutron) /var/log/neutron/metadata-agent.log
网络服务(neutron) /var/log/neutron/metering-agent.log
网络服务(neutron) /var/log/neutron/openvswitch-agent.log
网络服务(neutron) /var/log/neutron/server.log
对象存储(swift) /var/log/swift/swift.log
编排服务(heat) /var/log/heat/heat-api.log
编排服务(heat) /var/log/heat/heat-engine.log
编排服务(heat) /var/log/heat/heat-manage.log
计算服务(nova) /var/log/nova/nova-api.log
计算服务(nova) /var/log/nova/nova-cert.log
计算服务(nova) /var/log/nova/nova-compute.log
计算服务(nova) /var/log/nova/nova-conductor.log
计算服务(nova) /var/log/nova/nova-consoleauth.log
计算服务(nova) /var/log/nova/nova-network.log
计算服务(nova) /var/log/nova/nova-manage.log
计算服务(nova) /var/log/nova/nova-scheduler.log
块存储服务(cinder) /var/log/cinder/api.log
块存储服务(cinder) /var/log/cinder/cinder-manage.log
块存储服务(cinder) /var/log/cinder/scheduler.log
块存储服务(cinder) /var/log/cinder/volume.log
界面(dashboard) /var/log/httpd/access_log
界面(dashboard) /var/log/httpd/error_log