Neutron DHCP-Agent问题分析定位(4)

1.5    问题分析

1.5.1 查看进程启动时间

查看neutron.conf修改时间,三个节点都是7月15号。

查看neutron-server启动时间,都是在neutron.conf修改之后启动。

查看dhcp-agent启动时间,三个节点都是7月12号。

所以这里存在问题,neutron.conf修改之后dhcp-agent没重启。

不过,现在dhcp-agent状态是正常的,不是根本原因。

 

查看neutron.conf修改时间:

[root@yfq-vnet-ctl-9-74~]# ls -l /etc/neutron/neutron.conf

-rw-r--r-- 1root root 35503 Jul 15 16:49 /etc/neutron/neutron.conf

[root@yfq-vnet-ctl-9-74~]#

[root@yfq-vnet-ctl-9-89~]# ls -l /etc/neutron/neutron.conf

-rw-r--r-- 1root root 35503 Jul 15 16:49 /etc/neutron/neutron.conf

[root@yfq-vnet-ctl-9-89~]#

[root@yfq-vnet-ctl-9-104~]# ll /etc/neutron/neutron.conf

-rw-r--r-- 1root root 35504 Jul 15 16:49 /etc/neutron/neutron.conf

[root@yfq-vnet-ctl-9-104~]#

 

查看dhcp-agent启动时间:

 

 

 

查看neutron-server启动时间。

 

查看ovs-agent启动时间:

 

 

1.5.2  为什么出现binding_failed

从代码流程分析中可以看出,dhcp port绑定失败的可能原因有:

1)      dhcp-agent里配置的租户网络类型不对。

2)      dhcp-agent上报create port后,agent立即变成down的。

 

1.5.3  为什么dhcp-agent不打log

我们进行一下如下验证:

创建网络:

 

网络创建成功了,但是dhcp-agent日志中并没有任何打印。

 

将dnsmasq进程杀掉,看看能否恢复。

恢复了,并且终于打了个日志:

 

综上,dhcp-agent里,如果没有异常,是不打log的。

这个可以改进一下。

 

1.1.4  为什么dhcp-agent同步时不会删除多余的tap口

在问题定位时,我们新建了网络,可以看到是没有问题的。

所以这些出问题的网络应该都是以前创建的,在某种条件下,tap没有被正确删除。

 

下面我们一步一步进行测试,寻找问题复现的办法,并结合代码分析,找到问题的根本原因。

 

1.1.5  对比配置文件

首先找个正常的环境,对比下配置文件,看看是不是配置问题。

 

研发区环境

开源环境

[DEFAULT]
verbose = True ---->
auth_strategy=keystone
rpc_backend = rabbit
core_plugin = ml2  ---->  
service_plugins = router,firewall,lbaas,vpnaas  ---->  
allow_overlapping_ips = True  ---->  
notify_nova_on_port_status_changes = True  ---->  
notify_nova_on_port_data_changes = True  ---->  
nova_url = http://10.254.9.242:8774/v2  ---->  
bind_host = 10.254.9.74  ---->  
dhcp_agents_per_network = 2
debug = False
dhcp_lease_duration = -1
rpc_workers = 10  ---->  
api_workers = 10  ---->  
[matchmaker_redis]
[matchmaker_ring]
[quotas]
[agent]
[keystone_authtoken]
identity_uri = http://10.254.9.242:5000
auth_url = http://10.254.9.242:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = neutron
password = 947da0da7413
[database]
connection = mysql://neutron:bcvnetwork#[email protected]:3306/neutron
[nova]
auth_url = http://10.254.9.242:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
region_name = RegionOne
project_name = service
username = nova
password = d4849649eb79acd1bd43
[oslo_concurrency]
lock_path = $state_path/lock
[oslo_policy]
[oslo_messaging_amqp]
[oslo_messaging_qpid]
[oslo_messaging_rabbit]
rabbit_hosts = 10.254.9.74:5672,10.254.9.89:5672,10.254.9.104:5672
rabbit_userid = openstack
rabbit_password = bcvnetwork#123
rabbit_retry_interval=1
rabbit_retry_backoff=2
rabbit_max_retries=0
rabbit_durable_queues=true
rabbit_ha_queues=true

[DEFAULT]
verbose = True
router_distributed = False
debug = False
state_path = /var/lib/neutron
use_syslog = False
log_dir =/var/log/neutron
bind_host = 0.0.0.0
bind_port = 9696
core_plugin =neutron.plugins.ml2.plugin.Ml2Plugin
service_plugins =router
auth_strategy = keystone
base_mac = fa:16:3e:00:00:00
mac_generation_retries = 16 ---默认
dhcp_lease_duration = 86400
dhcp_agent_notification = True  ---默认
allow_bulk = True
allow_pagination = False
allow_sorting = False
allow_overlapping_ips = True
agent_down_time = 75   ----默认
router_scheduler_driver = neutron.scheduler.l3_agent_scheduler.ChanceScheduler
allow_automatic_l3agent_failover = False
dhcp_agents_per_network = 1
l3_ha = False
api_workers = 40
rpc_workers = 40
use_ssl = False
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
nova_url = http://10.254.9.82:8774/v2
nova_region_name =RegionOne
nova_admin_username =nova
nova_admin_tenant_name =services
nova_admin_password =089c2c7ba84e4cc2
nova_admin_auth_url =http://10.254.9.82:5000/v2.0
send_events_interval = 2
rpc_backend=neutron.openstack.common.rpc.impl_kombu ---默认rabbit
control_exchange=neutron
lock_path=/var/lib/neutron/lock
[matchmaker_redis]
[matchmaker_ring]
[quotas]
[agent]
root_helper = sudo neutron-rootwrap /etc/neutron/rootwrap.conf  --默认sudo
report_interval = 30 --默认
[keystone_authtoken]
auth_uri = http://10.254.9.82:5000/v2.0
identity_uri = http://10.254.9.82:35357
admin_tenant_name = services
admin_user = neutron
admin_password = fd1e5c16fcf3432c
[database]
connection = mysql://neutron:[email protected]/neutron
max_retries = 10
retry_interval = 10
min_pool_size = 1
max_pool_size = 10
idle_timeout = 3600
max_overflow = 20
[nova]
[oslo_concurrency]
lock_path = $state_path/lock
[oslo_policy]
[oslo_messaging_amqp]
[oslo_messaging_qpid]
[oslo_messaging_rabbit]
kombu_reconnect_delay = 1.0
rabbit_host = 10.254.9.82
rabbit_port = 5672
rabbit_hosts = 10.254.9.82:5672
rabbit_use_ssl = False
rabbit_userid = guest
rabbit_password = guest
rabbit_virtual_host = /
rabbit_ha_queues = False
heartbeat_rate=2   ---自研没有
heartbeat_timeout_threshold=0

 

从配置文件看,只有root_helper比较可疑,我们来验证一下。

1.1.6  测试root_helper参数

找个正常的环境,进行如下操作。

 

1)测试创建网络

将root_helper的配置修改为sudo。


重启dhcp-agent,

创建网络,观察网络能否创建成功


创建网络成功,但是端口状态是down的。原因是sudo这个roothelper不能执行root命令。

 


这与之前的问题现象不一致,所以不是root_helper的问题。

 

1.1.7  测试rabbit host配置错误时的现象

修改neutron.conf中mq host为错误的地址。

rabbit_host =10.254.9.82

rabbit_port =5672

rabbit_hosts =10.254.9.82:5672

->

rabbit_host =10.254.9.83

rabbit_port =5672

rabbit_hosts =10.254.9.83:5672

 

然后重启dhcp-agent,观察现象:

dhcp-agent报错:


过一段时间,agent变为down。


创建网络时,没有创建dhcp-port:


这是因为dhcpport的创建流程是这样的:

neutron plugin中:

1)      根据dhcp_agents_per_network配置的数目,调度网络到某个dhcp agent上。

2)      plugin通过rpc ( rabbit mq)发送给dhcp agent。内容是网络ID。

 

dhcp agent中:

1)      通过rpc获取网络信息,包括该网络内的子网、端口的全部信息。

2)      检测该网络在该agent上是否已经创建dhcp port,如果已经创建,但是subnet-id有变化,发送rpc给plugin更新端口。(一个网络一个dhcp server,所以会承载所有的子网的dhcp功能)

3)      如果dhcpport已经创建,但是device_id不对,发送rpc给plugin更新端口。

4)      如果dhcpport没有创建,发送rpc给plugin创建端口。

5)      如上更新、创建端口的动作都是同步事件,会等plugin的返回结果。

6)      创建namespace,并将tap加入其中。

7)      在tap口上配置ip、路由。

8)      生成leases、hosts等文件。

9)      在namespace里启动dnsmasq服务,并且通过process_monitor监控进程状态。

 

按照上面的流程,如果rabbit host配置错误,会直接导致dhcp port无法创建。

 

与tap口残留问题现象不一致。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章