因为实验室需要增加一台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
二、配置其它环境
这里,主要是要配置NTP服务,数据库服务。
1.使用如下命令安装ntp服务,然后进入/etc/ntp.conf文件,添加server controller,如下图所示
apt-get install ntp
2.使用如下的命令安装数据库服务组件
sudo apt-get install python-mysqldb
三、配置Compute服务
使用如下的python脚本配置compute服务,代码的意思,在以前的博客里已经写了,就不再赘述了。注意要修改ip,我的环境下compute2节点的ip是10.0.0.32。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服务
执行如下的python脚本来安装Nova的Network服务即可。具体不再赘述了。注意,要修改public_interface和flat_interface的值,这个两个值都是外网的网卡,需要根据具体情况来定,我使用的是eth1。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
2.登陆Dashboard,查看节点是否安装成功。在Dashboard页面的管理员界面上可看到刚才新增的节点。
3.往新增节点上安装镜像,看能否安装成功。
如果一切正常,在装完镜像后,可看到如下图所示的结果,在管理员导航的实例中,可看到,刚才我新建的cirros3运行在我们新添加进来的openstack-1-0主机上,可通过控制台进入该主机。
虚拟机可ping通外网,外网也能ping通虚拟机,证明网络正常。
至此,新增compute节点的工作就完成了,还是比较简单的,可用脚本代替手工完成大部分的工作。我也感受到openstack的松耦合性了。