← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1257800] Re: Second L3 Agent removes first L3 Agent's interfaces from br-int

 

[Expired for neutron because there has been no activity for 60 days.]

** Changed in: neutron
       Status: Incomplete => Expired

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/1257800

Title:
  Second L3 Agent removes first L3 Agent's interfaces from br-int

Status in OpenStack Neutron (virtual network service):
  Expired

Bug description:
  I'm having an issue where I have a current running cloud with only one
  L3 Agent running. We were needing to add another external network and
  in doing so needed to add another L3 Agent. I followed the
  documentation here:

  http://docs.openstack.org/network-
  admin/admin/content/adv_cfg_l3_agent_multi_extnet.html

  And then also found some information about setting the host= in the
  l3_agent.ini. I did that with the new agent, because I wanted to keep
  the current L3 Agent settings and the UUID that maps to it. I also
  made sure to add that entry into the /etc/hosts file so that it would
  resolve to the same IP as the first l3_agent default hostname.

  The problem I'm seeing when setting the debug flag in the l3_agent.ini
  files is that whatever agent comes up first is fine. When I bring up
  the second L3 Agent, it seems to query the namespaces, find the
  namespace interfaces, remove those interfaces from br-int (which is
  the first L3 Agent's interfaces), and only add it's interfaces back to
  br-int. I have double checked the gateway_external_network_id to
  verify it matches the correct UUIDs from the "quantum net-list"
  output. I also tried playing with the metadata_ports but I don't think
  that is the issue here.

  I run the following commands to start these services:
  /usr/bin/python /usr/bin/quantum-l3-agent --config-file=/etc/quantum/quantum.conf --config-file=/etc/quantum/l3_agent.ini
  (Wait for it to finish)
  /usr/bin/python /usr/bin/quantum-l3-agent --config-file=/etc/quantum/quantum.conf --config-file=/etc/quantum/l3_agent_2.ini

  
  Here are my L3_agent.ini file configurations:

  l3_agent.ini:
  [DEFAULT]
  # Show debugging output in log (sets DEBUG log level output)
  # debug = True

  # L3 requires that an interface driver be set.  Choose the one that best
  # matches your plugin.

  # OVS based plugins (OVS, Ryu, NEC) that supports L3 agent
  interface_driver = quantum.agent.linux.interface.OVSInterfaceDriver
  # OVS based plugins(Ryu, NEC) that use OVS
  # as OpenFlow switch and check port status
  #ovs_use_veth = True
  # LinuxBridge
  #interface_driver = quantum.agent.linux.interface.BridgeInterfaceDriver

  # Allow overlapping IP (Must have kernel build with CONFIG_NET_NS=y and
  # iproute2 package that supports namespaces).
  use_namespaces = True

  # If use_namespaces is set as False then the agent can only configure
  one router.

  # This is done by setting the specific router_id.
  # router_id =

  # Each L3 agent can be associated with at most one external network.  This
  # value should be set to the UUID of that external network.  If empty,
  # the agent will enforce that only a single external networks exists and
  # use that external network id
  gateway_external_network_id = 8ae13d76-e426-4f6d-bfb4-6a70b85f55ef

  # Indicates that this L3 agent should also handle routers that do not have
  # an external network gateway configured.  This option should be True only
  # for a single agent in a Quantum deployment, and may be False for all agents
  # if all routers must have an external network gateway
  handle_internal_only_routers = True

  # Name of bridge used for external network traffic. This should be set to
  # empty value for the linux bridge
  external_network_bridge = br-ex

  # TCP Port used by Quantum metadata server
  metadata_port = 9697

  # Send this many gratuitous ARPs for HA setup. Set it below or equal to 0
  # to disable this feature.
  # send_arp_for_ha = 3

  # seconds between re-sync routers' data if needed
  # periodic_interval = 40

  # seconds to start to sync routers' data after
  # starting agent
  # periodic_fuzzy_delay = 5


  l3_agent_2.ini:
  [DEFAULT]
  # Show debugging output in log (sets DEBUG log level output)
  # debug = True

  host = second-l3

  # L3 requires that an interface driver be set.  Choose the one that best
  # matches your plugin.

  # OVS based plugins (OVS, Ryu, NEC) that supports L3 agent
  interface_driver = quantum.agent.linux.interface.OVSInterfaceDriver
  # OVS based plugins(Ryu, NEC) that use OVS
  # as OpenFlow switch and check port status
  #ovs_use_veth = True
  # LinuxBridge
  #interface_driver = quantum.agent.linux.interface.BridgeInterfaceDriver

  # Allow overlapping IP (Must have kernel build with CONFIG_NET_NS=y and
  # iproute2 package that supports namespaces).
  use_namespaces = True

  # If use_namespaces is set as False then the agent can only configure
  one router.

  # This is done by setting the specific router_id.
  # router_id =

  # Each L3 agent can be associated with at most one external network.  This
  # value should be set to the UUID of that external network.  If empty,
  # the agent will enforce that only a single external networks exists and
  # use that external network id
  gateway_external_network_id = b3213129-9c25-4af0-b8db-a41a4b471816

  # Indicates that this L3 agent should also handle routers that do not have
  # an external network gateway configured.  This option should be True only
  # for a single agent in a Quantum deployment, and may be False for all agents
  # if all routers must have an external network gateway
  handle_internal_only_routers = False

  # Name of bridge used for external network traffic. This should be set to
  # empty value for the linux bridge
  external_network_bridge = br-ex-2

  # TCP Port used by Quantum metadata server
  metadata_port = 9698

  # Send this many gratuitous ARPs for HA setup. Set it below or equal to 0
  # to disable this feature.
  # send_arp_for_ha = 3

  # seconds between re-sync routers' data if needed
  # periodic_interval = 40

  # seconds to start to sync routers' data after
  # starting agent
  # periodic_fuzzy_delay = 5

  
  quantum.conf:
  [DEFAULT]
  # Default log level is INFO
  # verbose and debug has the same result.
  # One of them will set DEBUG log level output
  debug = False
  verbose = False

  # Where to store Quantum state files.  This directory must be writable by the
  # user executing the agent.
  # state_path = /var/lib/quantum

  # Where to store lock files
  lock_path = $state_path/lock

  # log_format = %(asctime)s %(levelname)8s [%(name)s] %(message)s
  # log_date_format = %Y-%m-%d %H:%M:%S

  # use_syslog                           -> syslog
  # log_file and log_dir                 -> log_dir/log_file
  # (not log_file) and log_dir           -> log_dir/{binary_name}.log
  # use_stderr                           -> stderr
  # (not user_stderr) and (not log_file) -> stdout
  # publish_errors                       -> notification system

  # use_syslog = False
  # syslog_log_facility = LOG_USER

  # use_stderr = True
  log_file = quantum.log
  log_dir = /var/log/quantum/

  # publish_errors = False

  # Address to bind the API server
  bind_host = 0.0.0.0

  # Port the bind the API server to
  bind_port = 9696

  # Path to the extensions.  Note that this can be a colon-separated list of
  # paths.  For example:
  # api_extensions_path = extensions:/path/to/more/extensions:/even/more/extensions
  # The __path__ of quantum.extensions is appended to this, so if your
  # extensions are in there you don't need to specify them here
  # api_extensions_path =

  # Quantum plugin provider module
  # core_plugin =
  core_plugin = quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPluginV2

  # Advanced service modules
  # service_plugins =

  # Paste configuration file
  api_paste_config = /etc/quantum/api-paste.ini

  # The strategy to be used for auth.
  # Supported values are 'keystone'(default), 'noauth'.
  auth_strategy = keystone

  # Base MAC address. The first 3 octets will remain unchanged. If the
  # 4h octet is not 00, it will also used. The others will be
  # randomly generated.
  # 3 octet
  # base_mac = fa:16:3e:00:00:00
  # 4 octet
  # base_mac = fa:16:3e:4f:00:00

  # Maximum amount of retries to generate a unique MAC address
  # mac_generation_retries = 16

  # DHCP Lease duration (in seconds)
  # dhcp_lease_duration = 120

  # Allow sending resource operation notification to DHCP agent
  # dhcp_agent_notification = True

  # Enable or disable bulk create/update/delete operations
  # allow_bulk = True
  # Enable or disable pagination
  # allow_pagination = False
  # Enable or disable sorting
  # allow_sorting = False
  # Enable or disable overlapping IPs for subnets
  # Attention: the following parameter MUST be set to False if Quantum is
  # being used in conjunction with nova security groups and/or metadata service.
  allow_overlapping_ips = True
  # Ensure that configured gateway is on subnet
  # force_gateway_on_subnet = False

  
  # RPC configuration options. Defined in rpc __init__
  # The messaging module to use, defaults to kombu.
  # rpc_backend = quantum.openstack.common.rpc.impl_kombu
  # Size of RPC thread pool
  # rpc_thread_pool_size = 64,
  # Size of RPC connection pool
  # rpc_conn_pool_size = 30
  # Seconds to wait for a response from call or multicall
  # rpc_response_timeout = 60
  # Seconds to wait before a cast expires (TTL). Only supported by impl_zmq.
  # rpc_cast_timeout = 30
  # Modules of exceptions that are permitted to be recreated
  # upon receiving exception data from an rpc call.
  # allowed_rpc_exception_modules = quantum.openstack.common.exception, nova.exception
  # AMQP exchange to connect to if using RabbitMQ or QPID
  control_exchange = quantum

  # If passed, use a fake RabbitMQ provider
  fake_rabbit = False

  # Configuration options if sending notifications via kombu rpc (these are
  # the defaults)
  # SSL version to use (valid only if SSL enabled)
  # kombu_ssl_version =
  # SSL key file (valid only if SSL enabled)
  # kombu_ssl_keyfile =
  # SSL cert file (valid only if SSL enabled)
  # kombu_ssl_certfile =
  # SSL certification authority file (valid only if SSL enabled)'
  # kombu_ssl_ca_certs =
  # IP address of the RabbitMQ installation
  rabbit_host = 192.168.0.254
  # Password of the RabbitMQ server
  rabbit_password = password
  # Port where RabbitMQ server is running/listening
  # rabbit_port = 5672
  # User ID used for RabbitMQ connections
  # rabbit_userid = guest
  # Location of a virtual RabbitMQ installation.
  # rabbit_virtual_host = /
  # Maximum retries with trying to connect to RabbitMQ
  # (the default of 0 implies an infinite retry count)
  # rabbit_max_retries = 0
  # RabbitMQ connection retry interval
  # rabbit_retry_interval = 1

  # QPID
  # rpc_backend=quantum.openstack.common.rpc.impl_qpid
  # Qpid broker hostname
  # qpid_hostname = localhost
  # Qpid broker port
  # qpid_port = 5672
  # Username for qpid connection
  # qpid_username = ''
  # Password for qpid connection
  # qpid_password = ''
  # Space separated list of SASL mechanisms to use for auth
  # qpid_sasl_mechanisms = ''
  # Seconds between connection keepalive heartbeats
  # qpid_heartbeat = 60
  # Transport to use, either 'tcp' or 'ssl'
  # qpid_protocol = tcp
  # Disable Nagle algorithm
  # qpid_tcp_nodelay = True

  # ZMQ
  # rpc_backend=quantum.openstack.common.rpc.impl_zmq
  # ZeroMQ bind address. Should be a wildcard (*), an ethernet interface, or IP.
  # The "host" option should point or resolve to this address.
  # rpc_zmq_bind_address = *

  # ============ Notification System Options =====================

  # Notifications can be sent when network/subnet/port are create, updated or deleted.
  # There are three methods of sending notifications: logging (via the
  # log_file directive), rpc (via a message queue) and
  # noop (no notifications sent, the default)

  # Notification_driver can be defined multiple times
  # Do nothing driver
  # notification_driver = quantum.openstack.common.notifier.no_op_notifier
  # Logging driver
  # notification_driver = quantum.openstack.common.notifier.log_notifier
  # RPC driver. DHCP agents needs it.
  notification_driver = quantum.openstack.common.notifier.rpc_notifier

  # default_notification_level is used to form actual topic name(s) or to set logging level
  default_notification_level = INFO

  # default_publisher_id is a part of the notification payload
  # host = myhost.com
  # default_publisher_id = $host

  # Defined in rpc_notifier, can be comma separated values.
  # The actual topic names will be %s.%(default_notification_level)s
  notification_topics = notifications

  # Default maximum number of items returned in a single response,
  # value == infinite and value < 0 means no max limit, and value must
  # greater than 0. If the number of items requested is greater than
  # pagination_max_limit, server will just return pagination_max_limit
  # of number of items.
  # pagination_max_limit = -1

  # Maximum number of DNS nameservers per subnet
  # max_dns_nameservers = 5

  # Maximum number of host routes per subnet
  # max_subnet_host_routes = 20

  # Maximum number of fixed ips per port
  # max_fixed_ips_per_port = 5

  # =========== items for agent management extension =============
  # Seconds to regard the agent as down.
  # agent_down_time = 5
  # ===========  end of items for agent management extension =====

  # =========== items for agent scheduler extension =============
  # Driver to use for scheduling network to DHCP agent
  # network_scheduler_driver = quantum.scheduler.dhcp_agent_scheduler.ChanceScheduler
  # Driver to use for scheduling router to a default L3 agent
  # router_scheduler_driver = quantum.scheduler.l3_agent_scheduler.ChanceScheduler

  # Allow auto scheduling networks to DHCP agent. It will schedule non-hosted
  # networks to first DHCP agent which sends get_active_networks message to
  # quantum server
  # network_auto_schedule = True

  # Allow auto scheduling routers to L3 agent. It will schedule non-hosted
  # routers to first L3 agent which sends sync_routers message to quantum server
  # router_auto_schedule = True
  # ===========  end of items for agent scheduler extension =====

  [QUOTAS]
  # resource name(s) that are supported in quota features
  quota_items = network,subnet,port

  # default number of resource allowed per tenant, minus for unlimited
  # default_quota = -1

  # number of networks allowed per tenant, and minus means unlimited
  quota_network = 20

  # number of subnets allowed per tenant, and minus means unlimited
  quota_subnet = 20

  # number of ports allowed per tenant, and minus means unlimited
  quota_port = 50

  # default driver to use for quota checks
  # quota_driver = quantum.quota.ConfDriver

  [DEFAULT_SERVICETYPE]
  # Description of the default service type (optional)
  # description = "default service type"
  # Enter a service definition line for each advanced service provided
  # by the default service type.
  # Each service definition should be in the following format:
  # <service>:<plugin>[:driver]

  [AGENT]
  # Use "sudo quantum-rootwrap /etc/quantum/rootwrap.conf" to use the real
  # root filter facility.
  # Change to "sudo" to skip the filtering and just run the comand directly
  # root_helper = sudo
  root_helper = sudo quantum-rootwrap /etc/quantum/rootwrap.conf

  # =========== items for agent management extension =============
  # seconds between nodes reporting state to server, should be less than
  # agent_down_time
  # report_interval = 4

  # ===========  end of items for agent management extension =====

  [keystone_authtoken]
  auth_host = 192.168.0.254
  auth_port = 35357
  auth_protocol = http
  admin_tenant_name = service
  admin_user = quantum
  admin_password = password
  signing_dir = /var/lib/quantum/keystone-signing

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1257800/+subscriptions


References