Nov 122013
 

Openstack的网络一共有5种,其实对于租户网络来说,应该就是4种。所谓Flat模式,并不是租户的网络,而是把虚拟机直接放在 provider networks,就是管理员创建一个网络,让所有的租户直接连接到外网,获得的是公网的IP,不需要经过NAT。

  1. local模式:这主要是给测试使用,只能是all in one,不能再添加节点
  2. GRE模式:隧道数量没有限制,性能有点问题。
  3. Vlan模式:vlan数量有4096的限制
  4. VXlan模式:vlan数量没有限制,性能比GRE好。

每一种模式,网络的配置都会有所不同,打算每种网络模式,写一篇文章介绍。这里主要是介绍GRE模式的配置。

我的RDO的网络设置和应答文件 GRE模式:http://t.cn/8DDql5W Vlan模式:http://t.cn/8DDql5O 完成后,自己手工创建ifcfg-br-ex http://t.cn/8DDql50

2013年11月22日:目前RDO在多节点部署有bug,在计算节点创建的虚拟机都会失败。http://openstack.redhat.com/forum/discussion/910/havanna-issues-with-multi-node#Item_14  解决办法就是装完后在控制节点,添加一条iptables的规则:

iptables -I INPUT -s 172.28.1.12/32 -p tcp --dport 9696 -j ACCEPT

并保存规则:service iptables save ,172,28,1,12是我计算节点的IP地址。 (bug已经修复)

2013年11月27日:如果你发现虚拟机访问外网速度很慢,在控制节点,准确说,在网络节点,我的例子里是br-ex绑定在eth0上,运行下面命令,就会让虚拟机访问外网获得正常速度。

ethtool --offload eth0 gro off

2013年12月12日:今天按照文档,设置MTU 为1400,好像把所有的问题都解决,虚拟机间的访问和虚拟机访问外网,不需要对网卡做任何的设置。我也顺便把文档更正一下。上面的网卡设置ethtool,不需要操作。目前基本的功能都已经正常,文档也基本完成。

 

基本情况

服务器 公网 虚拟机通讯网络 角色
node10 eth0:172.28.1.10/16 eth1:10.1.1.10/24 控制节点,网络节点,存储节点,计算节点
node12 eth0:172.28.1.12/16 eth1:10.1.1.12/24 计算节点

 

和vlan模式配置一个明显的区别,就是eth1,是需要配置一个私有的IP地址,必须配置。

网关:172.28.0.1

需要注意:Neutron和Nova network一个明显的不同就是Floating IP的范围和fix ip,这些都是可以通过web方式进行设置。

虚拟机使用的Floating IP:172.28.3.100,172.28.3.200

GRE模式的一个好处就是不需要在交换机做任何配置。

这是龚永生的原理图,我稍微修改了一下,用eth0连接路由器

Snap3

网络基本设置

这是node10的IP设置,node12,也只是修改一下IP地址就可以。

Eth0

# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
HWADDR=00:E0:81:D8:43:BE
TYPE=Ethernet
BOOTPROTO=none
IPADDR=172.28.1.10
NETMASK=255.255.0.0

 

Eth1

# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
HWADDR="00:E0:81:D8:43:BF"
TYPE=Ethernet
BOOTPROTO=none
IPADDR=10.1.1.10
NETMASK=255.255.255.0

 

设置源

cd /etc/yum.repos.d/
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
yum list

LVM设置(可选)

这主要是为了给cinder-volumes单独一个分区,提高性能。

umount /dev/sda2
pvcreate /dev/sda2
vgcreate cinder-volumes /dev/sda2

 

修改/etc/fstab 去掉cinder-volume的开机挂载,不然会导致你无法重启

sed -i '/cinder-volume/s/^/#/' /etc/fstab

安装packstack

yum install -y http://rdo.fedorapeople.org/openstack/openstack-havana/rdo-release-havana.rpm
yum install -y openstack-packstack
yum -y update

 

内核更新,所以需要重启机器.

Packstack设置

创建一个应答文件

packstack --gen-answer-file=multi-node-gre-node10.txt

修改配置文件

修改应答文件,由于我已经有专门的cinder volume, 所以不需要创建。如果你没有手工创建cinder volume,那么你就不修改就可以。默认heat和Nagios是没有安装,你可以修改。

CONFIG_CINDER_VOLUMES_CREATE=n
CONFIG_NTP_SERVERS=0.uk.pool.ntp.org
CONFIG_KEYSTONE_ADMIN_PW=admin
CONFIG_NOVA_COMPUTE_HOSTS=172.28.1.10,172.28.1.12
CONFIG_NEUTRON_OVS_TENANT_NETWORK_TYPE=gre
CONFIG_NEUTRON_OVS_TUNNEL_RANGES=1:1000
CONFIG_NEUTRON_OVS_TUNNEL_IF=eth1

 

GRE的网络,主要是修改后面的3行就可以。

进行安装

packstack --answer-file=multi-node-gre-node10.txt

 

安装过程,有可能因为源的原因中断,你可以重复运行。

虚拟机访问外网

装完后,查看一下网络

# ovs-vsctl show
9cf303ec-618d-4976-a031-b65646b4e491
    Bridge br-tun
        Port br-tun
            Interface br-tun
                type: internal
        Port patch-int
            Interface patch-int
                type: patch
                options: {peer=patch-tun}
    Bridge br-int
        Port br-int
            Interface br-int
                type: internal
        Port patch-tun
            Interface patch-tun
                type: patch
                options: {peer=patch-int}
    Bridge br-ex
        Port br-ex
            Interface br-ex
                type: internal
    ovs_version: "1.11.0"

 

由于目前RDO的问题,没有创建br-ex,需要我们手工来创建,这个只需要在node10进行就可以,具体点说,应该是在网络节点上进行。

# cat /etc/sysconfig/network-scripts/ifcfg-br-ex 
DEVICE=br-ex
IPADDR=172.28.1.10
PREFIX=16
GATEWAY=172.28.0.1 
DNS1=114.114.114.114
ONBOOT=yes

 

修改 /etc/sysconfig/network-scripts/ifcfg-eth0,  注意:一定要加上eth0 的mac地址,不然会出错。

# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
HWADDR=00:E0:81:D8:43:BE

然后运行下面命令

ovs-vsctl add-port br-ex eth0; service network restart

 

Snap2

这个时候,看看网络的设置

# ovs-vsctl show
9cf303ec-618d-4976-a031-b65646b4e491
    Bridge br-tun
        Port br-tun
            Interface br-tun
                type: internal
        Port patch-int
            Interface patch-int
                type: patch
                options: {peer=patch-tun}
    Bridge br-int
        Port br-int
            Interface br-int
                type: internal
        Port patch-tun
            Interface patch-tun
                type: patch
                options: {peer=patch-int}
    Bridge br-ex
        Port "eth0"
            Interface "eth0"
        Port br-ex
            Interface br-ex
                type: internal
    ovs_version: "1.11.0"

 

网卡详细信息

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:e0:81:d8:43:be brd ff:ff:ff:ff:ff:ff
    inet6 fe80::2e0:81ff:fed8:43be/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:e0:81:d8:43:bf brd ff:ff:ff:ff:ff:ff
    inet 10.1.1.12/24 brd 10.1.1.255 scope global eth1
    inet6 fe80::2e0:81ff:fed8:43bf/64 scope link 
       valid_lft forever preferred_lft forever
94: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 52:54:00:3a:bf:90 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
95: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 500
    link/ether 52:54:00:3a:bf:90 brd ff:ff:ff:ff:ff:ff
107: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN 
    link/ether 9a:b8:00:8e:c9:6d brd ff:ff:ff:ff:ff:ff
108: br-int: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 66:30:7d:42:9c:43 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::70b6:c2ff:fef9:3509/64 scope link 
       valid_lft forever preferred_lft forever
110: br-tun: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 4e:41:41:1e:a1:43 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::30cc:7fff:fe2d:758b/64 scope link 
       valid_lft forever preferred_lft forever
111: br-ex: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 00:e0:81:d8:43:be brd ff:ff:ff:ff:ff:ff
    inet 172.28.1.10/16 brd 172.28.255.255 scope global br-ex
    inet6 fe80::2e0:81ff:fed8:43be/64 scope link 
       valid_lft forever preferred_lft forever

设置MTU

因为采用GRE网络,你需要把MTU设置为1400,默认的是1500,文档可参考

https://ask.openstack.org/en/question/6140/quantum-neutron-gre-slow-performance/

编辑 /etc/neutron/dhcp_agent.ini

dnsmasq_config_file = /etc/neutron/dnsmasq-neutron.conf

创建一个 /etc/neutron/dnsmasq-neutron.conf

dhcp-option-force=26,1400

重启neutron 的dhcp服务

service neutron-dhcp-agent restart

这样你会发现虚拟机间的访问速度,虚拟机访问外网的速度,基本都是正常的。

Dashboard修改root的密码

如果你希望可以在Dashboard里设置root的密码,你需要修改计算节点的nova.conf

libvirt_inject_password=true

并重启compute服务

service openstack-nova-compute restart

 

附录

https://wiki.openstack.org/wiki/ConfigureOpenvswitch

OVS.integration_bridge:br-int

OVS.tunnel_bridge:br-tun

OVS.local_ip:GRE网络使用:就是内部的IP,这里就是eth1上的IP地址

OVS.tunnel_id_ranges:1:1000,就是ID的范围,GRE网络的隧道数量。

OVS.bridge_mappings :physnet1:br-eth1,vlan模式使用该参数

OVS.network_vlan_ranges:physnet1:10:20,vlan模式使用该参数

  97 Responses to “CentOS 6.4 Openstack Havana 多节点安装(OVS+GRE)”

  1. 创建一个应答文件
    packstack –gen-answer-file=multi-node-gre-node10.txt

    进行安装
    packstack –answer-file=multi-node.txt

    这个是不是应该要改改

  2. openstack Havana 的 多节点 vlan 模式 安装 step bystep 是什么时候能有?

  3. 沙克老师,按照您的文档,安装完毕,创建实例后在仪表盘上可以看到分配了ip地址,但通过控制台进入实例后发现,实际网卡还是没有分配到ip。
    日志如下:
    [root@rdo1 ~]# tail -f /var/log/neutron/server.log
    2013-11-14 10:44:08.629 3274 WARNING neutron.scheduler.dhcp_agent_scheduler [-] No more DHCP agents
    2013-11-14 10:44:08.630 3274 WARNING neutron.db.agentschedulers_db [-] Fail scheduling network {‘status’: u’ACTIVE’, ‘subnets’: [u’4c2028b4-e88e-4eb6-9924-8c5647db504c’], ‘name’: u’admin_net1′, ‘provider:physical_network’: None, ‘admin_state_up’: True, ‘tenant_id’: u’65e0566f174748ecaf5240f0a2eaffa2′, ‘provider:network_type’: u’gre’, ‘router:external’: False, ‘shared’: False, ‘id’: u’8f32a99c-b114-4f28-8e28-aa316b5aabd1′, ‘provider:segmentation_id’: 2L}
    2013-11-14 10:44:08.986 3274 WARNING neutron.scheduler.dhcp_agent_scheduler [-] No more DHCP agents
    2013-11-14 10:44:08.987 3274 WARNING neutron.db.agentschedulers_db [-] Fail scheduling network {‘status’: u’ACTIVE’, ‘subnets’: [u’4c2028b4-e88e-4eb6-9924-8c5647db504c’], ‘name’: u’admin_net1′, ‘provider:physical_network’: None, ‘admin_state_up’: True, ‘tenant_id’: u’65e0566f174748ecaf5240f0a2eaffa2′, ‘provider:network_type’: u’gre’, ‘router:external’: False, ‘shared’: False, ‘id’: u’8f32a99c-b114-4f28-8e28-aa316b5aabd1′, ‘provider:segmentation_id’: 2L}
    2013-11-14 10:44:09.973 3274 WARNING neutron.scheduler.dhcp_agent_scheduler [-] No more DHCP agents
    2013-11-14 10:44:09.978 3274 WARNING neutron.db.agentschedulers_db [-] Fail scheduling network {‘status’: u’ACTIVE’, ‘subnets’: [u’4c2028b4-e88e-4eb6-9924-8c5647db504c’], ‘name’: u’admin_net1′, ‘provider:physical_network’: None, ‘admin_state_up’: True, ‘tenant_id’: u’65e0566f174748ecaf5240f0a2eaffa2′, ‘provider:network_type’: u’gre’, ‘router:external’: False, ‘shared’: False, ‘id’: u’8f32a99c-b114-4f28-8e28-aa316b5aabd1′, ‘provider:segmentation_id’: 2L}
    2013-11-14 10:44:10.232 3274 WARNING neutron.scheduler.dhcp_agent_scheduler [-] No more DHCP agents
    2013-11-14 10:44:10.234 3274 WARNING neutron.db.agentschedulers_db [-] Fail scheduling network {‘status’: u’ACTIVE’, ‘subnets’: [u’4c2028b4-e88e-4eb6-9924-8c5647db504c’], ‘name’: u’admin_net1′, ‘provider:physical_network’: None, ‘admin_state_up’: True, ‘tenant_id’: u’65e0566f174748ecaf5240f0a2eaffa2′, ‘provider:network_type’: u’gre’, ‘router:external’: False, ‘shared’: False, ‘id’: u’8f32a99c-b114-4f28-8e28-aa316b5aabd1′, ‘provider:segmentation_id’: 2L}
    2013-11-14 10:44:12.638 3274 WARNING neutron.scheduler.dhcp_agent_scheduler [-] No more DHCP agents
    2013-11-14 10:44:12.641 3274 WARNING neutron.db.agentschedulers_db [-] Fail scheduling network {‘status’: u’ACTIVE’, ‘subnets’: [u’4c2028b4-e88e-4eb6-9924-8c5647db504c’], ‘name’: u’admin_net1′, ‘provider:physical_network’: None, ‘admin_state_up’: True, ‘tenant_id’: u’65e0566f174748ecaf5240f0a2eaffa2′, ‘provider:network_type’: u’gre’, ‘router:external’: False, ‘shared’: False, ‘id’: u’8f32a99c-b114-4f28-8e28-aa316b5aabd1′, ‘provider:segmentation_id’: 2L}

    • 你好好查一下,我的环境是没问题的。

    • 请问你找到问题了吗?我也是碰到这个问题,登入后,虚机没有获得IP地址

      • 还没。我直接重装了,可能是哪配置出错了!

      • yum update 升级组件,修改grub.conf文件,启用openstack内核,启动后,messagebus服务没启动的话,要启动一下,这么折腾后,虚拟机分配到IP了

    • 我也遇到同样问题了~在计算节点上启动实例,仪表盘显示成功后,通过控制台进去发现dhcp没有分配到地址

  4. 我试着在控制台里直接给虚拟机配置ip,然后网络就通了

  5. 陈老师您好,请问node10和node12是否都需要2张网卡才行?

  6. 你好
    GRE Bridge 大图里面的
    tunnel 的2边的IP 1.1.1.1 和1.1.1.2 是虚拟机的内部IP么?

  7. cinder-volumes , 作创建就挂住 了, 总 creating, 陈老师, 为什么呢?

  8. 有没在两个结点上用RDO试过SWIFT,
    [ ERROR ]

    ERROR : Error appeared during Puppet run: 10.50.9.104_swift.pp
    Error: Parameter source failed on Firewall[001 swift storage and rsync incoming 10.50.9.102/sda2]: Munging failed for value “10.50.9.102/sda2” in class source: no address for 10.50.9.102/sda2 at /var/tmp/packstack/0a5ec64b491e44d895b6bf66132253f0/manifests/10.50.9.104_swift.pp:41
    You will find full trace in log /var/tmp/packstack/20131121-232123-LYKyur/manifests/10.50.9.104_swift.pp.log

    10.50.9.104_swift.pp这个文件内容:
    $hosts = [ ‘10.50.9.102/sda2′,’10.50.9.104/sda3′,’10.50.9.104′,’10.50.9.102’ ]

    define add_allow_host {
    firewall { “001 swift storage and rsync incoming ${title}”:
    proto => ‘tcp’,
    dport => [‘6000’, ‘6001’, ‘6002’, ‘873’],
    action => ‘accept’,
    source => $title,
    }
    }

    它的HOST截取不对。

  9. Hi, 陈老师,

    我用这种方式布了几个节点,但是发现有一些虚拟机总是找不到 meta-data:
    DataSourceEc2.py[WARNING]: ‘http://169.254.169.254/2009-04-04/meta-data/instance-id’ failed [2/120s]: url error [[Errno 101] Network is unreachable]

    现在的规律是控制节点上的虚拟机都没有这个错误,但是某些计算节点上的某些虚拟机有这个错误。

    我找了一下,havana 版本好像没有 nova-api 组件了吧,找不到这个服务(有一个ec2相关的服务)。
    按照你之前的一篇文章也解决不了这个问题。

    有什么建议没有?谢谢!

  10. 控制结点上的vm ip 没问题,FIX IP 和FLOAT IP 都可以,可以出去。但另一个计算结点上的VM就是拿不了IP,在DASHBOARD 显示有IP,但进去VM,实际是没有,分配给它也用不了,奇怪了,重装了几次都如此。日志还没研究。

  11. 陈老师,您好!
    我启动实例后状态是ERROR,compute.log里面有这个错误信息提示:
    ERROR nova.openstack.common.rpc.amqp [req-0cf27757-fbdc-4d46-83ad-cfb4eccfc8e6 97db7ebe73a5447da1c643a70e06d63f 8c11f436597648db8d0dbc5d55d4a800] Exception during message handling

    • 确认一下你选择的flavor没有问题。选大一点来测试。

      • 还是一样出现ERROR,是不是compute节点上有什么错误,libvirtd.log是这样的:
        error : virNetSocketReadWire:1194 : End of file while reading data: Input/output error

        • 确认一下硬盘,CPU,内存等资源是不是够开你指定flavor的vm。 或者开个小的cirros vm试一下。我当时也遇到完全相同的出错,那个时候是硬盘空间不够大。

      • 参考http://openstack.redhat.com/forum/discussion/comment/2509,是rdo的问题,我添加这个iptables -I INPUT -s $COMPUTE_NODE_IP/32 -p tcp –dport 9696 -j ACCEPT就没事了,然后现在又出这样错误,compute.log
        2013-11-26 11:21:31.304 2215 ERROR nova.virt.libvirt.driver [req-89dd7103-91c4-45b8-a75b-bdd3e0b5a567 408e47351404406b9bb02ca93015bae7 8d7e9ab71b264704b2f39434936ad6eb] An error occurred while trying to launch a defined domain with xml:
        2013-11-26 11:21:31.305 2215 ERROR nova.compute.manager [req-89dd7103-91c4-45b8-a75b-bdd3e0b5a567 408e47351404406b9bb02ca93015bae7 8d7e9ab71b264704b2f39434936ad6eb] [instance: 49918bc0-65e7-40e8-a093-62b13ecee4dc] Instance failed to spawn
        2013-11-26 11:21:32.946 2215 ERROR nova.compute.manager [req-89dd7103-91c4-45b8-a75b-bdd3e0b5a567 408e47351404406b9bb02ca93015bae7 8d7e9ab71b264704b2f39434936ad6eb] [instance: 49918bc0-65e7-40e8-a093-62b13ecee4dc] Error: internal error Process exited while reading console log output: chardev: opening backend “file” failed

  12. iptables -I INPUT -s 172.28.1.12/32 -p tcp –dport 9696 -j ACCEPT这个命令的–dport,应该是–dport

    • 原来是显示的问题,- -显示成–了

      • 真够细心。我也是今天才发现。另外一个问题,如果你发现vm访问外网速度太慢,慢的很可怕,可以参考 https://bugs.launchpad.net/neutron/+bug/1252900
        在网络节点,我的是br-ex绑定在eth0上
        ethtool –offload eth0 gro off
        就可以解决访问外网速度慢的问题。目前虚拟机间的速度,也是不太正常,还没找到解决的办法。

        • 陈老师,
          我有三个物理节点,controller(16G mem, 40G disk ), compute ( 16G mem, 40G disk ), network ( 8G mem, 20G disk ),每个物理节点都有两个网卡。

          创建云主机时,发现都被创建在cotroller和compute上了(即使我要求创建四个16G内存的云主机,用m.xlarge的flavor),
          1) 不同配置的物理主机不能创建在一个openstack系统里吗?(好像network一直不创建云主机)
          2)按照理解openstack可以支持把多个物理机器虚拟成一个虚拟机,理解对吗?(比如可以创建一个内存40Gmem的云主机)
          3)我使用了#ethtool –offload eth1 gro off(我的br-ex绑定在eth1上),发现创建在controller上的虚机,速度可以到40MB+,而创建在compute上的虚机,速度只有20KB左右。有什么建议吗?

          • 调整MTU=1400,1458,1450等后,创建在compute上虚机的网络速度达到20MB+, 但是还是有丢包现象,时通时不通。这个不知道如何解决。

          • 能分享一下你是怎么检测到丢包吗? 我是发现有时候会时通时不通。

        • 陈老师,虚拟机网络速度慢的问题主要是 mtu 太大造成的,在主节点 nova.conf 中从 1500 改成 1400 重启就可以了。有一个 bug 在跟踪这个事情,我回头找找链接。

  13. 陈老师您好,我resize虚拟机的时候老是Error。
    通过nova show vm-xxx,报错信息如下:
    | fault | {u’message’: u”Unexpected error while running command. |
    | | Command: ssh 192.168.100.100 mkdir -p /var/lib/nova/instances/52345336-17f2-40e2-9ed4-2eab7f457775 |
    | | Exit code: 255 |
    | | Stdout: ” |
    | | Stderr: ‘Host key verification failed.\\r\ |
    | | ‘”, u’code’: 500, u’created’: u’2013-11-27T11:58:48Z’}

    但是我手动执行 ssh 192.168.100.100 mkdir -p /var/lib/nova/instances/52345336-17f2-40e2-9ed4-2eab7f457775是成功的。

    我的配置参考:http://openstack.redhat.com/forum/discussion/comment/1802

    • 改天我再测试,我只是知道,两个计算节点,需要确保nova用户,无秘钥ssh。

    • 这个我也遇到了 。 做了密钥验证后能实现resize了。 但是我resize后, 实例到计算节点后网络就不通了。 切回控制节点网络就恢复了。 求指点

  14. 陈老师,我按照你这个文档安装之后,所有状态都是对的,然后发现不能正常上网,后来我就修改了eth0这个文件,可以上网,但是之后发现dashboard进不去,看了一下你的日志,但是和你那个keystone没有安装是不一样的,我的错误是Maximum attempts reached,我看neutron这个日志也是这个错误
    Request Method: GET
    Request URL: http://192.168.10.80/dashboard/admin/
    Django Version: 1.4.8
    Exception Type: ConnectionFailed
    Exception Value: Connection to neutron failed: Maximum attempts reached
    Exception Location: /usr/lib/python2.6/site-packages/neutronclient/v2_0/client.py in retry_request, line 1175

  15. 陈老师,我的环境下当把eth0的地址分给br-ex之后就不能上网了,使用的是代理服务器,ip绑定mac地址,然后只有同网段的地址才能访问那台机器,猜想可能是NAT的问题。

  16. 陈老师,请问下local模式下需要怎么配置呢,ovs_neutron_plugin.ini下面需要做配置吗?另外做些其他的工作吗,如建立br-int,br-ex ?

  17. 陈老师 :
    按照上面的 GRE示意图理解 两边物理主机上的同一用户的 创建的虚拟机的tap端口所属的tag号 ,应该可以不同吧 ,如果必须相同 ,还是会出现 ,vlan4096的限制 。另外物理机收到gre流量后内部路由是通过tun号 来做的吗?如果是 那么tun端口应该也有tag号吧 ?

    • gre是不需要交换机做任何配置,没有数量的限制。

      • 是不需要做什么设置 ,只是不清楚网络是怎么走的 ,所以看他的交换机配置,但是 看不明白。从交换机配置看 ,不同用户创建的虚拟机 ,他们的tag是相同的
        我用两个用户创建的的两个虚拟机分别跑在controller和computer上。

        这事 controller ,和notwork的
        Bridge br-tun
        Port patch-int
        Interface patch-int
        type: patch
        options: {peer=patch-tun}
        Port “gre-2”
        Interface “gre-2″
        type: gre
        options: {in_key=flow, local_ip=”10.0.0.225″, out_key=flow, remote_ip=”10.0.0.226”}
        Port br-tun
        Interface br-tun
        type: internal
        Bridge br-ex
        Port “eth0”
        Interface “eth0”
        Port “qg-8fa801d7-45”
        Interface “qg-8fa801d7-45”
        type: internal
        Port br-ex
        Interface br-ex
        type: internal
        Bridge br-int
        Port “tap558a6945-29”
        tag: 1
        Interface “tap558a6945-29”
        type: internal
        Port “tap85fd2141-d4”
        tag: 3
        Interface “tap85fd2141-d4”
        type: internal
        Port patch-tun
        Interface patch-tun
        type: patch
        options: {peer=patch-int}
        Port “tapf2eafbfa-86”
        tag: 2
        Interface “tapf2eafbfa-86”
        type: internal
        Port br-int
        Interface br-int
        type: internal
        Port “qvo597cdf84-9f”
        tag: 2
        Interface “qvo597cdf84-9f”
        Port “qr-ac5f1958-d7”
        tag: 2
        Interface “qr-ac5f1958-d7”
        type: internal
        ovs_version: “1.11.0”
        ######################################
        这是computer的交换机情况
        9ece472a-27e5-48ab-b5ea-777faf89259f
        Bridge br-int
        Port patch-tun
        Interface patch-tun
        type: patch
        options: {peer=patch-int}
        Port br-int
        Interface br-int
        type: internal
        Port “qvoc22b563f-63”
        tag: 2
        Interface “qvoc22b563f-63”
        Bridge br-tun
        Port br-tun
        Interface br-tun
        type: internal
        Port patch-int
        Interface patch-int
        type: patch
        options: {peer=patch-tun}
        Port “gre-1”
        Interface “gre-1″
        type: gre
        options: {in_key=flow, local_ip=”10.0.0.226″, out_key=flow, remote_ip=”10.0.0.225”}
        ovs_version: “1.11.0”

        • 你研究真够深入,我还没细看底层,下周我研究一下。其实我反复看了redhat的rdo的文档,配置上应该不会有啥错误。如果有这种情况,更多是bug。

          • 我就是看你的介绍 ,你在开头有提到龚永生,然后我就去翻了龚永生的quantum的模型图 ,然后对着你的图看 。看不太明白 。原来说vlan数有限制 ,是因为每一个用户都要用掉一个vlan ,这样就不能创建超过4096个租户是吧 ?现在他不用vlan给用户创建网络 ,而是使用tun ,tun编号没有限制 。所以才突破的4096限制 ,是这么理解吗 ?

          • 我只是知道GRE没有数量的限制,但是为啥没限制,就不明白。

          • 陈老师:
            我用openvswitch 做了gre的实验 ,现象是一条openvswitch的gre通道可以打通,指定两台机器的二层网络 ,也就是说 ,只要两台物理机中间有gre通道 ,那么他们的br-int就相当于是物理连接在一起的形成了一个大的br-int 。然后quantum再在这个大的br-int上用tag编号来区分用户流量 ,如果一个租户他有10台虚拟机 ,且分别位于不同的物理机上 ,那么需要用gre把这10台物理机连接起来 ,形成一个大的br-int,然后再用tag标记 ,把他和别的租户区分开 ,这样每台物理机上的tag只要和所连接通道上的物理机保持一致 ,不需要全局一致 。另外我还试了把gre换成vxlan效果好像一样 ,都是把二层流量封装在三层的流量里 ,然后用gre通道送出去。我觉得最大的gre的好处 ,就是如果便于虚拟机迁移 ,只要ip地址可以到达的地方都可以迁过去 ,不受物理网络限制 ,只是这种点对点的,方式效率不高 ,而且有封装和解封装的过程 ,更是影响效率 ,如果能改成组播的形式 ,应该能好很多 ,据说现在 vxlan也是想用组播的方式实现,多点数据传输 ,如果那样传输的效果应该好很多 ,每个租户占用用一个组播地址,而且组播地址也是可路由的 ,只是可能不是所有的网络设备都支持组播路由 。

          • 你研究的深入。目前GRE的问题,应该是性能的问题。功能上是没问题的。我的理解vxlan,可以很好解决性能的问题。

          • 陈老师:
            我看了,一下vxlan和nvgre的介绍 ,感觉他们有点像(都是使用了更长的id位数) ,但是不能完全看明白 ,据说vxlan是思科和vmware好像还有redhat共同开发的 ,因为vlan的id标志位只有12位二进制数 ,所以2的12次方为4096 ,导致vlan的id不可能超过4096 ,但是vxlan把id位增加到了 24位,所以2的24次方 ,是1600万个,而在一个数据中心里创建1600万个网络应该足够用了 。只是在数据包路由时候,需要vxlan的路由器做一下转换 ,否则其他设备无法识别vxlan的24位vnic编号 ,给我的感觉 ,目前的普通gre还是依赖vlan的 ,不能说彻底解决了问题 ,至于vxlan好像vmware的分布式交换机已经用的很成功了 ,应该是比较可行的方案 ,但是,不能算是终极的解决方案 ,因为还是会有封装问题 ,虽然影响不太大但是还是影响性能 ,期待SDN提供一个完美的软硬件一体解决方案 ,让虚拟交换机和物理交换机实现完全统一管理,所有虚拟交换机和物理交换机统一受中心controller的管理 ,直接在二层做策略和路由 。那样或许就能达到极限性能了 。顺便问一下 ,陈老师您测试过用quantum的gre模式网络创建过4096个以上的网络吗 ?我属于不见棺材不落泪 ,只是我的手段和能力做不了这样的测试 。

  18. 陈老师,您好。
    我制作了个win7的镜像,但是用不了。compute.log是这样的:
    2013-12-03 17:06:20.555 2213 ERROR nova.compute.manager [req-3f545199-283c-4065-95ee-f2aa40643d03 408e47351404406b9bb02ca93015bae7 8d7e9ab71b264704b2f39434936ad6eb] [instance: ef73008d-292b-42b4-a952-fc65bb840358] Instance failed to spawn
    2013-12-03 17:06:21.427 2213 ERROR nova.virt.libvirt.driver [-] [instance: ef73008d-292b-42b4-a952-fc65bb840358] During wait destroy, instance disappeared.
    2013-12-03 17:06:21.654 2213 ERROR nova.virt.libvirt.vif [req-3f545199-283c-4065-95ee-f2aa40643d03 408e47351404406b9bb02ca93015bae7 8d7e9ab71b264704b2f39434936ad6eb] [instance: ef73008d-292b-42b4-a952-fc65bb840358] Failed while unplugging vif
    2013-12-03 17:06:22.420 2213 ERROR nova.compute.manager [req-3f545199-283c-4065-95ee-f2aa40643d03 408e47351404406b9bb02ca93015bae7 8d7e9ab71b264704b2f39434936ad6eb] [instance: ef73008d-292b-42b4-a952-fc65bb840358] Error: [Errno 28] No space left on device

    • 你好,正宇,我创建虚拟机的时候也报这个错了,你解决了吗?能发我邮箱一下解决方法吗,简单说一下即可,十分感谢。邮箱:dingzhongyan1111@163.com
      报错日志:
      2015-04-16 10:50:00.220 15319 ERROR nova.virt.libvirt.driver [-] [instance: 9644e099-adbf-43e1-aa33-78954adc8a24] During wait destroy, instance disappeared.

  19. 陈老师,请教一个问题:我前面setup的环境一切正常,但是发现这几天新加的节点有问题,每次调度的vm都起不来,spawn 阶段报错,我用 nova show 看了一下,都是{u’message’: u’No valid host was found. ‘, u’code’: 500, u’created’ 的错误。我找了几台机器装了一个新的环境,但是发现还是报这个错。貌似 rdo 和 openstack 小版本都升级了。有没有什么好的建议?

    • 报错的 compute 机器上的 compute.log 里面只找到了一个有价值的错误信息:Unable to mount image

      2013-12-11 16:53:04.457 3226 DEBUG nova.virt.disk.api [req-18a468ed-4c07-4a3e-ab3e-431f3d805d6f 16f91ac60f6949988fd3fcdb43bb0fbe 5f6e78b00c2d4148960a8a03b749cdea] Unable to mount image /var/lib/nova/instances/a873cb59-6953-4a50-8ca3-636c6d74cb80/disk with error Error mounting /var/lib/nova/instances/a873cb59-6953-4a50-8ca3-636c6d74cb80/disk with libguestfs (mount_options: /dev/sda on / (options: ”): mount: you must specify the filesystem type). Cannot resize. is_image_partitionless /usr/lib/python2.6/site-packages/nova/virt/disk/api.py:183

      我怀疑是最新版本的 libguestfs 的问题,把它强制删除后用 rpm 方式安装了和其它机器一样的老版本,但是还是报一样的错。 🙁

      • 像预料的那样,是最新版的一个 bug, 应用一下 patch 替换2个文件就可以解决了:
        https://bugs.launchpad.net/nova/+bug/1246852

        • 不容易,很多坑,也正常,提高排错能力。类似的情况我也遇到过。别人照我的文档都搭建成功,我自己来,反而就出错,也是因为我用的是最新版本。

      • 看看有没有qemu 使用的virbr0 网卡,我发现,在使用rdo安装计算节点时,如果rdo有错误,安装完成后,没有这个网卡,那么该计算节点就是不可用的,也会报上面的错误。
        解决办法是,删除所有的qemu包,重新安装,直到virbr0 网卡再次回来即可。

        • @parseNothing, 关于virbr0的背后逻辑是什么呢?我试过:yum reinstall qemu-install qemu-kvm qemu-kvm-tools, 不过virbr0没有加回来哦。
          而且我用的hypersor的kvm,不是qemu

    • 还有一个问题,默认nova.conf 中配置的scheduler 是,在创建实例时会在不同的节点上尝试3次。如果3次都不成功,就会报这个No valid host was found 的错误。这个可以在nova的日志目录中看到的。我在一次测试过程中,就发现,如果flavor 的磁盘小于实际镜像需要的磁盘,那么启动实例就会失败,查看实例状态,同样会报这个错误的。实际的操作日志,可以看nova/compute.log 的情况。找到问题,解决方法就很简单了,选一个更大的flavor 来创建实例即可。

  20. 陈老师,
    测试中,我也发现如果实例与外面的网络通讯非常慢,参考您上面提供的,关闭gro 后,确实可以解决问题。
    但后来发现,跨计算节点的实例间通讯也很慢,或者通过浮动IP访问实例,同样非常慢,但没有丢包。
    Google 发现,Ask OpenStack 上有人提出,可以通过修改dnsmasq,增加mtu 的设置来解决。我测试了一下,发现只要把实例的mtu修改到1458(默认是1480),那么,无论是实例间或者实例与外部网络之间的通讯都是没有问题的。而且即使打开gro配置,也是正常的。
    仅供参考。

    • 我下午测试,我这边默认是1500,我改成1400,好像问题就都解决了。我重复把这些东西验证一遍,我明天把文档整理一遍。谢谢啊。有问题,继续探讨。

      • 能给了联系方式吗?我这边还有不少问题,像resize、vlan 的配置方式等。

        • 可以,shake.chen@gmail.com, resize,应该是我们设置的问题,这个我下星期去测试,问题应该不大,vlan,我就搞不定,没交换机。

  21. 陈老师 您好 按照您上面的步骤搭建成功了,虚拟机间的访问和虚拟机访问外网都没有问题,但是由于目前我测试用的外网Floating数量太少,我想让外网直接访问虚拟机之间的内网,这能否实现,能否指点一下

    • 这是不行的,可以考虑平面网络或者VPN方式。

      • 陈老师 您好 平面网络是怎么搭建的呢?在您的日志里有例子吗?是不是需要在ovs_neutron_plugin.ini这个文件中修改成flat就可以了?都需要修改哪些参数呢?谢谢

        • 把原来的网络及子网全部删掉,配置:
          neutron net-create –tenant-id c95dbff9845543f281b98a2cb4ea4291 sharednet1 –shared –provider:network_type flat –provider:physical_network physnet1

          neutron subnet-create –tenant-id c95dbff9845543f281b98a2cb4ea4291 –name sharednet1_subnet –allocation-pool start=192.168.48.180,end=192.168.48.189 –gateway=192.168.48.1 sharednet1 192.168.48.0/24
          这样,就创建了一个192.168.48.x 网段的平面网络,实例从这个网络中获取IP就可以得到当前网络中的IP地址了。

  22. 陈老师,按照上面的方法安装成功。 启动虚拟机也成功,可以正确访问。
    就有对于节点的磁盘有个疑问, 我是计算,控制一共三个节点。 每个都是两块500g的硬盘, 但是openstack显示每个节点只有50g的磁盘空间, 请问这个如何增加? 在哪里设置

  23. 陈老师,你好,我请教个问题,在OpenStack环境中怎么实现当一个计算节点宕机时,虚拟机能够自动迁移到另一个计算节点上。

  24. 陈老师你好, 参考您的文档我成功部署了openstack,共有6个节点(Controller, network, storage, heat, compute×2),采用的是GRE方式,所有节点均为单网卡。 我已经创建了4个VM,可以正常使用。 但是目前计算节点的资源不够用,想要增加更多的计算节点,又不影响现存的配置和VM正常运行,应该怎么做呢?
    我参考了http://openstack.redhat.com/Adding_a_compute_node 里面讲的就是修改下原来的answer file,然后重新运行packstack。 这样会不会对现存的VM造成影响,或回复为一些默认配置? 你是否用这种方法成功扩展过计算节点? 这个方法里提到“Change the value for CONFIG_NOVA_COMPUTE_HOSTS from the value of your first host IP address to the value of your second host IP address.”。比如说我以前的配置35和98两个计算节点:CONFIG_NOVA_COMPUTE_HOSTS=135.252.143.35,135.252.143.98,现在要增加58,152两个计算节点,需要修改配置为CONFIG_NOVA_COMPUTE_HOSTS=135.252.143.58,135.252.143.152呢,还是修改为CONFIG_NOVA_COMPUTE_HOSTS=135.252.143.35,135.252.143.98,135.252.143.58,135.252.143.152呢?

  25. 陈老师,用什么源比较好呢?我用的163和epel的,感觉很慢

  26. 陈老师,您好,可以指导一下利用NFS来做Live Migration吗,我折腾了几天都不成功,在Dashboard上能看到Migrating,过一段时间就变回Active了,没有迁移成功,日志里面也找不到什么有用的信息。

  27. 陈老师,你好,我使用两台物理机搭建完成后,云主机可以互相ping通,可以ping通br-ex的ip,但是不能ping通br-ex设置的网关以及外网,不知道是什么原因?谢谢

  28. 陈老师:
    我想问一下 RDO多节点部署 用虚拟机当多节点可以吗?还是只能真机部署?

    因为我发现controller和compute老是当配置了桥以后 就无法ping通了

  29. 陈老师 您好:
    我按照您的文档安装之后,查看网络的时候,都没有br-tun这个。装了好几遍都没有,您知道是什么原因么?
    [root@controller ~]# ovs-vsctl show
    5c6e45b7-0113-4115-9ac9-a7756faaced7
    Bridge br-int
    Port “qr-3b6f1b4b-4f”
    tag: 1
    Interface “qr-3b6f1b4b-4f”
    type: internal
    Port br-int
    Interface br-int
    type: internal
    Bridge br-ex
    Port “qg-28a5a2d7-ad”
    Interface “qg-28a5a2d7-ad”
    type: internal
    Port br-ex
    Interface br-ex
    type: internal
    ovs_version: “1.11.0”

 Leave a Reply

(required)

(required)