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口殘留問題現象不一致。

 

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