北京SEO

linux中修改虚机IP的方法与问题

2019/10/10/17:45:46  阅读:1885  来源:谷歌SEO算法  标签: 人工智能卓医

前段时间,实现这么一个功能,界面上提供修改虚机IP地址的操作,后台neutron用port update方法,neutron client的port update接口和其他资源的update方法不太一样,参数没指定正确,会导致一个port上出现两个fixed ip.

接下来就是考虑floating ip的问题:

如果虚机绑定了浮动ip,修改虚机的fixed ip,在l3 namespace里还是会保存原来的iptables规则,因此,在port update之前要判断floating ip的存在关系,需要解绑和绑定的操作.

修改完成后,测试,发现api请求的时间居然快30s,port update会给每个计算节点发送cast的rpc消息,而在消息队列那边,同事改了代码,在cast消息中sleep了1s左右,因此到ml2 plugin的port update方法完成,耗费了很长的时间.

切回到内部环境测试后,使用neutron来看port的状态,确实已经更新,但是前端并没有及时的显示,也就是说nova那边并没有及时的获取这种状态,当时以为和rpc的sleep有关,就没仔细想这个问题.

后来老大问了这个问题,并且给出了nova的ExternalEventAPI.

ExternalEventAPI,我也赶紧看了下neutron这边的代码,在neutron的NeutronDbPluginV2类中,使用SQLAlchemy的事件监听来监听Port数据库的变化,然后给nova发送notifier,代码如下:

  1. classNeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2,
  2. CommonDbMixin):
  3. """V2NeutronplugininterfaceimplementationusingSQLAlchemymodels.
  4. Wheneveranon-readcallhappensthepluginwillcallaneventhandler
  5. classmethod(e.g.,network_created()).Theresultisthatthisclass
  6. canbesub-classedbyotherclassesthataddcustombehaviorsoncertain
  7. events.
  8. """
  9. def__init__(self):
  10. db.configure_db()
  11. ifcfg.CONF.notify_nova_on_port_status_changes:
  12. #NOTE(arosen)Theseeventlistnersareheretohookintowhen//phpfensi.com
  13. #portstatuschangesandnotifynovaabouttheirchange.
  14. self.nova_notifier=nova.Notifier()
  15. event.listen(models_v2.Port,'after_insert',
  16. self.nova_notifier.send_port_status)
  17. event.listen(models_v2.Port,'after_update',
  18. self.nova_notifier.send_port_status)
  19. event.listen(models_v2.Port.status,'set',
  20. self.nova_notifier.record_port_status_changed)

可见自己对代码还没有很熟悉,而且只关注自己这块,不注意和其他组件的交互,接着和nova这边的同事一起调试,在neutron server的日志中有报错,代码如下:

  1. 2014-11-2810:48:21.13717163DEBUGneutron.notifiers.nova[req-6b23770b-4f0d-4e85-ba21-1c47f191e136None]Sendingevents:[{'status':'completed','tag':u'ddc6cb03-1963-4f7e-bf07-e55acbada573','name':'network-vif-plugged','server_uuid':u'fcb2531c-878c-4934-ac7b-9f792071756d'}]send_events/usr/lib/python2.6/site-packages/neutron/notifiers/nova.py:218
  2. 2014-11-2810:48:21.13817163INFOrequests.packages.urllib3.connectionpool[-]Resettingdroppedconnection:10.100.100.10
  3. 2014-11-2810:48:21.16817163DEBUGrequests.packages.urllib3.connectionpool[-]"POST/v2/6d381a3f7609474d9cb9b5421cf89943/os-server-external-eventsHTTP/1.1"403131_make_request/usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py:362
  4. 2014-11-2810:48:21.16917163ERRORneutron.notifiers.nova[req-6b23770b-4f0d-4e85-ba21-1c47f191e136None]Failedtonotifynovaonevents:[{'status':'completed','tag':u'ddc6cb03-1963-4f7e-bf07-e55acbada573','name':'network-vif-plugged','server_uuid':u'fcb2531c-878c-4934-ac7b-9f792071756d'}]
  5. 2014-11-2810:48:21.16917163TRACEneutron.notifiers.novaTraceback(mostrecentcalllast):
  6. 2014-11-2810:48:21.16917163TRACEneutron.notifiers.novaFile"/usr/lib/python2.6/site-packages/neutron/notifiers/nova.py",line221,insend_events
  7. 2014-11-2810:48:21.16917163TRACEneutron.notifiers.novabatched_events)
  8. 2014-11-2810:48:21.16917163TRACEneutron.notifiers.novaFile"/usr/lib/python2.6/site-packages/novaclient/v1_1/contrib/server_external_events.py",line39,increate
  9. 2014-11-2810:48:21.16917163TRACEneutron.notifiers.novareturn_raw=True)
  10. 2014-11-2810:48:21.16917163TRACEneutron.notifiers.novaFile"/usr/lib/python2.6/site-packages/novaclient/base.py",line152,in_create
  11. 2014-11-2810:48:21.16917163TRACEneutron.notifiers.nova_resp,body=self.api.client.post(url,body=body)
  12. 2014-11-2810:48:21.16917163TRACEneutron.notifiers.novaFile"/usr/lib/python2.6/site-packages/novaclient/client.py",line286,inpost
  13. 2014-11-2810:48:21.16917163TRACEneutron.notifiers.novareturnself._cs_request(url,'POST',**kwargs)
  14. 2014-11-2810:48:21.16917163TRACEneutron.notifiers.novaFile"/usr/lib/python2.6/site-packages/novaclient/client.py",line260,in_cs_request
  15. 2014-11-2810:48:21.16917163TRACEneutron.notifiers.nova**kwargs)
  16. 2014-11-2810:48:21.16917163TRACEneutron.notifiers.novaFile"/usr/lib/python2.6/site-packages/novaclient/client.py",line242,in_time_request
  17. 2014-11-2810:48:21.16917163TRACEneutron.notifiers.novaresp,body=self.request(url,method,**kwargs)
  18. 2014-11-2810:48:21.16917163TRACEneutron.notifiers.novaFile"/usr/lib/python2.6/site-packages/novaclient/client.py",line236,inrequest
  19. 2014-11-2810:48:21.16917163TRACEneutron.notifiers.novaraiseexceptions.from_response(resp,body,url,method)
  20. 2014-11-2810:48:21.16917163TRACEneutron.notifiers.novaForbidden:Policydoesn'tallowcompute_extension:os-server-external-events:createtobeperformed.(HTTP403)(Request-ID:req-054895f0-fda1-4628-b288-d39d292db381)

接下来同事调试,nova那边使用keystone v3的接口,在nova的policy文件中,对应os-server-external-events:create需要admin的api操作:

  1. “compute_extension:os-server-external-events:create”:“rule:admin_api”,
  2. “compute_extension:v3:os-server-external-events:create”:“rule:admin_api”,

对于admin的context,需要admin的角色和cloud_admin的角色.

context_is_admin”:“role:admin and role:cloud_admin”,

因此需要给neutron加入cloud_admin的角色,keystone v3这块的变化,需要去看看.

广告内容

linux中修改虚机IP的方法与问题 linux中修改虚机IP的方法与问题 linux中修改虚机IP的方法与问题

相关阅读

热门评论

SEO研究中心 SEO研究中心

SEO研究中心提供免费SEO公开课

总篇数170

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法