zoukankan      html  css  js  c++  java
  • 虚拟机重启错误,libvirtError:internal error:process exited while connecting to monitor

        客户云环境一台虚拟机,反馈重启不成功。经了解,客户环境使用的后端为ceph,故障虚拟机挂载一块云硬盘。

        收集客户的nova-compute日志,发现报错如下:

         libvirtError:internal error:process exited  while connecting to monitor

    如上图,日志显示云硬盘无法连接到ceph-mon,排查虚拟机所在的计算节点到ceph-mon的网络连接,从该计算节点telnet  10.20.4.5-7三个ceph-mon IP的6789端口,发现都是通的;排查计算节点到全部osd节点的ceph-public网络,发现链路也是通的。

           另外日志信息里,file=rbd:SATA_APP_POOL/volume-xxxxx:id=volume:key=xxxx:auth_support=cephx,像是云硬盘无法连接ceph-mon.

       排查网络连接正常下,通过上面的auth_support=cephx信息,怀疑是qemu-kvm到ceph-mon的cephx认证出现问题,有可能key信息不对.
         于是到虚拟机所在的计算节点,用virsh secret-list 和virsh secret-get-value检查key值信息

    对比nova-compute日志里面的key信息,对比secret-get-value输出,发现key值是对的,但是对应的ceph认证用户名对不上。在nova-compute错误日志里面,cephx的认证用户名是id=volumes,而secret-list输出,3f0xxx的UUID,所使用对应的cephx认证用户名像是compute。

               找另一台同样故障的虚拟机,用virsh  dumpxml  <instance name>查看虚拟机xml输出

    如上图,xml输出,3f00xx的secret UUID,auth  username=“volumes”,定位问题确实在cephx认证不通过,authname和key值无法对应,导致权限出错。

    问题原因调查:

            因客户环境不能远程,找了个测试环境复现问题,最后定位原因在于客户环境对接了第二套ceph集群,对接完成后,云硬盘的authname由原来的默认的compute变成了volumes,进而导致连接第一套ceph集群出现authx认证问题。验证分析如下:

            1,查看cinder.conf配置文件中对接第一套ceph部分配置如下

           如上图,cinder对接第一套ceph,使用pool为volumes,authx的认证用户rbd_user 为volumes。

         2. 查看计算节点nova.conf配置部分与rbd有关设置

          如上图,nova.conf中,使用的rbd_user为compute。

           rbd_secret_uuid和cinde.conf配置文件中的对应。

           rbd_secret对应的key值为ceph的client.compute用户的。

    如上图,可以看出,libvirt中的secret 相应的value值对应cephx的用户为client.compute,而对应不上cephx的client.volumes

     如上图,通过ceph auth get命令,我们可以看出,ceph authx的compute用户名,对应的key值,对compute pool,volumes pool都是拥有读写权限的。

      3.创建虚拟机,挂载第一套ceph集群2个云硬盘

    如上图,某虚拟机挂载2个云硬盘。

    如上图,通过virsh dumpxml <instance name>,查看虚拟机的xml输出,可以看到,vdb,vdc两个云硬盘对应的authname都为compute用户。

    4 .查看数据库中云硬盘的相关信息,以vdb为例

    如上图,查看nova库里面的block_device_mapping表,这张表记录虚拟机挂载云硬盘信息的,可以看出,记录的vdb连接信息的connection_info字段,auth_username为volumes,用户名和cinder.conf配置文件里面的rbd_user对应。

    问题原因 :

            在实施对接第二套ceph后,虚拟机hard reboot或start会根据数据库中的connection_info重新生成虚机的libvirt xml, 而在实施对接第二套ceph之前就挂载的云盘,在数据库nova.block_device_mapping中connection_info中auth_username=volumes, 实施对接第二套ceph之前, nova使用的是配置的ceph auth_username=compute去连接ceph,对接第二套ceph方案实施后使用数据库中auth_username=volumes会导致ceph鉴权失败

    问题解决:

        修改数据库中的connection_info中的auth_username为compute。

    update block_device_mapping set connection_info = replace(connection_info ,'"auth_username": "volumes"','"auth_username": "compute"')

  • 相关阅读:
    SQL 操作结果集 -并集、差集、交集、结果集排序
    MongoDB系列四:解决secondary的读操作
    org.apache.hadoop.ipc.RemoteException: User: root is not allowed to impersonate root
    hive 中窗口函数row_number,rank,dense_ran,ntile分析函数的用法
    FormData上传文件同时附带其他参数
    Hive删除分区
    Hive日期格式转换用法
    HIVE 不支持group by 别名
    ODS与EDW的区别
    hive数据类型转换、字符串函数、条件判断
  • 原文地址:https://www.cnblogs.com/360linux/p/13062074.html
Copyright © 2011-2022 走看看