如何确保多个redis实例在不同的核心上运行?

8

我有一台4核服务器,想要在上面运行redis。为了充分利用4个核的能力,预计会启动4个redis实例,因为redis是单线程设计。

但是,我很好奇如何确保这4个实例确实在4个不同的核心上运行?当实例启动时,它如何决定它所在的核心?

1个回答

14
Redis本身并不能提供这样的保证。
如果启动了4个实例,那么操作系统将要在4个核心上调度4个不同的进程。如何平衡负载以优化系统性能取决于操作系统。
现代操作系统通常提供工具来强制执行一个进程在特定的CPU核心上运行,如果您真的想将每个实例绑定到特定的核心上。
例如,在Linux上,您可以查看tasksetnumactl命令。
实际上,您需要小心处理这个问题,因为一旦在特定的核心上启动Redis(设置CPU掩码),所有线程和子进程都将继承此CPU掩码。因此,当Redis尝试触发后台保存操作或后台AOF重写时,它将严重影响Redis实例的性能。这是因为主Redis线程将与后台操作共享CPU核心(通常会消耗CPU)。
如果你真的想玩CPU绑定(但这真的是一个好主意吗?),你需要将N个Redis实例绑定到N+1个CPU核心,保留一个核心用于后台操作,并确保这些实例最多只能同时运行一个后台操作。

另一个答案似乎有相反的意见:http://stackoverflow.com/a/36813957/1469954。该听哪个建议呢? :) - SexyBeast
这个答案甚至没有提到CPU绑定。他们怎么能表达相反的观点呢? - Didier Spezia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接