因为实验室需要增加一台openstack集群的compute节点,所以这里记录一下增加compute节点的过程。集群使用的仍然是FlatDHCP的网络方式。

新增节点的机器依然是双网卡的,这里特别注意一下,不能使用一个以太网卡和一个无线网卡做为双网卡,因为无线网卡是不能桥接到网桥br100上的,否则会收到如下的错误:Error: Failed to add interface: can't add wlan0 to bridge br100: Operation not supported。

新增节点的系统是ubuntu 14.04。这里的操作都是在controller节点上进行,然后用ssh或scp与各节点通信。

一、配置网络环境


1.依然使用双网卡的方式,外网使用的网卡是eth1,内网用eth0,将内网ip设置成10.0.0.31,设置网络的方式我直接在ubuntu图形操作界面上完成,就不再赘述了。


2.在controller节点和compute1节点的/etc/hosts文件里增加compute2的ip地址;在compute2节点的/etc/hosts文件里增加controller节点和compute1节点的ip地址,如下所示。


127.0.0.1 localhost hjy-MS-7673
#127.0.1.1 hjy-MS-7673
10.0.0.11 controller
10.0.0.31 compute1
10.0.0.32 compute2

注意,要把127.0.1.1注释了,然后重启网络服务,使之生效。


3.验证网络环境是否配置正确,通过在各个节点上ping其它节点、再ping www.baidu.com,如果都能ping通,说明网络环境已经配置正确了。


4.注:这里因为要操作多台机器,所以可以在每台机器上安装openssh-server,这样就可以通过ssh远程访问了,使用的命令如下,当然,也可以通过配置,来进行免密码的ssh访问。


sudo apt-get install openssh-server
ssh compute2

二、配置其它环境


1.使用如下命令安装ntp服务,然后进入/etc/ntp.conf文件,添加server controller,如下图所示


apt-get install ntp



openstack cinder组件提供对象存储服务 openstack的compute组件名称_外网


2.使用如下的命令安装数据库服务组件


sudo apt-get install python-mysqldb

三、配置Compute服务


import os
import ConfigParser

os.system('sudo apt-get install nova-compute-kvm')

keystone_authtoken = {'auth_uri':'http://controller:5000','auth_host':'controller', 'auth_port':'35357', 'auth_protocol':'http', 'admin_tenant_name':'service', 'admin_user': 'nova', 'admin_password':'123456'}

rabbit = {'rpc_backend':'rabbit', 'rabbit_host':'controller', 'rabbit_password':'123456'}

vnc = {'my_ip':'10.0.0.32', 'vnc_enabled':'True', 'vncserver_listen':'0.0.0.0', 'vncserver_proxyclient_address':'10.0.0.32', 'novncproxy_base_url':'http://controller:6080/vnc_auto.html'}

config = ConfigParser.ConfigParser()
os.system('cp /etc/nova/nova.conf /etc/nova/nova.conf.cp') # copy
print "cp /etc/nova/nova.conf done!" 
with open('/etc/nova/nova.conf', 'rw') as cfgfile:
	config.readfp(cfgfile)
	config.set('DEFAULT', 'auth_strategy','keystone')
	config.set('DEFAULT', 'glance_host', 'controller')
	sections = config.sections()
	if 'keystone_authtoken' not in sections:
		config.add_section('keystone_authtoken') 
	if 'database' not in sections:
		config.add_section('database')
	# set [database]
	config.set('database', 'connection', 'mysql://nova:123456@controller/nova')
	for (k,v) in keystone_authtoken.iteritems():
		config.set('keystone_authtoken', k, v)
	for (k,v) in rabbit.iteritems():
		config.set('DEFAULT', k, v)
	for (k,v) in vnc.iteritems():
		config.set('DEFAULT', k, v)
	config.write(open('/etc/nova/nova.conf', 'w'))

output = os.popen("egrep -c '(vmx|svm)' /proc/cpuinfo")
out = output.readlines()
acc_value = out[0].strip()
print "The acc_value is " + acc_value

if (acc_value < 1):
	os.system('cp /etc/nova/nova-compute.conf /etc/nova/nova-compute.conf.cp')
	with open('/etc/nova/nova-compute.conf', 'rw') as cfgfile:
		config.readfp(cfgfile)
		sections = config.sections()
		if 'libvirt' not in sections:
			config.add_section('libvirt')
		config.set('libvirt', 'virt_type', 'qemu')
		config.write(open('/etc/nova/nova-compute.conf', 'w'))	

os.system('rm /var/lib/nova/nova.sqlite')
os.system('service nova-compute restart')

写完这个脚本,可以使用scp命令,将这个文件发送到compute2节点上,命令如下,传送完执行这个python脚本就可以了。


scp -r /home/hjy/work/openstack/config_compute_nod.py openstack@compute2:/home/openstack/openstack_python/compute_service.py

四、配置Network服务


import os
import ConfigParser

os.system('sudo apt-get install nova-network nova-api-metadata')

net_set = {'network_api_class':'nova.network.api.API', 'security_group_api':'nova', 'firewall_driver':'nova.virt.libvirt.firewall.IptablesFirewallDriver', 'network_manager':'nova.network.manager.FlatDHCPManager', 'network_size':'254', 'allow_same_net_traffic':'False', 'multi_host':'True', 'send_arp_for_ha':'True', 'share_dhcp_address':'True', 'force_dhcp_release':'True','flat_network_bridge':'br100','flat_interface':'eth1','public_interface':'eth1'}

config = ConfigParser.ConfigParser()
config.readfp(open('/etc/nova/nova.conf', 'rw'))
for k,v in net_set.iteritems():
	config.set('DEFAULT', k, v)
config.write(open('/etc/nova/nova.conf', 'w'))

os.system('service nova-network restart')
os.system('service nova-api-metadata restart')

五、检验是否安装成功


1.使用如下的命令查看kvm是否可用,若不可用,则进入BIOS,将CPU虚拟化的功能开启即可。如果CPU不支持虚拟化的话,就没有办法了。


kvm-ok



openstack cinder组件提供对象存储服务 openstack的compute组件名称_python_02


2.登陆Dashboard,查看节点是否安装成功。在Dashboard页面的管理员界面上可看到刚才新增的节点。




openstack cinder组件提供对象存储服务 openstack的compute组件名称_外网_03



3.往新增节点上安装镜像,看能否安装成功。


如果一切正常,在装完镜像后,可看到如下图所示的结果,在管理员导航的实例中,可看到,刚才我新建的cirros3运行在我们新添加进来的openstack-1-0主机上,可通过控制台进入该主机。



openstack cinder组件提供对象存储服务 openstack的compute组件名称_外网_04



虚拟机可ping通外网,外网也能ping通虚拟机,证明网络正常。



openstack cinder组件提供对象存储服务 openstack的compute组件名称_虚拟机_05





至此,新增compute节点的工作就完成了,还是比较简单的,可用脚本代替手工完成大部分的工作。我也感受到openstack的松耦合性了。