dpvs学习笔记: 13 部署问题汇总

后续测试及部署遇到的问题都会写在这里,官方 faq 里面有常见的问题汇总,强烈建义先读一遍并完全理解内容。

编绎报错问题

/root/dpvs/src//../include/ipvs/conn.h:296:17: error: inline function 'dp_vs_conn_hashkey' declared but never defined [-Werror]
 inline uint32_t dp_vs_conn_hashkey(int af,

测试环境 kernel 4.4.0 gcc 5.4.0 报 inline 函数未定义的错误,需要在 Makefile FLAGS 加入 -fgnu89-inline 参数

vim src/Makefile
CFLAGS += -Wall -Werror -Wstrict-prototypes -Wmissing-prototypes -mcmodel=medium -fgnu89-inline

cpu性能问题

一定要注意 cpu model, 调成高性能模式,否则性能特别差,其它程序也有同样问题,具体可以 google 查看

cpufreq-set -g performance

安装依赖

缺什么就安装什么,线上机器是 ubuntu, 其它版本一样。特别是 dpdk 的 ko 驱动,不同内核版本是不通用的,需要重新编绎

apt-get install libnuma-dev -y
apt-get install libssl-dev -y
apt-get install libpopt-dev -y

网卡 dpdkN 序号确定

Network devices using DPDK-compatible driver
============================================
0000:85:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' drv=igb_uio unused=ixgbe
0000:85:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' drv=igb_uio unused=ixgbe

Network devices using kernel driver
===================================
0000:05:00.0 'I350 Gigabit Network Connection 1521' if=eth0 drv=igb unused=igb_uio
0000:05:00.1 'I350 Gigabit Network Connection 1521' if=eth1 drv=igb unused=igb_uio
0000:08:00.0 'I350 Gigabit Network Connection 1521' if=eth2 drv=igb unused=igb_uio
0000:08:00.1 'I350 Gigabit Network Connection 1521' if=eth3 drv=igb unused=igb_uio
0000:83:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' if=eth4 drv=ixgbe unused=igb_uio
0000:83:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' if=eth5 drv=ixgbe unused=igb_uio

系统 ethN 和 dpdkN 的这个序号 N 是没有对应关系的,但是可以根据 pci bus id 来确定顺序,比如 0000:85:00.0 就是 dpdk0, 0000:85:00.1 就是 dpdk1,按照序号顺序来排列的。搭建 fnat 如果不确定网卡号可以参考。

关于机器配置

CPU 至少双物理核,24 核心。16 个网卡列队 + 1 个管理核,就需要 17 个了。内存至少 64G,文件描术符硬限制必须要 655350,我司线上 dpvs 启动就用了 40W 个 fd,少了不够用。

关于 TOA 选择

市面上很多 TOA 版本,功能都是一样的,在 option 字段中植入真实的源 ip. 但是一定要注意 opt code, 有的是 200,有的是 254,如果 real server 看不到 src ip, 一定要 tcpdump -x 抓包查看 option

我司线上 lvs 的 real server 就是 200,所以我需要修改 dpvs 代码。另外市面上各种 toa 代码,适配的内核是不相同的。lvs toa 适用于 2.6 内核,dpvs toa 适配于 3.X 内核,如果用 4.X 内核可以考滤 华为TOA, 不过这个版本不支持 ipv6

16:07:32.922478 IP 10.20.23.140.netinfo-local > 10.20.58.21.https: Flags [S], seq 378679560, win 65535, options [Unknown Option 200089e675abc52,mss 1300,nop,wscale 6,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,sackOK,eol], length 0
16:07:36.931742 IP 10.20.23.140.netinfo-local > 10.20.58.21.https: Flags [S], seq 378679560, win 65535, options [Unknown Option 200089e675abc52,mss 1300,nop,wscale 

上面的 Unknown Option 就是 toa, 200 开头的就是 opt code,后面是 32位的 ip 和 port 数据。另外一定要注意,real server 程序监听是 ipv4, 如果 ipv6 暂时不识别,后续有时间再支持。

DEBUG 模式下定时器回调不生效

测试的时候肯定打开 DEBUG 模式,日志级别调成 DEBUG,编绎文件 src/config.mk 所有开关打开。会触发定时器不生效,给官方发 issue 了,可能在他们眼里是 feature 吧。

static void rte_timer_tick_cb(struct rte_timer *tim, void *arg)
{
    struct timer_scheduler *sched = arg;
    struct dpvs_timer *timer, *next;
    uint64_t left, hash, off;
    int level, lower;
    uint32_t *cursor;
    bool carry;

    assert(tim && sched);
#ifdef CONFIG_TIMER_MEASURE
    deviation_measure();
    return;
#endif
  ......
}

具体逻辑就在 timer.c 文件中,rte_timer_tick_cb 在 DEBUG 时直接返回了,跳过正常 conn_expire 逻辑。导致 ipvsadm -ln -c 时看到所有 TIME_WAIT 连接不释放

dpdk ip 不可达问题

这块非专业,需要网络同学指导。遇到过两次问题,测试机原有网卡 bond 过的,拆开后测试 dpvs. 但是交换机 bond 配置没有去掉,导致无法 ping 通。另外一个是加路由,如下所示

dpip addr add 202.108.10.1/32 dev dpdk0

dpip route add 202.108.10.0/30 dev dpdk0
dpip route add 192.168.168.0/24 dev dpdk1

ipvsadm --add-laddr -z 192.168.168.1 -t 202.108.10.1:6379 -F dpdk1

双臂模式下 202.108.10.1 是对外 vip,192.168.168.1 是对内的 local ip. dpdk 默认会加掩码 32 的本机路由,还要分别设置网段的默认路由,一定要注意掩码

fullnat fdir 问题

参照我前一篇《返程数据亲和性》文章,低端网卡是不支持 fdir 的,full-nat 只能用单核,性能差。比如 I350 不支持 fdir, 具体哪些网卡支持 fdir, 可以看官方文档,有连接。

大页内存配置

大页应用比较广,oracle 就可在以配置大页,能够有效的减少 TLB miss. DPVS 使用大页,官方文档有如下操作,配置 2M 的大页,每个 numa node 分配 8192 个,也就是 16G 内存。两个 numa 节点共消耗 32G

$ # for NUMA machine
$ echo 8192 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
$ echo 8192 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages

$ mkdir /mnt/huge
$ mount -t hugetlbfs nodev /mnt/huge

可以通过 free -h 看到大页内存是立即分配使用的。由于测试机内存刚刚 32G,立即触发了内存交换,kswapd0 频繁交换,io 消耗掉所有 cpu.调小 nr_hugepages,太小了不行,比如 1024,那共分配 4G 内存大页。启动 dpvs 初始化时会触发问题

IPVS: fail to init conn: no memory
EAL: Error - exiting with code: 1
Cause: Fail to init ipvs: no memory

那么 dpvs 需要如何分配内存呢?可以顺着代码查看初始化,网卡的 mbuf cache, 流表的 dp_vs_conn cache 等等,参数均可调,线上机器一般至少 64G 内存或更高,可以监控 dpvs 调整参数。

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

推荐阅读更多精彩内容