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) 安装KVM和Libvirt 服务
服务安装命令如下:
|
# 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服务相关的service、user和endpoint
(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。

浙公网安备 33010602011771号