Openstack平台部署

1 搭建说明

服务器资源配置可参考表1-1-1。

表1-1-1 服务器资源配置说明

节点位置

主机名

硬件配置

IP地址

控制节点

Controller

内存48G,硬盘4*2T/Raid1,双CPU,4网卡接口

192.168.1.48

计算节点

Compute

内存128G,硬盘4*2T/Raid1,双CPU,4网卡接口

192.168.1.49

存储节点

Storage

内存64G,硬盘6*2T/Raid0,双CPU,4网卡接口

192.168.1.50

       为满足工业级云平台部署要求,本手册旨在组织一种最快捷且可灵活扩展的云平台部署方式。本手册中描述的部署方式,采用三节点(控制节点+计算节点+存储节点)、单网卡的模式,三台服务器分别通过3根网线连接至同一交换机,使其处于同一局域网内,并可以访问外部网络。本手册以Openstack Icehouse版本为例,其他版本请参考官方发布的技术文档妥善操作。

       :在安装服务器操作系统时,需选定某一台预留出一定的分区,作为云硬盘,本操作手册中,以控制节点/dev/sdb1硬盘分区为例。

       

2 平台搭建

云数控系统平台搭建主要包括下面三个部分,其中,必需首先部署控制节点,计算节点与存储节点顺序不限,部署过程中,需保证网络畅通。

1) 控制节点部署

2)  计算节点部署

3)  存储节点部署

2.1 搭建准备工作

以下操作需在每台服务器上分别执行,无顺序要求。

1) 关闭SELINUX服务

修改文件/etc/selinux/config:

SELINUX=disabled

SELINUXTYPE=targeted

分别修改后保存,并分别重启服务器。

2) 网络设置

编辑服务器对应的有效网卡的配置文件,文件位于/etc/sysconfig/network-scripts,参考配置如下:

DEVICE=em1

HWADDR=C8:1F:66:EF:10:BB

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=no

BOOTPROTO=static

IPADDR=192.168.1.48

PREFIX=24

GATEWAY=192.168.1.254

DNS1=192.168.1.41

DEFROUTE=yes

IPV4_FAILURE_FATAL=yes

IPV6INIT=no

修改后保存,并重新启动网络,命令如下:

# service network restart

3) 添加Openstack安装源

# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

# rpm -vih epel-release-6-8.noarch.rpm

# wget http://repos.fedorapeople.org/repos/openstack/openstack-icehouse/rdo-release-icehouse-4.noarch.rpm

# rpm -vih rdo-release-icehouse-4.noarch.rpm

4)  组建平台

该步骤旨在将控制节点、计算节点、存储节点联成云平台系统,编辑文件/etc/hosts,将云平台相关节点信息分别添加至该文件:

192.168.1.48  Controller

192.168.1.49  Compute

192.168.1.50  Storage

2.2    控制节点部署

1) 安装KVMLibvirt 服务

服务安装命令如下:

# yum install kvm qemu kvm-qemu-img virt-viewer virt-manager libvirt libvirt-python python virtinst-y

启动libvirtd服务:

# service libvirtd  start

设置libvirtd服务开机启动:

# chkconfig  libvirtd on

2) LVM设置(可选)

该步骤是为云硬盘创建cinder-volumes存储卷,创建命令如下:

# umount /dev/sdb1

# pvcreate /dev/ sdb1

# vgcreate cinder-volumes /dev/ sdb1   

设置cinder-volumes存储卷开机挂载,否则会导致无法重启:

  # sed -i '/cinder-volume/s/^/#/' /etc/fstab       

 3) 创建秘钥

# ssh-keygen

默认会在/root/.ssh目录下生成文件id_rsa和id_rsa.pub,分别为私钥与公钥文件,可将id_rsa.pub文件上传至云端秘钥数据库,用于云端实例(云主机)访问的安全验证。

4) Packstack工具安装       

# yum -y install openstack-packstack     

5) 创建Openstack部署配置文件

# packstack --gen-answer-file=ans.txt

编辑文件ans.txt,设置  安装组件为:MYSQL数据库、nova、glance、cinder、keystone、horizon、CEILOMETER等,网络模式采用nova-network。

CONFIG_MYSQL_INSTALL=y

CONFIG_GLANCE_INSTALL=y

CONFIG_CINDER_INSTALL=y

CONFIG_NOVA_INSTALL=y

CONFIG_NEUTRON_INSTALL=n    

CONFIG_HORIZON_INSTALL=y

CONFIG_SWIFT_INSTALL=n

CONFIG_HEAT_INSTALL=n

CONFIG_CINDER_BACKEND=lvm

CONFIG_CINDER_VOLUMES_CREATE=n(若步骤2已创建cinder-volumes,此处则设为n)

CONFIG_CLIENT_INSTALL=y

CONFIG_NTP_SERVERS=ntp.api.bz       (根据实际需要进行设置)

CONFIG_AMQP_SERVER=qpid    

CONFIG_NOVA_COMPUTE_PRIVIF=em1 (与服务器有效网卡对应)

CONFIG_NOVA_NETWORK_MANAGER=nova.network.manager.FlatDHCPManager

CONFIG_NOVA_NETWORK_PUBIF=em1

CONFIG_NOVA_NETWORK_PRIVIF=em1

CONFIG_NOVA_NETWORK_FIXEDRANGE=10.0.0.0/24 (固定IP资源池)

CONFIG_NOVA_NETWORK_FLOATRANGE=192.168.212.0/24 (浮动IP资源池,对应真实路由)

 

文件中以“_PW”结束的参数是各个组件的keystone认证密码,用户可自行进行修改。本手册使用如下命令,将密码进行统一设置,以“123456”为例:

# sed -i 's/PW=.*/PW=123456/' ans.txt  

6) Openstack安装

# packstack --answer-file=ans.txt

此步骤是openstack部署最后和最重要的一个环节,所需时间较长,安装成功之后,系统会在Shell命令行下进行提示:

**** Installation completed successfully ******

7) 创建与swift服务相关的serviceuserendpoint

(1) 创建swift用户

# keystone user-create --name=swift --pass=123456 --email =swift@controller.com

    其中,参数--pass是设置swift用户的keystone认证密码,此处设置为123456。

(2) 为用户swift添加角色admin

# keystone user-role-add --user=swift --tenant=services --role=admin

(3) 创建swift服务

# keystone service-create --name=swift --type=object-store --description=" Object Storage"

(4) 为swift服务创建endpoint

    # keystone endpoint-create  --service-id=Service_Swift_ID \

--publicurl='http://192.168.1.50:8080/v1/AUTH_%(tenant_id)s' \

--internalurl='http:// 192.168.1.50:8080/v1/AUTH_%(tenant_id)s' \

--adminurl=http://192.168.1.50:8080

其中,“Service_Swift_ID”是swift服务的ID,可通过命令“# keystone service list”查看;IP:192.168.1.50是swift_proxy服务所在的节点IP。

2.3 计算节点部署 

1) 安装网桥依赖组件

# yum install bridge-utils -y   

2) 安装ntp服务

  • ntp服务安装

# yum install ntp -y

为保证云平台的正常工作,三个节点需保证时间同步,将控制节点/etc/ntp.conf下的内容复制到计算节点的/etc/ntp.conf。

  • 启动ntp服务:

# service ntpd start

  • 添加ntp服务至开机启动项:

# chkconfig ntpd on   

3) 安装mysql

# yum install -y MySQL-python mysql-libs mysql        

4) 安装qpid客户端

因为控制节点的消息服务模式选择了QPID(见控制节点的ans.txt配置参数),所以计算节点需安装对应的qpid客户端:

# yum install -y qpid-cpp-client memcached      

5) 安装配置nova服务

  • nova服务安装:

# yum install openstack-nova-compute openstack-nova-network  openstack-nova-api  python-novaclient

  • nova服务配置:

将控制节点/etc/nova/nova.conf中的内容复制到计算节点/etc/nova/nova.conf中,并对以下参数进行修改:

my_ip=192.168.1.49

vncserver_listen=192.168. 1.49

vncserver_proxyclient_address=192.168. 1.49

metadata_host=192.168. 1.49

enabled_apis=ec2,osapi_compute

  • nova服务启动项配置

编辑文件/etc/nova/api-paste.ini,添加如下内容:

auth_host = 192.168.1.48

auth_port=35357

auth_protocol=http

admin_tenant_name=services

admin_user=nova

admin_password=123456

  • 启动nova服务

# service libvirtd start && service openstack-nova-api start && service openstack-nova-compute start && service openstack-nova-network start && service openstack-nova-metadata-api start

  • 设置nova服务开机启动

# chkconfig libvirtd on && chkconfig openstack-nova-api on &&  chkconfig openstack-nova-compute on && chkconfig openstack-nova-network on && chkconfig openstack-nova-metadata-api on

2.4 存储节点部署

存储节点用来部署swift服务,其可以分为存储节点(storage node)和代理节点(proxy node),两个节点可以部署在同一台服务器上,也可以分开部署。其中,storage node提供swift-account,swift-container,和swift-object服务;proxy node提供swift-proxy服务。本手册选择将所有的swift服务均部署于存储节点。

1) 存储节点(storage node)部署    

(1) 安装swift-account、swift- container和swift- object服务

# yum install openstack-swift-account  openstack-swift-container openstack-swift-object xfsprogs xinetd

(2) 检查是否生成了文件/etc/swift/swift.conf

如果生成有文件/etc/swift/swift.conf,尽量不要对该文件做任何修改,如果没有,则需执行如下操作:

# mkdir -p /etc/swift

在目录/etc/swift下创建文件swift.conf,并添加如下内容:

[swift-hash]

# random unique string that can never change (DO NOT LSE)

swift_hash_path_suffix  =  fLIbertYgibbitZ

文件中,参数swift_hash_path_suffix的值可自行设置,但是该值在所有swift节点必须保持完全一致。

(3) 设置分区作为存储节点的存储空间

以下操作以以/dev/sda为例。

  • 创建逻辑分区(如果有,则不需要创建)

# fdisk /dev/sda

Command (m for help): n               (输入n表示要创建新的分区,回车键)

Command action

   e   extended

   p   primary partition (1-4)

e                                  (输入e,表示要创建新的扩展分区,回车键)

Selected partition 4                   (选用默认值,直接回车)

First cylinder (3917-5221, default 3917):  (设置分区容量,可直接回车,表示选用默认值)

Using default value 3917             

Last cylinder, +cylinders or +size{K,M,G} (3917-5221, default 5221): (可直接回车,表示选用默认值)

Using default value 5221              (该步完成之后,生成sda4扩展分区)

Command (m for help): n              (重新输入n,创建逻辑分区)

First cylinder (3917-5221, default 3917):  (设置分区容量,可直接回车,表示选用默认值)

Using default value 3917

Last cylinder, +cylinders or +size{K,M,G} (3917-5221, default 5221): (可直接回车,表示选用默认值)

Using default value 5221               (该步完成之后,生成sda5逻辑分区)

Command (m for help): w           (输入w,保存上述操作,否则输入q,放弃上述操作)

将上述生成的/dev/sda5逻辑分区作为存储节点的存储分区。

  • 配置存储分区

逐步执行以下操作:

# mkfs.xfs /dev/sda5

# echo "/dev/sda5 /srv/node/ sda5 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab

# mkdir -p /srv/node/sda5

# mount /srv/node/sda5

# chown -R swift:swift /srv/node

  • 配置rsync服务

创建文档/etc/etc/rsyncd.conf并添加如下内容:

uid = swift

gid = swift

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

address = STORAGE_LOCAL_NET_IP

[account]

max connections = 2

path = /srv/node/

read only = false

lock file = /var/lock/account.lock

[account]

max connections = 2

path = /srv/node/

read only = false

lock file = /var/lock/account.lock

[container]

max connections = 2

path = /srv/node/

read only = false

lock file = /var/lock/container.lock

[object]

max connections = 2

path = /srv/node/

read only = false

lock file = /var/lock/object.lock

  • 配置xinetd服务

修改文件/etc/xinetd.d/rsync内容:

disable = false

启动 xinetd 服务:

# service xinetd start

设置xinetd 服务开机启动:

# chkconfig xinetd on

(4) 创建swift  recon cache,并设置swift用户对文件的操作权限

# mkdir -p /var/swift/recon

# chown -R swift:swift /var/swift/recon

(5) 修改swift-account ,swift-container和swift-object的配置文件

配置文件在目录/etc/swift/下,修改swift-account,swift-container,和swift-object的配置文件中的bind_ip参数项,将其值设置为存储节点的IP:

bind_ip = 192.168.1.50       

2) 部署proxy node(代理节点)

(1)  安装proxy-server服务

# yum install openstack-swift-proxy memcached python-swiftclient python-keystone-auth-token

(2)  配置memcached服务

  • 编辑文件/etc/sysconfig/memcached ,设置OPTION项:

OPTION = ‘-l 0.0.0.0’

其中,-l参数表示监听所有网卡,也可以改成需要监听的网卡

  • 启动memcached服务

# service memcached start

  • 设置memcached服务开机启动

# chkconfig memcached on

(3) 配置proxy-server服务

编辑/etc/swift/proxy-server.conf文件:

[DEFAULT]

bind_port = 8080

user = swift

[pipeline:main]

pipeline = healthcheck cache authtoken keystoneauth proxy-server

[app:proxy-server]

use = egg:swift#proxy

allow_account_management = true

account_autocreate = true

[filter:keystoneauth]

use = egg:swift#keystoneauth

operator_roles = Member,admin,swiftoperator

[filter:authtoken]

paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory

# Delaying the auth decision is required to support token-less

# usage for anonymous referrers ('.r:*').

delay_auth_decision = true

# cache directory for signing certificate

signing_dir = /home/swift/keystone-signing

# auth_* settings refer to the Keystone server

auth_protocol = http

auth_host = 192.168.1.48

auth_port = 35357

# the service tenant and swift username and password created in Keystone

admin_tenant_name = ser0vices

admin_user = swift

admin_password =123456

[filter:cache]

use = egg:swift#memcache

[filter:catch_errors]

use = egg:swift#catch_errors

[filter:healthcheck]

use = egg:swift#healthcheck

(4) 配置节点信息

# cd /etc/swift

# swift-ring-builder account.builder create 18 3 1

# swift-ring-builder container.builder create 18 3 1

# swift-ring-builder object.builder create 18 3 1

定义分区的大小为2^18, 副本数3,分区移动间隔1小时。

(5) 创建ring文件

# swift-ring-builder account.builder add z1-192.168.1.50:6002/sda5 100

# swift-ring-builder container.builder add z1-192.168.1.50:6001/sda5 100

# swift-ring-builder object.builder add z2-192.168.1.50:6000/sda5 100

(6) 验证ring文件

# swift-ring-builder account.builder

# swift-ring-builder container.builder

# swift-ring-builder object.builder

(7) 生成最终的ring

# swift-ring-builder account.builder rebalance

# swift-ring-builder container.builder rebalance

# swift-ring-builder object.builder rebalance

将proxy node下/etc/swift/目录下的account.ring.gz, container.ring.gz和object.ring.gz files 复制到代理节点和存储节点的/etc/swift下,并设置swift用户对/etc/swift目录文件的操作权限。

# chown -R swift:swift /etc/swift

(8) 启动所有swift服务

在代理节点上执行如下命令:

# service openstack-swift-proxy start

# chkconfig openstack-swift-proxy on

在存储节点上执行如下命令:

# swift-init all start

 

 

附录-常见错误及解决方案

1)   控制节点安装阶段常见问题

(1)在执行openstack安装过程中,出现某个安装包无法正常获取。

解决方法:关闭服务器系统防火墙后(命令:# service iptables stop),重新执行

openstack安装命令。

(2)在执行openstack安装过程中,出现MySQL服务无法正常启动。

解决方法:有可能是因为之前安装过MySQL造成,需先将其进行卸载:

          # yum remove mysql mysql-server

          重新执行openstack安装命令。

2)   计算节点安装阶段常见问题

(1)        计算节点的nova服务无法正常启动,nova-compute.log文件中显示如下错误:

IncompatibleObjectVersion_Remote:Version1.4 of InstanceInfoCache is notsupported

解决方法:控制节点的nova版本低于计算节点的nova版本,需新控制节点的yum源,并重新启动所有的nova服务。

(2)        无法正常启动nova-network服务,并出现错误提示:

OSError:[Error 13] Permission denied: ‘/var/lock/nova’

解决方法: 执行# chown nova:nova -R /var/lock/,并重新启动nova-network服务。

(3)        创建的云主机无法ping通外网,和/或外网也无法访问云主机。

解决方法:① 关闭云主机防火墙。

          ②添加如下防火墙设置:

# nova secgroup-add-rule default tcp 1 65535 0.0.0.0/0

# nova secgroup-add-rule default udp 1 65535 0.0.0.0/0

# nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0

3)    存储节点安装阶段常见问题

(1)执行命令#swift stat出现ConnectionError: [Errno 503] Connection refused。使用命令# swift --debug stat查看错误原因如下:

          swiftclient:RESP STATUS: 503 Internal Server Error

解决方法:修改/etc/swift/下的accout-server.conf ,container-server.conf和object-server.conf文件,将bind_ip修改为对应的存储节点的ip。

(2)执行命令# swift stat出现错误ConnectionError: [Errno 111] Connection refused。使用命令# swift --debug stat查看错误原因如下:

swiftclient:[Error 111] Connection refused

解决方法:检查swift相关服务是否全部开启,运行是否正常,必要时可重启所有的swift服务,或者查看在keystone服务节点为swift创建的endpoint,其使用的IP地址是否为swift代理节点的IP。

posted @ 2015-11-03 09:00  YY&BB姐姐的光阴故事  阅读(349)  评论(0)    收藏  举报