oslo_messaging中的heartbeat_check
admin
2023-08-02 22:40:08
0

最近在做OpenStack控制节点高可用(三控)的测试,当关掉其中一个控制节点的时候,nova service-list 看到所有nova服务都是down的。 nova-compute的log中有大量这种错误信息:

2016-11-08 03:46:23.887 127895 INFO oslo.messaging._drivers.impl_rabbit [-] A recoverable connection/channel error occurred, trying to reconnect: [Errno 32] Broken pipe
2016-11-08 03:46:27.275 127895 INFO oslo.messaging._drivers.impl_rabbit [-] A recoverable connection/channel error occurred, trying to reconnect: [Errno 32] Broken pipe
2016-11-08 03:46:27.276 127895 INFO oslo.messaging._drivers.impl_rabbit [-] A recoverable connection/channel error occurred, trying to reconnect: [Errno 32] Broken pipe
2016-11-08 03:46:27.276 127895 INFO oslo.messaging._drivers.impl_rabbit [-] A recoverable connection/channel error occurred, trying to reconnect: [Errno 32] Broken pipe
2016-11-08 03:46:27.277 127895 INFO oslo.messaging._drivers.impl_rabbit [-] A recoverable connection/channel error occurred, trying to reconnect: [Errno 32] Broken pipe
2016-11-08 03:46:27.277 127895 INFO oslo.messaging._drivers.impl_rabbit [-] A recoverable connection/channel error occurred, trying to reconnect: [Errno 32] Broken pipe
2016-11-08 03:46:27.278 127895 INFO oslo.messaging._drivers.impl_rabbit [-] A recoverable connection/channel error occurred, trying to reconnect: [Errno 32] Broken pipe
2016-11-08 03:46:27.278 127895 INFO oslo.messaging._drivers.impl_rabbit [-] A recoverable connection/channel error occurred, trying to reconnect: [Errno 32] Broken pipe


上述抛出的异常在oslo_messaging/_drivers/impl_rabbit.py中定位出来了:

 def _heartbeat_thread_job(self):
        """Thread that maintains inactive connections
        """
        while not self._heartbeat_exit_event.is_set():
            with self._connection_lock.for_heartbeat():
                recoverable_errors = (
                    self.connection.recoverable_channel_errors +
                    self.connection.recoverable_connection_errors)
                try:
                    try:
                        self._heartbeat_check()
                        # NOTE(sileht): We need to drain event to receive
                        # heartbeat from the broker but don't hold the
                        # connection too much times. In amqpdriver a connection
                        # is used exclusivly for read or for write, so we have
                        # to do this for connection used for write drain_events
                        # already do that for other connection
                        try:
                            self.connection.drain_events(timeout=0.001)
                        except socket.timeout:
                            pass
                    except recoverable_errors as exc:
                        LOG.info(_LI("A recoverable connection/channel error "
                                     "occurred, trying to reconnect: %s"), exc)
                        self.ensure_connection()
                        
                except Exception:
                    LOG.warning(_LW("Unexpected error during heartbeart "
                                    "thread processing, retrying..."))
                    LOG.debug('Exception', exc_info=True)
            self._heartbeat_exit_event.wait(
                timeout=self._heartbeat_wait_timeout)
        self._heartbeat_exit_event.clear()

原本heartbeat check就是来检测组件服务和rabbitmq server之间的连接是否是活着的,oslo_messaging中的heartbeat_check任务在服务启动的时候就跑在后台了,当关闭一个控制节点时,实际上也关闭了一个rabbitmq server节点。只不过这里会一直处于循环之中,一直抛出recoverable_errors捕获到的异常,只有当self._heartbeat_exit_event.is_set()才会退出while循环。按理说应该加个超时的东西,这样就就不会一直处于循环之中,过好几分钟后才恢复。


今天我在虚拟机中安装了三控高可用,在nova.conf中加了如下参数:

[oslo_messaging_rabbit]

rabbit_max_retries = 2    # 重连最大次数

heartbeat_timeout_threshold = 0    # 禁止heartbeat check


测试,nova_compute 并不会一直抛出recoverable_errors捕获到的异常,nova service-list并不会出现所有服务down的情况。

后续有待在物理机上测试。。。。。。










相关内容

热门资讯

“巴威”来袭:台湾87人受伤,... 据台湾“中央社”报道,7月11日清晨,台风“巴威”暴风圈正式触及台湾北部、东北部及东部陆地。截至11...
中国“冷实力”是什么力? 今年夏天,法国、德国、西班牙、英国等欧洲国家高温持续攀升,不少地区超过40摄氏度,医院、养老院、家庭...
先别着急骂,想为福耀科技大学说... 文 | 郭英剑(中国人民大学全民阅读教育研究院院长)近期,福建福耀科技大学(以下简称福耀科大)校长王...
索尼电视机开关失灵怎么办 如果您的**电视机的开关失灵了,您可以尝试以下方法来解决此问题:1. 检查遥控器电池首先查看遥控器的...
油烟机按了开关不启动 一、电源问题 当我们按下油烟机的开关后,首先要检查的是电源是否正常。有时候,由于插头没有插紧或...
电路总闸频繁跳闸是什么问题 由于电路出现了短路,导致电流的过大,进而会导致频繁的跳闸出现;还有就是因为电流的过大,远远超过了实际...
家里频繁跳闸的原因 家里频繁跳闸可能由多种原因引起,以下是一些常见的原因:1. 过载:当连接到电路的电器设备总功率超过电...
游客突发不适晕倒后离世,气象部... 受今年9号台风“巴威”外围下沉气流及副热带高压叠加影响深圳近期持续晴热高温目前,深圳全市高温橙色预警...
广阔天地,大有可为——万千青年... 原标题:稳就业促就业|广阔天地,大有可为——万千青年在基层淬炼别样青春基层是青春最好的练兵场,乡村是...
协力·驰援·希望——来自广西救... 漫顶、溃口、冲毁……7月6日起,一场罕见的大范围持续性强降雨和洪涝灾害给山川秀美的广西造成重创,横州...