OpenStack多节点部署

这是博主 @Ethan_熠森张将近一个月的劳动成果吧?有需要的人赶紧mark, 同时不要忘记感谢博主


OpenStack多节点部署(一)——服务器选型

      服务器的选型在类似于我们这样的非互联网类的传统公司也会成为一个很大的问题。以为之前并没有相关大规模服务器部署的经验,而且在采购等等环节受制于国企的一些制度和利益的影响,并不是能如意的选择到自己真正适合需要的机器。

这几年我买买的最多的机器还是DELL的,因为是集团的指定供应商。但是感觉服务很一般,尤其是官方的服务,二级分销商可能还会热情一些。而且在销售上,二级分销商和官方居然是竞争的关系,经常会因为抢做我们的单子而发生争执。
另外,我总觉得DELL的机器要比惠普的差一些,特别是在主板布局以及接口等方面,如果你手边有这两种服务器的话把机箱盖打开对比一下就知道了。另外网上提到现在国产服务器的份额也在逐年增加,像联想、曙光等等,做的也不错,这个我没接触过,就不评论了。
我们用的做多的机型是R710和R510,相信大家对着两款机型比较熟悉,是兼容性比较强的机器,属于拿来做什么项目都行的类型。可扩展性比较强,DELL提供的扩展组件也比较多。如果后期要升级的话,建议最好找二级分销商,价格会低很多。同是国企的朋友最好注意第一次购买的时候一定要根据项目需求配置双CPU和大内存,因为这两块占的比重很大,不然后期升级的时候费用很高,相信财务上会比较麻烦。
DELL最近为了适应云计算领域新推出了PowerEdge C系列的机器, C6100、C6105、以及C6220,比较适用于云计算的大内存,大存储空间的特点,移除了云计算不会涉及到的一些组件,降低了成本,也是可以考虑下的。
还有就是买KVM的时候千万别忘了RemoteKey,不然总跑机房也挺麻烦的。


OpenStack多节点部署(二)——操作系统安装

前面一章中,为大家介绍了搭建云计算运营系统的服务器选型,相信经过这段时间,大家都已经成功采购到了符合业务量需求的服务器配置。下面将分享操作系统的安装过程中的思路:

如果您已经从WIKI得到了OpenStack的部署文档,比如os-compute-starterguide-trunk,您会发现文档中的安装演示步骤都是以Ubuntu为模板的。这也不足为怪,因为OpenStack基金会与Ubuntu的东家Canonical合作甚密;并且文档是以搭建实验开发平台为读者目标进行编攒的,以Ubuntu的apt-get管理方式进行OpenStack的安装确实也会给初学者带来许多方便。但是,如果您需要搭建一个多节点平台,一个真正需要运营的生产环境,还是建议使用CentOs,或者是商业系统RedHat等。因为毕竟Ubuntu开发中面向的群体主要还是桌面用户,对于服务器的支持并不是十分友好。刚开始接触OpenStack的时候,我也是按照教程使用的Ubuntu12.04作为操作系统,碰到了许多问题,拖延了部署的时间。

1、安装后开机不进入系统,显示并定在了initramfs,这是因为服务器启动时间过长让Ubuntu系统错认为是某些硬件系统初始化失败,系统默认的超时时间过短,我们需要在

[plain] view plain copy
  1. sudo vi /etc/default/grub  

中修改

[plain] view plain copy
  1. GRUB_CMDLINE_LINUX_DEFAULT="rootdelay=600"  

调大超时的时间,并且更新grub

[plain] view plain copy
  1. sudo grub-update  

2、在/etc/network/interfaces中修改网络配置后重启网络服务,发现IP并没有改为我们在配置文件中设置的IP,发现是因为启动了Gnome的桌面,桌面系统中的网络管理软件接管了网络服务,需要在桌面右上角手动将其禁用。

3、Ubuntu没完没了的更新,让你需要经常重启服务器,造成服务的中断。


种种问题因篇幅不一一赘述,虽然说Ubuntu在桌面电脑的表现上还是上佳的,但是服务器上我们还是选用较为稳定的CentOs6.3吧。


安装CentOS6.3最好为光盘安装,在mirrors下载CentOS-6.3-x86_64-bin-DVD1.iso,刻录一张DVD光盘。如果没有光驱,可以用ultraISO制作U盘安装盘,需要注意的是制作完U盘安装盘后还要将CentOS-6.3-x86_64-bin-DVD1.iso这个文件也拷贝到U盘的根目录下,并且要将bios的启动方式从bios方式改为EFI方式。

计算节点的分区可以选择默认模式,如果是控制节点推荐手动分区,因为要安装nova-volume服务,需要一个独立的LVM卷。

CentOS6.3网络设备的标识方法从Eth0改为了Em1,在做配置的时候需要注意。最近已经成功测试了在R510/710系列上利用自动化部署cobbler自动安装CentOS6.3系统,稍后有时间会给大家分享。

先写到这里,后面章节会给大家陆续介绍OpenStack各个组件在CentOS上的安装。


OpenStack多节点部署(三)——网络配置

在上一章中,和大家讨论了操作系统安装的方方面面,这章将带来OpenStack的网络配置。

初接触OpenStack的人,在看了部署文档之后,可能会被Nova-Network,Fix-ip,Floating-ip等概念弄的一头雾水,下面会一一详细道来。




Flat DHCP Network


上图大家可能看的不是很明白,其实OpenStack的nova-network部署可以分成3个网段。公网网段,内网网段和虚拟机网段。公网网段指的是可以直接访问到互联网的网段(但是此IP不一定非要从公司外部也能访问,这里的内外是从OpenStack网络系统出发而不是从公司网络的视角出发,请注意),也就是Floating IP配置的网段,我把它绑定在了Eth0。内网网段指的是OpenStack系统内各服务器之间互联的顶层交换机所划的网段,这里将其设置为192.168.3.X,此网段无需出口,我把它绑定在了Eth1,在公司的网络也就是公网网络是访问不到的。虚拟机网段指的是虚拟机运行时其IP所在的网段,也就是Nova-Network中提到的Fix-IP,由于NOVA底层是采用libvirt,所以OpenStack内部默认将其设置为桥接网络br100,这里将其桥接在内网网络上,也就是Eth1。

在服务器选型的时候,我们已经选择了千兆双网卡的机型。这样公网网段和内网网段就可以绑定到两个不同的网口。有的实验环境中,比如沙克老师的文章将两个公网和内网两个网段都配置在了一个网卡上,在实验环境是可以的,但是生产环境不推荐,因服务器如果和外部网络数据交换量大的时候,会使内部服务如nova-scheduler,nova-volume等服务带来延迟。

我的服务器网络配置

[plain] view plain copy
  1. auto lo  
  2. iface lo inet loopback  
  3.   
  4. auto eth0  
  5. iface eth0 inet static  
  6. address 10.2.15.3  
  7. netmask 255.255.255.0  
  8. broadcast 10.2.15.255  
  9. gateway 10.2.15.1  
  10. dns-nameservers 8.8.8.8  
  11.   
  12. auto eth1  
  13. iface eth1 inet static  
  14. address 192.168.3.1  
  15. netmask 255.255.255.0  
  16. network 192.168.3.0  
  17. broadcast 192.168.3.255  

上面提到的Flat DHCP Network是Nova-Network服务的一种模式。另外还有Flat,VLan等,这里就不一一介绍了。Flat DHCP指的是所有虚拟机处在同一个平坦的网段上,且DHCP服务自动为其分配IP。

配置Fixed-IP命令

[plain] view plain copy
  1. sudo nova-manage network create private --fixed_range_v4=192.168.3.32/27 --num_networks=1 --bridge=br100 --bridge_interface=eth1 --network_size=32  

使用此命令,我们可以详细配置虚拟机网段Fixed-IP所在的网段,掩码,桥接网络名称,桥接网络端口等参数,后面在NOVA章将详细介绍。


OpenStack多节点部署(四)——KeyStone

前面啰嗦了这么多,终于要正式进入OpenStack各组件安装部署的章节了。首先为大家带来的是OpenStack的用户登陆鉴权组件,KeyStone的安装。

首先,安装mysql服务,并分别创建Nova, glance, swift等组件独立的用户和口令

[plain] view plain copy
  1. sudo apt-get install mysql-server python-mysqldb  

安装过程中提示设置密码,这里设置为mygreatsecret

[plain] view plain copy
  1. sed -i '/bind-address/ s/127.0.0.1/0.0.0.0/' /etc/mysql/my.cnf  
  2. sudo restart mysql  
  3. sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE nova;'  
  4. sudo mysql -uroot -pmygreatsecret -e 'CREATE USER novadbadmin;'  
  5. sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON nova.* TO 'novadbadmin'@'%';"  
  6. sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'novadbadmin'@'%' = PASSWORD('novasecret');"  
  7. sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE glance;'  
  8. sudo mysql -uroot -pmygreatsecret -e 'CREATE USER glancedbadmin;'  
  9. sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON glance.* TO 'glancedbadmin'@'%';"  
  10. sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'glancedbadmin'@'%' = PASSWORD('glancesecret');"  
  11. sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE keystone;'  
  12. sudo mysql -uroot -pmygreatsecret -e 'CREATE USER keystonedbadmin;'  
  13. sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystonedbadmin'@'%';"  
  14. sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'keystonedbadmin'@'%' = PASSWORD('keystonesecret');"  

安装KeyStone组件

[plain] view plain copy
  1. sudo apt-get install keystone python-keystone python-keystoneclient  
  2. sed -i '/admin_token/ s/ADMIN/admin/' /etc/keystone/keystone.conf  
  3. sed -i '/connection/ s/sqlite\:\/\/\/\/var\/lib\/keystone\/keystone.db/mysql\:\/\/keystonedbadmin\:keystonesecret@192.168.3.1\/keystone/' /etc/keystone/keystone.conf  
  4. #注意修改mysql服务器地址  
  5. sudo service keystone restart  
  6. sudo keystone-manage db_sync  
  7. export SERVICE_ENDPOINT="http://localhost:35357/v2.0"  
  8. export SERVICE_TOKEN=admin  

后面就是按照文档,创建租户Tenants,创建用户Users,创建角色Roles,最后进行租户、用户、角色之间的关联。不管创建什么类型,都会返回一个UID值,后面的步骤会用到前面的id,比如用户角色关联命令

[plain] view plain copy
  1. keystone user-role-add --user $USER_ID --role $ROLE_ID --tenant_id $TENANT_ID  
这个$USER_ID和$ROLE_ID等就是前面创建用户或者角色时候得到的ID

比如先创建用户

[plain] view plain copy
  1. keystone user-create --name admin --pass admin --email admin@foobar.com  
查看ID
[plain] view plain copy
  1. keystone user-list  
  2. +----------------------------------+---------+-------------------+--------+  
  3. |                id                | enabled |       email       |  name  |  
  4. +----------------------------------+---------+-------------------+--------+  
  5. | b3de3aeec2544f0f90b9cbfe8b8b7acd | True    | admin@foobar.com  | admin  |  
  6. | ce8cd56ca8824f5d845ba6ed015e9494 | True    | nova@foobar.com   | nova   |  
  7. +----------------------------------+---------+-------------------+--------+  


如上,我们创建的名字为admin的用户就会显示出来,后面的步骤就要用这个ID。

大家会发现这样最非常麻烦,而且id这样拷贝很容易出错,所以我们要用脚本来自动完成上面的这些操作,以及service endpoint的操作。

脚本下载地址

[plain] view plain copy
  1. #!/bin/bash  
  2. #  
  3. # Initial data for Keystone using python-keystoneclient  
  4. #  
  5. # Tenant               User      Roles  
  6. # ------------------------------------------------------------------  
  7. # admin                admin     admin  
  8. # service              glance    admin  
  9. # service              nova      admin, [ResellerAdmin (swift only)]  
  10. # service              quantum   admin        # if enabled  
  11. # service              swift     admin        # if enabled  
  12. # service              cinder    admin        # if enabled  
  13. # service              heat      admin        # if enabled  
  14. # demo                 admin     admin  
  15. # demo                 demo      Member, anotherrole  
  16. # invisible_to_admin   demo      Member  
  17. # Tempest Only:  
  18. # alt_demo             alt_demo  Member  
  19. #  
  20. # Variables set before calling this script:  
  21. # SERVICE_TOKEN - aka admin_token in keystone.conf  
  22. # SERVICE_ENDPOINT - local Keystone admin endpoint  
  23. # SERVICE_TENANT_NAME - name of tenant containing service accounts  
  24. # SERVICE_HOST - host used for endpoint creation  
  25. # ENABLED_SERVICES - stack.sh's list of services to start  
  26. # DEVSTACK_DIR - Top-level DevStack directory  
  27. # KEYSTONE_CATALOG_BACKEND - used to determine service catalog creation  
  28. SERVICE_HOST=${SERVICE_HOST:-192.168.3.1}  
  29. #将这个IP修改为Keystone服务器的内网IP  
  30. SERVICE_TOKEN=${SERVICE_TOKEN:-admin}  
  31. SERVICE_ENDPOINT=${SERVICE_ENDPOINT:-http://localhost:35357/v2.0}  
  32. # Defaults  
  33. export SERVICE_TOKEN=$SERVICE_TOKEN  
  34. export SERVICE_ENDPOINT=$SERVICE_ENDPOINT  
  35. SERVICE_TENANT_NAME=${SERVICE_TENANT_NAME:-service}  
  36.   
  37. function get_id () {  
  38.     echo `"$@" | awk '/ id / { print $4 }'`  #  '$@'代表函数的参数,参数就是get_id后面接的KeyStone命令  
  39. }  
  40.   
  41.   
  42. # Tenants  
  43. # -------  
  44.   
  45. ADMIN_TENANT=$(get_id keystone tenant-create --name=admin)  
  46. SERVICE_TENANT=$(get_id keystone tenant-create --name=$SERVICE_TENANT_NAME)  
  47.   
  48.   
  49. # Users  
  50. # -----  
  51.   
  52. ADMIN_USER=$(get_id keystone user-create --name=admin \  
  53.                                          --pass=admin \  
  54.                                          --email=admin@example.com)  
  55. NOVA_USER=$(get_id keystone user-create --name=nova \  
  56.                                         --pass=nova \  
  57.                                         --email=demo@example.com)  
  58. GLANCE_USER=$(get_id keystone user-create --name=glance \  
  59.                                         --pass=glance \  
  60.                                         --email=demo@example.com)  
  61. SWIFT_USER=$(get_id keystone user-create --name=swift \  
  62.                                         --pass=swift \  
  63.                                       --email=demo@example.com)  
  64. # Roles  
  65. # -----  
  66.   
  67. ADMIN_ROLE=$(get_id keystone role-create --name=admin)  
  68. # ANOTHER_ROLE demonstrates that an arbitrary role may be created and used  
  69. # TODO(sleepsonthefloor): show how this can be used for rbac in the future!  
  70. MEMBER_ROLE=$(get_id keystone role-create --name=Member)  
  71.   
  72.   
  73. # Add Roles to Users in Tenants  
  74. keystone user-role-add --user_id $ADMIN_USER --role_id $ADMIN_ROLE --tenant_id $ADMIN_TENANT  
  75. keystone user-role-add --user_id $NOVA_USER --role_id $ADMIN_ROLE --tenant_id $SERVICE_TENANT  
  76. keystone user-role-add --user_id $GLANCE_USER --role_id $ADMIN_ROLE --tenant_id $SERVICE_TENANT  
  77. keystone user-role-add --user_id $SWIFT_USER --role_id $ADMIN_ROLE --tenant_id $SERVICE_TENANT  
  78.   
  79. # The Member role is used by Horizon and Swift so we need to keep it:  
  80. keystone user-role-add --user_id $ADMIN_USER --role_id $MEMBER_ROLE --tenant_id $ADMIN_TENANT  
  81.   
  82.   
  83. # Services  
  84. # --------  
  85.   
  86. # Keystone  
  87.   
  88.     KEYSTONE_SERVICE=$(get_id keystone service-create \  
  89.         --name=keystone \  
  90.         --type=identity \  
  91.         --description="Keystone Identity Service")  
  92.     keystone endpoint-create \  
  93.         --region RegionOne \  
  94.         --service_id $KEYSTONE_SERVICE \  
  95.         --publicurl "http://$SERVICE_HOST:5000/v2.0" \  
  96.         --adminurl "http://$SERVICE_HOST:35357/v2.0" \  
  97.         --internalurl "http://$SERVICE_HOST:5000/v2.0"  
  98.   
  99.   
  100. # Nova  
  101.         NOVA_SERVICE=$(get_id keystone service-create \  
  102.             --name=nova \  
  103.             --type=compute \  
  104.             --description="Nova Compute Service")  
  105.         keystone endpoint-create \  
  106.             --region RegionOne \  
  107.             --service_id $NOVA_SERVICE \  
  108.             --publicurl "http://$SERVICE_HOST:8774/v2/\$(tenant_id)s" \  
  109.             --adminurl "http://$SERVICE_HOST:8774/v2/\$(tenant_id)s" \  
  110.             --internalurl "http://$SERVICE_HOST:8774/v2/\$(tenant_id)s"  
  111.   
  112.     # Nova needs ResellerAdmin role to download images when accessing  
  113.     # swift through the s3 api. The admin role in swift allows a user  
  114.     # to act as an admin for their tenant, but ResellerAdmin is needed  
  115.     # for a user to act as any tenant. The name of this role is also  
  116.     # configurable in swift-proxy.conf  
  117.     #RESELLER_ROLE=$(get_id keystone role-create --name=ResellerAdmin)  
  118.     #keystone user-role-add \  
  119.     #    --tenant_id $SERVICE_TENANT \  
  120.     #    --user_id $NOVA_USER \  
  121.     #    --role_id $RESELLER_ROLE  
  122.   
  123.               
  124. # Volume  
  125.         VOLUME_SERVICE=$(get_id keystone service-create \  
  126.             --name=volume \  
  127.             --type=volume \  
  128.             --description="Volume Service")  
  129.         keystone endpoint-create \  
  130.             --region RegionOne \  
  131.             --service_id $VOLUME_SERVICE \  
  132.             --publicurl "http://$SERVICE_HOST:8776/v1/\$(tenant_id)s" \  
  133.             --adminurl "http://$SERVICE_HOST:8776/v1/\$(tenant_id)s" \  
  134.             --internalurl "http://$SERVICE_HOST:8776/v1/\$(tenant_id)s"  
  135.   
  136.   
  137.   
  138.   
  139. # Glance  
  140.         GLANCE_SERVICE=$(get_id keystone service-create \  
  141.             --name=glance \  
  142.             --type=image \  
  143.             --description="Glance Image Service")  
  144.         keystone endpoint-create \  
  145.             --region RegionOne \  
  146.             --service_id $GLANCE_SERVICE \  
  147.             --publicurl "http://$SERVICE_HOST:9292/v1" \  
  148.             --adminurl "http://$SERVICE_HOST:9292/v1" \  
  149.             --internalurl "http://$SERVICE_HOST:9292/v1"  
  150.   
  151.   
  152. # Swift  
  153.         SWIFT_SERVICE=$(get_id keystone service-create \  
  154.             --name=swift \  
  155.             --type="object-store" \  
  156.             --description="Swift Service")  
  157.         keystone endpoint-create \  
  158.             --region RegionOne \  
  159.             --service_id $SWIFT_SERVICE \  
  160.             --publicurl "http://$SERVICE_HOST:8080/v1/AUTH_\$(tenant_id)s" \  
  161.             --adminurl "http://$SERVICE_HOST:8080/v1" \  
  162.             --internalurl "http://$SERVICE_HOST:8080/v1/AUTH_\$(tenant_id)s"  
  163.   
  164.   
  165.   
  166. # EC2  
  167.         EC2_SERVICE=$(get_id keystone service-create \  
  168.             --name=ec2 \  
  169.             --type=ec2 \  
  170.             --description="EC2 Compatibility Layer")  
  171.         keystone endpoint-create \  
  172.             --region RegionOne \  
  173.             --service_id $EC2_SERVICE \  
  174.             --publicurl "http://$SERVICE_HOST:8773/services/Cloud" \  
  175.             --adminurl "http://$SERVICE_HOST:8773/services/Admin" \  
  176.             --internalurl "http://$SERVICE_HOST:8773/services/Cloud"  

最后,用命令验证查看KeyStone是否安装正确

[plain] view plain copy
  1. keystone tenant-list  
  2. keystone user-list  
  3. keystone role-list  
  4. keystone service-list  


好了,有关KeyStone的相关部署方法就介绍到这里。


OpenStack多节点部署(五)——Nova

这章将为大家介绍OpenStack最重要的核心组件,虚拟机管理组件Nova的安装部署。虽然是最重要的组件,但是因为包装的非常完整,所以如果前面的网络配置和KeyStone部署都正确完成的话,Nova组件的安装是非常简单的。

首先安装Nova组件

[plain] view plain copy
  1. sudo apt-get install nova-api nova-cert nova-compute nova-compute-kvm nova-doc nova-network nova-objectstore nova-scheduler nova-volume rabbitmq-server novnc nova-consoleauth  

2013-02-21 修改

OpenStack服务器节点迁移(修改IP)后引发的nova-compute不启动 由于这篇文章提到的遇到服务器搬迁外网地址需要修改等问题,导致nova不能启动,这里在nova.conf中增加--iscsi_ip_address=192.168.3.1,这样系统创建的volume都会指向内网IP,避免类似的错误。

修改节点的/etc/nova/nova.conf配置文件

[plain] view plain copy
  1. --dhcpbridge_flagfile=/etc/nova/nova.conf  
  2. --dhcpbridge=/usr/bin/nova-dhcpbridge  
  3. --logdir=/var/log/nova  
  4. --state_path=/var/lib/nova  
  5. --lock_path=/var/lock/nova  
  6. --allow_admin_api=true  
  7. --use_deprecated_auth=false  
  8. --auth_strategy=keystone  
  9. --scheduler_driver=nova.scheduler.simple.SimpleScheduler  
  10. --s3_host=192.168.3.1  
  11. --ec2_host=192.168.3.1  
  12. --rabbit_host=192.168.3.1  
  13. --cc_host=192.168.3.1  
  14. --nova_url=http://192.168.3.1:8774/v1.1/  
  15. --routing_source_ip=192.168.3.1  
  16. --glance_api_servers=192.168.3.1:9292  
  17. --image_service=nova.image.glance.GlanceImageService  
  18. --iscsi_ip_prefix=192.168.4  
  19. --iscsi_ip_address=192.168.3.1  
  20. --sql_connection=mysql://novadbadmin:novasecret@192.168.3.1/nova  
  21. --ec2_url=http://192.168.3.1:8773/services/Cloud  
  22. --keystone_ec2_url=http://192.168.3.1:5000/v2.0/ec2tokens  
  23. --api_paste_config=/etc/nova/api-paste.ini  
  24. --libvirt_type=kvm  
  25. --libvirt_use_virtio_for_bridges=true  
  26. --start_guests_on_host_boot=true  
  27. --resume_guests_state_on_host_boot=true  
  28. # VNC specific configuration  
  29. --novnc_enabled=true  
  30. --novncproxy_base_url=http://10.2.15.3:6080/vnc_auto.html  
  31. --vncserver_proxyclient_address=10.2.15.3  
  32. --vncserver_listen=10.2.15.3  
  33. # network specific settings  
  34. --network_manager=nova.network.manager.FlatDHCPManager  
  35. --public_interface=eth0  
  36. --flat_interface=eth1  
  37. --flat_network_bridge=br100  
  38. --fixed_range=192.168.4.1/27  
  39. --floating_range=10.2.15.254/25  
  40. --network_size=32  
  41. --flat_network_dhcp_start=192.168.4.33  
  42. --flat_injected=False  
  43. --force_dhcp_release  
  44. --iscsi_helper=tgtadm  
  45. --connection_type=libvirt  
  46. --root_helper=sudo nova-rootwrap  
  47. --verbose  

配置文件中需要注意的是各服务访问的IP地址,OpenStack多节点部署(三)——网络配置中介绍过,我的控制节点有两个IP,一个是OpenStack系统内网IP 192.168.3.1,另一个是公司内部可访问Internet的IP 10.2.15.3。这里推荐将服务IP写成内网IP 192.168.3.1,这样如果控制节点搬迁,或者公司10网段IP变更,那么我们的配置文件可以不动。

但是要注意的是

[plain] view plain copy
  1. --novncproxy_base_url=http://10.2.15.3:6080/vnc_auto.html  
  2. --vncserver_proxyclient_address=10.2.15.3  

这两个VNC参数的IP要为公司内部网络10网段的IP,因为这个必须是从服务器系统外围能访问的IP。

配置文件参数详解可参见bk-compute-adminguide-essex.pdf

之后为Nova-volume服务创建独立的逻辑卷

[plain] view plain copy
  1. sudo pvcreate /dev/sda6  

这里将/dev/sda6为你之前格式化为LVM的分区

创建名为nova-volumes的卷组
[plain] view plain copy
  1. sudo vgcreate nova-volumes /dev/sda6  
修改配置文件权限
[plain] view plain copy
  1. sudo chown -R nova:nova /etc/nova  
  2. sudo chmod 644 /etc/nova/nova.conf  
修改/etc/nova/api-paste.ini,填写nova服务在keystone注册的用户名密码
[plain] view plain copy
  1. sed -i '/admin_tenant_name/ s/%SERVICE_TENANT_NAME%/service/' /etc/nova/api-paste.ini  
  2. sed -i '/admin_user/ s/%SERVICE_USER%/nova/' /etc/nova/api-paste.ini  
  3. sed -i '/admin_password/ s/%SERVICE_PASSWORD%/nova/' /etc/nova/api-paste.ini  
同步数据库
[plain] view plain copy
  1. sudo nova-manage db sync  
创建虚拟机所在的Fixed_ip的ip地址段
[plain] view plain copy
  1. sudo nova-manage network create private --fixed_range_v4=192.168.4.32/27 --num_networks=1 --bridge=br100 --bridge_interface=eth1 --network_size=32  
192.168.4.32/27表示IP段从32开始,并且子网掩码为前27位为1

写入环境变量

[plain] view plain copy
  1. export OS_TENANT_NAME=admin  
  2. export OS_USERNAME=admin  
  3. export OS_PASSWORD=admin  
  4. export OS_AUTH_URL="http://192.168.3.1:5000/v2.0/"  
最后重启各服务
[plain] view plain copy
  1. sudo restart libvirt-bin; sudo restart nova-network; sudo restart nova-compute; sudo restart nova-api; sudo restart nova-objectstore; sudo restart nova-scheduler; sudo restart nova-volume; sudo restart nova-consoleauth;  

再增加计算节点只需要安装nova-compute

[plain] view plain copy
  1. sudo apt-get install nova-compute  
修改计算节点的配置文件
[plain] view plain copy
  1. --dhcpbridge_flagfile=/etc/nova/nova.conf  
  2. --dhcpbridge=/usr/bin/nova-dhcpbridge  
  3. --logdir=/var/log/nova  
  4. --state_path=/var/lib/nova  
  5. --lock_path=/run/lock/nova  
  6. --allow_admin_api=true  
  7. --use_deprecated_auth=false  
  8. --auth_strategy=keystone  
  9. --scheduler_driver=nova.scheduler.simple.SimpleScheduler  
  10. --s3_host=192.168.3.1  
  11. --ec2_host=192.168.3.1  
  12. --rabbit_host=192.168.3.1  
  13. --cc_host=192.168.3.1  
  14. --nova_url=http://192.168.3.1:8774/v1.1/  
  15. --routing_source_ip=192.168.3.1  
  16. --glance_api_servers=192.168.3.1:9292  
  17. --image_service=nova.image.glance.GlanceImageService  
  18. --iscsi_ip_prefix=192.168.4  
  19. --sql_connection=mysql://novadbadmin:novasecret@192.168.3.1/nova  
  20. --ec2_url=http://192.168.3.1:8773/services/Cloud  
  21. --keystone_ec2_url=http://192.168.3.1:5000/v2.0/ec2tokens  
  22. --api_paste_config=/etc/nova/api-paste.ini  
  23. --libvirt_type=kvm  
  24. --libvirt_use_virtio_for_bridges=true  
  25. --start_guests_on_host_boot=true  
  26. --resume_guests_state_on_host_boot=true  
  27. # vnc specific configuration  
  28. --novnc_enabled=true  
  29. --novncproxy_base_url=http://10.2.15.3:6080/vnc_auto.html  
  30. --vncserver_proxyclient_address=10.2.15.4  
  31. --vncserver_listen=10.2.15.4  
  32. # network specific settings  
  33. --network_manager=nova.network.manager.FlatDHCPManager  
  34. --public_interface=eth0  
  35. --flat_interface=eth1  
  36. --flat_network_bridge=br100  
  37. --fixed_range=192.168.4.1/27  
  38. --floating_range=10.2.15.4/27  
  39. --network_size=32  
  40. --flat_network_dhcp_start=192.168.4.33  
  41. --flat_injected=False  
  42. --force_dhcp_release  
  43. --iscsi_helper=tgtadm  
  44. --connection_type=libvirt  
  45. --root_helper=sudo nova-rootwrap  
  46. --verbose  
各计算节点间配置文件的不同点只有
[plain] view plain copy
  1. --novncproxy_base_url=http://10.2.15.3:6080/vnc_auto.html  
  2. --vncserver_proxyclient_address=10.2.15.4  

其IP为计算节点的IP

最后,查看是否各服务安装成功,各计算节点是否正常

[plain] view plain copy
  1. sudo nova-manage service list 

OpenStack多节点部署(六)——glance

本章将为大家介绍OpenStack的镜像管理系统glance,负责存储和管理OpenStack的镜像和虚拟机的快照等。本章将是OpenStack多节点部署系列的最后一章了,在此也感谢大家一直以来对我的支持。还是那句话,stacker们大家可以在留言区多交流,我看到会及时回复的。

glance的安装部署比较简单,前半部分花一些时间讲解glance部署步骤,后面的篇幅主要介绍各类操作系统镜像制作的方方面面。

首先安装glance的软件包

[plain] view plain copy
  1. sudo apt-get install glance glance-api glance-client glance-common glance-registry python-glance  

修改glance api的配置文件,主要是填写在keystone中设置的用户名密码等

[plain] view plain copy
  1. sed -i '/admin_tenant_name/ s/%SERVICE_TENANT_NAME%/service/' /etc/glance/glance-api-paste.ini  
  2. sed -i '/admin_user/ s/%SERVICE_USER%/glance/' /etc/glance/glance-api-paste.ini  
  3. sed -i '/admin_password/ s/%SERVICE_PASSWORD%/' /etc/glance/glance-api-paste.ini  

修改glance api的配置文件,增加keystone的支持

[plain] view plain copy
  1. sed -i '$a [paste_deploy]' /etc/glance/glance-api.conf  
  2. sed -i '$a flavor = keystone' /etc/glance/glance-api.conf  
修改glance组件注册文件,修改数据库地址及令牌
[plain] view plain copy
  1. sed -i '/sql_connection/s/=.*$/= mysql:\/\/glancedbadmin:glancesecret@192.168.3.1\/glance' /etc/glance/glance-registry.conf  

修改glance组件注册配置文件,增加对keystone的支持

[plain] view plain copy
  1. sed -i '$a [paste_deploy]' /etc/glance/glance-registry.conf  
  2. sed -i '$a flavor = keystone' /etc/glance/glance-registry.conf  
重启glance
[plain] view plain copy
  1. sudo restart glance-api  
  2. sudo restart glance-registry  
验证glance是否安装成功,成功会返回0
[plain] view plain copy
  1. glance index  
另外说一下glance的配置位置,如果大家的镜像和虚拟机快照不是非常多的话,建议就和nova的控制节点装在一起就行了,如果快照特别多,可以考虑glance单配一台服务器。

下面给大家分享镜像制作方面的一些经验。镜像制作一定要单开一台服务器或者在客户机client上制作,如果其放在控制节点或计算节点上,制作过程中由于会占用服务器大量资源导致其他服务拖慢卡顿。制作完成后拷贝镜像文件到glance image服务器,或在客户机上安装glance-client服务即可。

首先创建镜像盘,这个所有镜像的制作步骤都一样

[plain] view plain copy
  1. kvm-img create -f qcow2 server.img 5G  
镜像文件有多种格式,常见的是qcow2和raw,qcow2是增量式的,raw是非增量式的。

制作Ubuntu镜像

[plain] view plain copy
  1. sudo kvm -m 256 -cdrom ubuntu-12.04-server-amd64.iso -drive file=server.img,  
  2. if=virtio,index=0 -boot d -net nic -net user  

按照正常安装系统的步骤安装,可一路点默认设置下来,重启后安装ssh和cloud-init模块

网上的安装教程里面多半是这样的

[plain] view plain copy
  1. sudo apt-get update  
  2. sudo apt-get upgrade  
  3. sudo apt-get install openssh-server cloud-init  
  4. #Remove the network persistence rules from /etc/udev/rules.das their presence will result in  
  5. #the network interface in the instance coming up as an interfaceother than eth0.  
  6. sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules  
这个是错误的,cloud-init不能按照默认配置安装,要修改器安装脚本,否则安装后cloud-init访问不到OpenStack的metadata元数据服务器
正确的安装方法为
[plain] view plain copy
  1. sudo apt-get update  
  2. sudo apt-get upgrade  
  3. echo "cloud-init cloud-init/datasources string NoCloud, OVF,Ec2" > /tmp/debconf-selections  
  4. /usr/bin/debconf-set-selections /tmp/debconf-selections  
  5. rm -f /tmp/debconf-selections  
  6. apt-get -y install cloud-init  
  7. sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules  
其实ubuntu的官网上有做好的UEC镜像的下载,地址为http://cloud-images.ubuntu.com/releases/12.04.2/release-20130222/

可直接wget http://cloud-images.ubuntu.com/releases/12.04.2/release-20130222/ubuntu-12.04-server-cloudimg-amd64-disk1.img下载12.04 64位的镜像


制作CentOS或Fedora镜像

因为CentOS、Fedora没有cloud-init模块,所以要用curl从metadata元数据服务器获得主机名等信息

[plain] view plain copy
  1. echo >> /root/.ssh/authorized_keys  
  2. curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-  
  3. key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys  
  4. echo "AUTHORIZED_KEYS:"  
  5. echo "************************"  
  6. cat /root/.ssh/authorized_keys  
  7. echo "************************"  
另外还要修改/etc/sysconfig/network-scripts/ifcfg-eth0,将网卡的硬件串号等信息删除,设为DHCP模式
[plain] view plain copy
  1. DEVICE="eth0"  
  2. BOOTPROTO=dhcp  
  3. NM_CONTROLLED="yes"  
  4. ONBOOT="yes"  
删除网卡网口绑定规则,否则将导致重启后网络不可用
[plain] view plain copy
  1. rm -rf /etc/udev/rules.d/70-persistent-net.rules  

最后上传镜像

[plain] view plain copy
  1. glance add name="xxxx-linux" is_public=true container_format=ovf disk_format=qcow2 < server.img  

制作windows镜像

[plain] view plain copy
  1. kvm-img create -f qcow2 windowsserver.img 20G  
[plain] view plain copy
  1. sudo kvm -m 1024 -cdrom 7601.17514.101119-1850_x64fre_server_eval_zh-cn-GRMSXEVAL_CN_DVD.iso -drive file=windowsserver2008-enterprise.img,if=virtio -boot d -drive file=virtio-win-0.1-30.iso,index=3,media=cdrom -device virtio-net-pci -net nic -net user  
由于windows server 2008默认没有带virtio的驱动,所以在启动镜像安装的时候我们要带上这个驱动盘,下载地址为 http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin

进入系统后,要将virtio驱动的网卡和磁盘驱动都装好,切记别忘了安装网卡驱动,安装完成后会显示两个网卡,镜像在nova再次启动后就只会剩下virtio驱动的虚拟网卡


最后上传镜像

[plain] view plain copy
  1. glance add name="windows" is_public=true container_format=ovf disk_format=qcow2 < windowsserver.img  



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenStack 是一个分布式系统,可以在多个节点部署以实现高可用性和可伸缩性。以下是 OpenStack节点部署的一般步骤: 1. 确定 OpenStack 组件的部署需求。根据实际需求选择需要部署的组件,如 Nova、Neutron、Cinder 等。 2. 配置网络。为每个节点配置 IP 地址和网络接口,并确保所有节点可以相互通信。建议使用一个 DHCP 服务器为每个节点分配 IP 地址。 3. 安装 OpenStack 组件。在每个节点上安装所需的 OpenStack 组件。可以使用包管理器(如 yum 或 apt)或源码安装。 4. 配置数据库。为 OpenStack 组件配置数据库,建议使用 MySQL 或 MariaDB。 5. 配置消息队列。为 OpenStack 组件配置消息队列,建议使用 RabbitMQ。 6. 配置身份认证服务。为 OpenStack 配置身份认证服务 Keystone。 7. 配置计算节点。如果需要将计算节点分离出来,需要在计算节点上安装 Nova 组件,并将其连接到其他节点。 8. 配置存储节点。如果需要将存储节点分离出来,需要在存储节点上安装 Cinder 组件,并将其连接到其他节点。 9. 配置网络节点。如果需要将网络节点分离出来,需要在网络节点上安装 Neutron 组件,并将其连接到其他节点。 10. 配置 Web 控制台。为 OpenStack 配置 Web 控制台 Horizon。 以上是 OpenStack节点部署的一般步骤,具体步骤会根据实际情况而有所不同。在部署过程中,建议参考官方文档或相关教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值