一 基本安装环境:
硬件资源:服务器CPU需要支持虚拟化技术且在安装前需在BIOS设置中开启虚拟化功能,4网卡。
操作系统:debian7.4.0
在开始云平台的搭建工作前,还有一些服务器的基本配置要完成,包括网络的部署、系统的升级以及源地址的修改等等。
1.1 网络部署:
主机名 | Eth0 | Eth1 | Eth2 |
(主控制节点)R320-1 | 10.9.32.1 | 10.0.0.10 | 10.8.8.1 |
(从控制节点)R320-2 | 10.9.32.2 | 10.0.0.20 | 10.8.8.2 |
(计算节点一) R420-1 | 10.9.32.3 | 10.0.0.30 |
|
(计算节点二)R420-2 | 10.9.32.4 | 10.0.0.40 |
|
Eth0用于管理节点,Eth1用于组件间的消息通信,Eth2用作主备状态的心跳口。
其IP地址可根据实际需求进行修改。
1.2 调整源地址:
因为没有本地源,所以我们使用是网易的源地址。还有就是Havana的源仓库地址。
###Havana 源地址 ###
debhttp://archive.gplhost.com/debian havana main
debhttp://archive.gplhost.com/debian havana-backports main
###网易源地址 ###
debhttp://mirrors.163.com/debian wheezy main non-free contrib
1.3 系统升级:
执行以下命令:
apt-getupdate && apt-get install gplhost-archive-keyring
//安装仓库密钥
apt-getupdate && apt-get dist-upgrade //升级系统软件
1.4 开启网络路由:
编辑 /etc/sysctl.conf文件,去掉以下俩行注释:
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
保存退出,执行命令:sysctl –p ,使设置生效。
1.5 NTP时间服务的安装部署:
安装命令:apt-getinstall ntp ntpdate
调整/etc/ntp.conf配置文件:
#server0.debian.pool.ntp.org iburst
#server1.debian.pool.ntp.org iburst
#server2.debian.pool.ntp.org iburst
#server3.debian.pool.ntp.org iburst
server 10.9.32.1 //这是本地时间服务器主机IP,可以根据实际情况进行调整。
重启NTP 服务:
service ntp restart
注意:一定要保证havana的所有服务主机时间保持一致,否者会出错。
1.6 Mysql 客户端的安装部署
执行命令:apt-getinstall mysql-client python-mysqldb
因为Havana的各个组件都要访问数据库,所以除了mysql服务器本身外,其他的组件都必须安装mysql客户端。
Havana安装架构:
Havana控制节点服务组件主要包括:mysql、keystone、rabbitmq-server
glance、neutron-server、nova(nova-api | nova-conductor | nova-consol
eauth| nova-scheduler | nova-novncproxy)。
Havana 计算节点服务组件主要包括:nova-compute、kvm、libvirt-bin。
为了实现系统高可用,控制节点的各服务都是安装在虚拟机中。
在以下组件的安装过程中都不需要安装数据库,建议安装完成后使用dpkg-reconfigure 命令完成数据库数据的导入。
二 控制节点的服务安装:
2.1 Rabbitmtq-server服务的安装部署:
RabbitMQ用来提供消息队列,做调度使用,是各组件实现通信的中枢。
执行命令:apt-getinstall rabbitmq-server
默认的guest管理用户不支持远程连接,只能实现本地服务间的消息通信,而新建的用户则没有这个限制。
因为控制节点各组件都运行在相应的虚拟机中,所以这里我们要新建一个用户以及创建相应密码:
执行命令:rabbitmqctl add_useradmin stack
rabbitmqctlset-permissions -p / admin ".*" ".*" ".*"
这里我们新建了admin用户,密码:stack ,并赋予了其管理权限。如果要修改用户密码可以执行:rabbitmqctl change_password admin password命令。
配置完成后,重启该服务:
servicerabbitmq-server restart
2.2 Mysql服务的安装部署:
安装命令:apt-getinstall python-mysqldb mysql-server
安装过程会提示你输入数据库管理用户root的密码,可根据自己的设置自行输入。
安装完成后,编辑/etc/mysql/my.cnf, 允许网络访问mysql:
#bind-address= 127.0.0.1
bind-address= 0.0.0.0
重启mysql服务:
servicemysql restart
为了方便,可以把phpmyadmin装上,这样能比较方便的通过web来管理数据库,这步不是必须的,可以选择安装与否。
apt-getinstall phpmyadmin
安装过程弹窗选择apache,创建登录密码,安装完成。
网页登陆:http://10.9.30.120/phpmyadmin,默认80端口,注意apache监听的端口号要为默认的80端口,默认登陆名:phpmyadmin
登陆密码:admin。
创建相关数据库和用户:
应用数据库 | 数据库用户 | 密码 |
mysql | root | stack |
nova | nova | stack |
glance | glance | stack |
keystone | keystone | stack |
neutron | neutron | stack |
cinder | cinder | stack |
编写mysql.sh配置脚本:
mysql -u root<<EOF
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO'keystone'@'localhost' IDENTIFIED BY 'stack';
GRANT ALL PRIVILEGES ON keystone.* TO'keystone'@'%' IDENTIFIED BY 'stack';
CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost'IDENTIFIED BY 'stack';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%'IDENTIFIED BY 'stack';
CREATE DATABASE cinder;
GRANT ALL PRIVILEGES ON cinder.* TO'cinder'@'localhost' IDENTIFIED BY 'stack';
GRANT ALL PRIVILEGES ON cinder.* TO'cinder'@'%' IDENTIFIED BY 'stack';
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO'glance'@'localhost' IDENTIFIED BY 'stack';
GRANT ALL PRIVILEGES ON glance.* TO'glance'@'%' IDENTIFIED BY 'stack';
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO'neutron'@'localhost' IDENTIFIED BY 'stack';
GRANT ALL PRIVILEGES ON neutron.* TO'neutron'@'%' IDENTIFIED BY 'stack';
FLUSH PRIVILEGES;
EOF
执行脚本,完成数据库的创建和用户的添加:
./mysql.sh
2.3 Keystone服务的安装部署:
安装命令:apt-getinstall keystone
dpkg-reconfigure keystone //配置数据库
修改keystone配置文件,有四处可能需要修改,编辑/etc/keystone/
keystone.conf:
[DEFAULT]
#admin_token= ADMIN
admin_token= admin
[sql]
#connection= sqlite:var/lib/keystone/keystone.db
connection= mysql://keystone:stack@10.9.30.120/keystone
[catalog]
driver =keystone.catalog.backends.sql.Catalog
#driver =keystone.catalog.backends.templated.TemplatedCatalog
#template_file =/etc/keystone/default_catalog.templates
[signing]
#Deprecated in favor of provider in the [token] section
#Allowed values are PKI or UUID
token_format= UUID //默认为PKI密钥
重启服务:
servicekeystone restart
同步keystone的数据库:
keystone-managedb_sync
设置环境变量:
修改/root/.bashrc文件,根据实际修改并添加环境变量:
####administrative user####
export OS_SERVICE_TOKEN=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_TENANT_NAME=admin
exportOS_SERVICE_ENDPOINT="http://10.0.0.18:35357/v2.0"
执行命令使变量生效:
source /root/.bashrc
导入数据和endpoint:
为了方便,你可以直接执行当前文件夹里的keystone_data.sh配置脚本来进行keystone项目和用户的全部设置,包括用户添加,权限分配,端口设置等。
脚本执行前,应该根据自己的实际情形修改脚本中相应服务的IP地址、dashboard密码、以及token令牌,而后再执行命令:
chmod +xkeystone_data.sh //给脚本赋予执行权限
./keystone_data.sh //执行脚本
没任何输出,就表示正确,可以通过下面命令检查:
echo $?
显示0,就表示脚本正确运行,千万不要重复运行脚本。
可以使用下面命令来查看结果:
keystoneendpoint-list
keystonetenant-list
keystoneuser-list
keystonerole-list
2.4 Glance服务的安装部署:
执行命令:apt-getinstall glance python-glanceclient
dpkg-reconfigure glance-common //配置数据库
编辑/etc/glance/glance-api-paste.ini,/etc/glance/glance-reg
istry-paste.ini,两个文件,都是修改文档最后3行:
#admin_tenant_name= %SERVICE_TENANT_NAME%
#admin_user= %SERVICE_USER%
#admin_password= %SERVICE_PASSWORD%
admin_tenant_name= service
admin_user= glance
admin_password= stack
编辑/etc/glance/glance-api.conf和/etc/glance/glance-registry.conf,在【DEFAULT】中改成使用mysql验证:
[DEFAULT]
#sql_connection= sqlite:var/lib/glance/glance.sqlite
sql_connection= mysql://glance:stack@10.0.0.15/glance
同时,在/etc/glance/glance-api.conf中,启用rabbit消息中枢和修改默认的镜像存储位置:
#####NotificationSystem Options####
notifier_strategy= rabbit
取消其下方rabbitmq选项的所有注释
####FilesystemStore Options####
filesystem_store_datadir= /home/glusterfs/glance
修改本地的存储位置(Glance默认存储后端为本地文件存储(file))
同步数据库
glance-manageversion_control 0
glance-managedb_sync
重启服务:
serviceglance-api restart && service glance-registry restart
验证glance服务是否正常 这个如果添加了环境变量 可以直接运行:
glance index
没有输出,表示正常,因为目前还没有镜像。
镜像上传:
glance add name="Ubuntu 12.04" is_public=true container_format=ovf disk_format=qcow2 < ubuntu-12.04-server-cloudimg-amd64-disk1.img
2.5 Nova服务的安装部署:
执行命令:apt-get installnova-consoleproxy nova-api nova-cert
nova-conductornova-consoleauth nova-scheduler python-novaclient
python-novanova-common novnc nova-novncproxy //安装nova组件
程序安装过程会提示你安装nova数据库,这里选择不创建,安装完成后,可以使用dpkg-reconfigure nova-common 命令重新配置数据库的相关信息。
执行命令:dpkg-reconfigurenova-common //配置nova数据库
数据库配置完成后,编辑/etc/nova/nova.conf 配置文件,具体可参考当前文件夹下的nova.conf配置文档,值得一提的就是其中VNC的配置部分,默认的VNC使用的是SPICE,如果需要使用网页VNC的话,就要相应的修改配置文件,开启novnc服务,具体如下:
第一步:编辑/etc/default/nova-consoleproxy文件:
#NOVA_CONSOLE_PROXY_TYPE=spicehtml5 //默认使用SPICE方式
NOVA_CONSOLE_PROXY_TYPE=novnc
第二步:编辑/etc/nova/nova.conf,修改VNC 相关选项:
#vnc_enabled=true
novnc_enable=true
vncserver_proxyclient_address=10.0.0.43 //本地主机IP
novncproxy_base_url=http://10.9.32.63:6080/vnc_auto.html
//此处应该为控制节点的公网IP
vncserver_listen=0.0.0.0 //不能设具体的主机IP,方便于后续的虚拟机动态迁移。
同时,注释掉nova.conf中最后面的与SPICE相关的配置文件。
当nova.conf配置文件修改完成后,重启所有服务:
cd/etc/init.d/; for i in $( ls nova-* );do service $i restart; done
运行nova-manage service list 查看各服务的运行状况, 全为笑脸-_-,表示运行正常。
同步数据库:
nova-managedb sync
设置目录权限:
chown -Rnova:nova /etc/nova
chmod 644/etc/nova/nova.conf
至此,nova计算服务配置完成。
2.6 Cinder服务的安装部署:
执行命令:apt-getinstall cinder-api cinder-scheduler cinder-volume
dpkg-reconfigure cinder-common //配置cinder数据库
Cinder允许同时使用多个存储后端,如果你使用LVM做cinder的后端卷存储的话,你还需要在cinder节点安装 iscsitarget、iscsitarget-dkms作为ISCSI服务端 ,同时在每个需要挂载LVM卷的计算机点上,你都需要安装open-iscsi客户端,需要注意的是,默认的ISCSI服务由tgt提供,iscsitarget和tgt占用的是同一个端口(3260),所以你就需要在cinder配置文件里指定使用的是何种ISCSI服务端,不然俩者会抢占端口,发生冲突。
具体指定由cinder.conf中的iscsi_helper选项来确定,如果iscsi_helper = ietadm 则由iscsitarget提供服务,相应的;如果iscsi_helper = tgtadm,则由tgt提供服务。
Cinder组件安装完成后,需要编辑cinder.conf配置文件,默认的配置文件比较全而杂,实际上很多功能用不着,其可以根据自己的需要进行编写,具体配置可参考本地文件夹下的cinder.conf文件。
同步数据库,建立数据库列表:
cinder-managedb sync
重启cinder的所有服务:
cd/etc/init.d/; for i in $( ls cinder-* );do service $i restart; done
查看cinder各服务状态:
cinder-manageservice list
全文笑脸-_-的话,表示服务已正常启动。
如果使用iscsitarget,则安装完成后还需要修改/etc/default/iscsitarget默认文件,启动iscsitarget服务:
sed -i 's/false/true/g' /etc/default/iscsitarget
重启iscsitarget服务:
serviceiscsitarget restart
创建物理卷、卷组:
# pvcreate/dev/sdb
# vgcreatecinder-volumes /dev/sdb \\卷组名是由配置文件指定的
# losetup/dev/loop/ cinder-volumes \\挂载卷组
卷组扩容:
# pvcreate/dev/sdc \\创建物理卷
# vgextendcinder-volumes /dev/sdc
如果没有提前划分好的LVM分区的话,可以dd一个临时的虚拟磁盘文件做测试使用。
#ddif=/dev/zero of=cinder-volumes bs=1 count=0 seek=50G
如果使用glusterfs作为存储后端的话,受限于kvm的内核版本,可能需要修改openstack计算节点的nova源码,才能够正常挂载glusterfs卷和使用glusterfs卷中的镜像,具体详见openstack的问题处理文档。
2.7 Neutron服务的安装部署:
执行命令:apt-getinstall neutron-server
dpkg-reconfigure neutron-common
编辑/etc/neutron/neutron.conf配置文件:
####开启rabbit消息中枢####
rpc_backend= neutron.openstack.common.rpc.impl_kombu
清除关于rabbit的所有选项注释并修改
####修改keystone验证选项###
[keystone_authtoken]
auth_host =10.0.0.18
admin_tenant_name= service
admin_user= neutron
admin_password= stack
####修改数据库选项####
connection= mysql://neutron:stack@10.0.0.15:3306/neutron
编辑/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini配置文件,指明VLAN模式和使用physnet1作为外部vlan通道:
tenant_network_type = vlan
integration_bridge= br-int
network_vlan_ranges= physnet1:1:4094
重启服务:
# service neutron-serverrestart
2.8 Horizon服务的安装部署:
执行命令:apt-getinstall openstack-dashboard python-memcache
memcachedlibapache2-mod-wsgi openstack-dashboard-apache
安装过程可能会弹出(1)horizon是否使用80默认端口(2)浏览器访问的时候是否使用安全协议(http or https)的选项,可以根据自己的需求进行选择,建议都选择Yes 。
编辑/etc/openstack-dashboard/local_settings.py配置文件,调整其中的CACHES['default']['LOCATION']选项,使其与/etc/memcached.conf中的配置保持一致,用于启用memcache组件缓存页面。
CACHES= {
'default':{
'BACKEND': 'django.core.cache.backends.memcached. MemcachedCache',
'LOCATION': '127.0.0.1:11211'
}
}
同时修改其中指定的验证主机IP:
OPENSTACK_HOST= "10.0.0.18" //keystone主机IP地址
重启服务:
# serviceapache2 restart
# servicememcached restart
现在,你就可以使用浏览器去访问Horizon仪表盘了,地址为:
https://Horizon IP:Port //Port默认为80端口
如果安装时没有选择使用安全协议的话:地址要改为:
http://Horizon IP:Port //Port默认为80端口
三 计算节点的服务安装:
3.1 基础服务的安装部署:
执行命令:apt-get install kvmlibvirt-bin emacs open-iscsi sysfstoolssg3-utils multipath-tools
KVM是一个开源的系统虚拟化模块,是实现云的基础,也可以选择使用其他虚拟化模块,比如XEN,Emacs 是一个强大的文本编辑器,open-iscsi是ISCSI服务的客户端,用来提供远程的逻辑卷服务 ,sysfstools sg3-utils Multipath-tools是系统工具包。
安装完成后,加载kvm,重启libvirt:
modprobe -a kvm
service libvirt-bin restart
3.2 Nova-compute服务的安装部署:
执行命令:apt-getinstall nova-compute-kvm python-guestfs
dpkg-reconfigure nova-common //配置nova数据库
编辑/etc/nova/nova.c onf配置文件,具体可参考本地文件夹下的相关文档,需要关注的就是VNC的配置部分,其与控制节点的配置有点区别,还有就是注意修改iscsi配置项,iscsi_helper=iscsiadm,对应的cinder服务端是iscsitarget而不是tgt。
nova.conf配置文件编辑完成后,重启服务:
service nova-compute restart
3.3 OVS服务的安装部署
执行命令:apt-get install neutron-plugin-openvswitch-agent open
vswitch-switch openvswitch-datapath-dkms
dpkg-reconfigureneutron-common
编辑/etc/neutron/neutron.conf和/etc/neutron/plugins/openvswitch
/ovs_neutron_plugin.ini配置文件,具体可以参考前几节讲的neutron服务器配置,主要需要修改的地方包括rabbitmq选项、keystone验证选项、Mysql数据库选项等。
重启服务:
service openvswitch-switch restart
创建网桥、绑定网卡:
# ovs-vsctl add-br br-int
# ovs-vsctl add-br br-eth1
#ovs-vsctl add-port br-eth1 eth1
编辑/etc/network/interfaces配置文件,修改eth0网卡的IP设置:
# The primary network interface
auto br-eth1
iface br-eth1 inet static
address 10.9.32.3
netmask 255.255.255.0
gateway 10.9.32.254
auto eth1
iface eth1 inet manual
up ip address add 0/0 dev $IFACE
up ip link set $IFACE up
down ip link set $IFACE down
移除eth0 网卡的IP地址,将其配置给br-eth1外部网桥:
ip addr del 10.9.32.3/24 dev eth1
ip addr add10.9.32.3/24 dev br-eth1
重启网卡:
servicenetworking restart
重启OVS代理服务:
serviceneutron-plugin-openvswitch-agent restart
配置路由规则,以便镜像可以获取元数据:
iptables -tnat -A PREROUTING -d 169.254.169.254/32 -p tcp -m tcp --dport 80 -j DNAT--to-destination $NOVA_API_IP:8775
四 网络节点的服务安装:
4.1 网络代理服务的安装部署:
执行命令:apt-getinstall openvswitch-switch neutron-plugin-openv
switch-agentneutron-dhcp-agent neutron-l3-agent
重启Open vSwitch:
service openvswitch-switch start
创建网桥、绑定网卡:
ovs-vsctl add-br br-int
ovs-vsctl add-br br-ex //三级路由代理的外部端口
ovs-vsctl add-br br-eth1 //网络节点和计算节点的vlan端口
ovs-vsctl add-port br-ex eth0 //绑定eth0网口到br-ex
ovs-vsctl add-port br-eth1 eth1 //绑定eth1网口到br-eth1
升级网络配置文件:/etc/neutron/neutron.conf:
rabbit_password = guest
rabbit_host = controller
rabbit_password = RABBIT_PASS
[database]
connection=mysql://neutron:NEUTRON_DBPASS@MysqlIP:3306/neutron
编辑/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini配置文件:
[ovs]
tenant_network_type=vlan
network_vlan_ranges = physnet1:1:4094
bridge_mappings = physnet1:br-eth1
编辑三级路由代理配置文件,增加以下行:
[DEFAULT]
auth_url = http://KeystoneIP:35357/v2.0
admin_tenant_name = service
admin_user = neutron
admin_password = NEUTRON_PASS
metadata_ip = Nova_API_IP
use_namespaces = False
编辑API配置文件,增加以下行:
[DEFAULT]
auth_host = KeystoneIP
admin_tenant_name = service
admin_user = neutron
admin_password = NEUTRON_PASS
编辑dhcp配置文件:/etc/neutron/dhcp_agent.ini:
debug = True
use_namespaces = False //多命名空间,需要系统支持;
重启网络服务:
#service neutron-plugin-openvswitch-agent start
# service neutron-dhcp-agent restart
# service neutron-l3-agent restart