OVN环境虚机热迁移丢包严重

问题描述
虚机热迁移时ping包丢包5个以上。

[root@node-4 ~]# ping 172.47.0.21
PING 172.47.0.21 (172.47.0.21) 56(84) bytes of data.
......
64 bytes from 172.47.0.21: icmp_seq=82 ttl=63 time=0.307 ms
64 bytes from 172.47.0.21: icmp_seq=83 ttl=63 time=0.340 ms
64 bytes from 172.47.0.21: icmp_seq=89 ttl=63 time=1.22 ms
64 bytes from 172.47.0.21: icmp_seq=90 ttl=63 time=0.413 ms
......
--- 172.47.0.21 ping statistics ---
95 packets transmitted, 90 received, 5% packet loss, time 96206ms
rtt min/avg/max/mdev = 0.282/0.483/3.467/0.532 ms

热迁移过程:

  1. 在目标节点创建虚机的tap设备
  2. 网卡up后拷贝虚机进程的内存
  3. 迁移完成后源节点删除虚机的tap设备
  4. 调用ovs-vsctl删除源节点ovsdb数据库中的port数据
  5. 调用neutron client更新port的binding host信息为目标节点
_post_live_migration
|- post_live_migration_at_source
  |- unplug_vifs(去源节点删除vif)
|- post_live_migration_at_destination
  |- migrate_instance_finish
    |- _update_port_binding_for_instance(调用neutron client执行port update,修改binding:host_id信息)

分析过程:

设置ovn-controller binding模块vlog日志等级为debug,并抓包, 发现丢包时间正好位于源节点release lport后到目标节点claim lport成功这段时间

/* 源节点 */
2021-10-11T08:00:40.691Z|28327|binding|INFO|Releasing lport 84282c8b-0002-47b1-a5c0-a7947cb795ca from this chassis.

/* 目标节点 */
2021-10-11T07:59:35.690Z|31303|binding|INFO|Not claiming lport 84282c8b-0002-47b1-a5c0-a7947cb795ca, chassis 63c4fb22-b817-4c84-9594-a8c554b8de46 requested-chassis node-3.domain.tld
2021-10-11T08:00:40.711Z|31304|binding|INFO|Not claiming lport 84282c8b-0002-47b1-a5c0-a7947cb795ca, chassis 63c4fb22-b817-4c84-9594-a8c554b8de46 requested-chassis node-3.domain.tld
2021-10-11T08:00:49.621Z|31305|binding|INFO|Claiming lport 84282c8b-0002-47b1-a5c0-a7947cb795ca for this chassis.
2021-10-11T08:00:49.621Z|31306|binding|INFO|84282c8b-0002-47b1-a5c0-a7947cb795ca: Claiming fa:16:3e:f8:c5:5d 192.168.222.112

count_pkt_lose.png

ovn-controller release和claim lport部分代码:

bool
binding_handle_ovs_interface_changes(struct binding_ctx_in *b_ctx_in,
                                     struct binding_ctx_out *b_ctx_out)
{
        ...
        const char *iface_id = smap_get(&iface_rec->external_ids, "iface-id");
        const char *old_iface_id = smap_get(b_ctx_out->local_iface_ids,
                                            iface_rec->name);
        const char *cleared_iface_id = NULL;
        if (!ovsrec_interface_is_deleted(iface_rec)) {
            int64_t ofport = iface_rec->n_ofport ? *iface_rec->ofport : 0;
            if (iface_id) {
                /* Check if iface_id is changed. If so we need to
                 * release the old port binding and associate this
                 * inteface to new port binding. */
                if (old_iface_id && strcmp(iface_id, old_iface_id)) {
                    cleared_iface_id = old_iface_id;
                } else if (ofport <= 0) {
                    /* If ofport is <= 0, we need to release the iface if
                     * already claimed. */
                    cleared_iface_id = iface_id;
                }
            } else if (old_iface_id) {
                cleared_iface_id = old_iface_id;
            }
        } else {
            cleared_iface_id = iface_id;
        }

        if (cleared_iface_id) {
            handled = consider_iface_release(iface_rec, cleared_iface_id,
                                             b_ctx_in, b_ctx_out);
        }

gdb调试controller代码时发现ofport为-1,根据代码ofport ≤ 0时就会release lport


debug

claim lport时能否claim判断:

static bool
can_bind_on_this_chassis(const struct sbrec_chassis *chassis_rec,
                         const char *requested_chassis)
{
    return !requested_chassis || !requested_chassis[0]
           || !strcmp(requested_chassis, chassis_rec->name)
           || !strcmp(requested_chassis, chassis_rec->hostname);
}

尝试模拟Interface ofport为-1:

  1. 创建tap设备
  2. 将tap设备挂给br-int
  3. iprouter2命令将tap设备删除

此时查看interface的ofport字段为-1

[root@node-1 ~]# ovs-vsctl list Interface | grep --color -C 10 lc-tap
...
error               : "could not open network device lc-tap (No such device)"
external_ids        : {}
...
name                : lc-tap
ofport              : -1
...

设备删除时间点确定
在nova执行unplug前加日志,并执行热迁移,对比vswitchd和nova日志,发现vswitchd在nova做unplug前已经将interface删除

nova日志:


2021-10-27 16:07:01.368 28641 INFO nova.virt.libvirt.driver [req-8b6d0c19-8088-4b91-94d6-bc8e037ac010 cf354206167f49599583663544832c9b d988d53fd2a94686b0c56fc8576e727b - - -] Do unplug vif from post_live_migration_at_source
2021-10-27 16:07:01.369 28641 INFO nova.virt.libvirt.driver [req-8b6d0c19-8088-4b91-94d6-bc8e037ac010 cf354206167f49599583663544832c9b d988d53fd2a94686b0c56fc8576e727b - - -] Do unplug vif from unplug_vifs
2021-10-27 16:07:01.373 28641 INFO os_vif [req-8b6d0c19-8088-4b91-94d6-bc8e037ac010 cf354206167f49599583663544832c9b d988d53fd2a94686b0c56fc8576e727b - - -] Successfully unplugged vif VIFOpenVSwitch(active=False,address=fa:16:3e:b3:f9:b4,bridge_name='br-int',has_traffic_filtering=True,id=a88326d4-bca7-444c-8476-abcaddec9f12,network=Network(2c4dfab0-7362-4ad8-9a92-27cec0fe6c05),plugin='ovs',port_profile=VIFPortProfileBase,preserve_on_delete=False,vif_name='tapa88326d4-bc')

vswitchd日志:

258:2021-10-27T08:06:43.183Z|08976|bridge|INFO|bridge br-int: deleted interface tapa88326d4-bc on port 1493
259:2021-10-27T08:06:43.188Z|08977|bridge|WARN|could not open network device tapa88326d4-bc (No such device)

最后想计算team确定在执行unplug vif前qemu会删除源节点的tap设备

热迁移过程及丢包时序图

live_migrate.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,563评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,694评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,672评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,965评论 1 318
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,690评论 6 413
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,019评论 1 329
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,013评论 3 449
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,188评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,718评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,438评论 3 360
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,667评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,149评论 5 365
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,845评论 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,252评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,590评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,384评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,635评论 2 380

推荐阅读更多精彩内容