openstack 误删除 service project

         
  很久没有在****上写博客了,自从用了笔记之后,就很少发布博客了。昨天遇到一个问题,网上没有相关的搜索,我就根据经验写一些分享吧。前提是这样的,前天刚刚把公司测试云研发云的日常普通运维交接到研发中心和测试中心,以便责任归口。但是测试中心的接口人不太懂云,在运维的时候直接把service这个项目给删除掉了,飞来横祸啊。
  对于误删除 serveice 项目的危险情况,一定要注意避免,会发生生产事故,小心卷铺盖走人。service这个项目注册了nova,cinder,neutron,glance,heat这些服务,删除了也就意味着这些服务业不能用了,马上暂停所有运维请求。
注意事项:删除service 之后一定要冷静,千万不要脑袋发热重启任何服务,,否则可能直接导致服务崩溃,直接导致虚拟机无法正常工作,发生生产事故,准备挨批、扣年终绩效吧

1.备份数据库

         果你以前有备份的数据库的话,希望能用,如果没有的话也别急,首先把当前环境备份,避免不当操作导致环境彻底无法恢复。
mysqldump -uroot -pStar*2017 keystone > keystone_data_01.sql
备份keystone数据库
也尽量把其他数据库全部备份,要保持环境的完整

2.查找被删除的数据

         查找删除的数据,第一步就是要找到被删除的项目的ID,这是最重要的一步。如果找不到的话就只有重新加一个项目,重新注册了,至于能不能不重启服务恢复环境?祝你好运
使用数据库连接工具,登录数据库,打开keystone数据库,userprojectteantsendpoint全部都在keystone的数据库之中,删除的project项目也是在里面。
         keystone里面有一张revocation_event表,记录了删除priject的记录。打开表,根据删除时间找到被删除的项目的uuid
openstack 误删除 service project
         然后我再测试环境开启了mysqlbinlog,重复了删除动作,试图找到删除service project到底删除了哪些数据。将binlog导出到一个文件,查看了一下,删除service project整个过程的log有一万多行,太多了,需要过滤无用的信息。
根据project ID,查到与之相关的操作如下:
openstack 误删除 service project
  可以看到,一共执行了和项目id相关的5delete操作,删除了projectassignmentcredentialproject_endpoint_groupproject_endpoint5张表的内容。
其中,只有projectassignment两张表有数据,所以要做的就是恢复这两张表了
根据对应的测试环境,查看到底这两张表到底包含了哪些数据。
project
openstack 误删除 service project
        project只包含了project的一些信息,将service 项目的id添加进去就可以了
assignment
openstack 误删除 service project
  表结构如上,根据查找关系表,确定这是项目和user的对应关系表,actor_id是用户ID
target_id是项目IDrole则是角色ID。将数据拷贝下来,然后根据openstack的数据,把service项目和userrole的关系整理出来。
查看projectuserrole
openstack 误删除 service project
然后进行梳理,得到相应的对应关系。
openstack 误删除 service project

3.生成对应数据

根据你项目的具体服务情况,整理出来被删除的数据关系,你可参照这个表生成数据
openstack 误删除 service project
然后根据项目的user_idrole_id填充数据
openstack 误删除 service project
最后调整格式:
openstack 误删除 service project

4.导入数据

         最后打开数据库管理工具,打开keystone数据库,将数据添加到project表和assignment表之后就完成了。然后进入dashboard,查看每个服务是否正常工作。
如果数据刷新太慢可以重启keystone systemctl restart httpd
如果你在删除project做了一些操作改变了数据,记得要用备份数据还原了数据之后再添加数据
以上是openstack误删除service project的处理办法,希望你永远用不上