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

时间:2012-08-15 09:19:17

标签: redis

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

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

1 个答案:

答案 0 :(得分:14)

Redis本身并不提供这样的保证。

如果启动4个实例,则将有4个不同的进程,操作系统必须在4个核心上进行调度。操作系统可以执行此负载平衡,从而优化系统性能。

现在,如果您真的想将每个实例绑定到特定的核心,现代操作系统通常会提供工具来强制执行特定CPU核心上的进程。

例如,在Linux上,您可以查看tasksetnumactl命令。

实际上,您需要注意这一点,因为一旦在特定核心上启动Redis(设置CPU掩码),所有线程和子进程都将继承此CPU掩码。因此,当Redis尝试触发后台保存操作或后台AOF重写时,它将严重影响Redis实例的性能。这是因为Redis主线程将通过后台操作(通常是CPU消耗)共享CPU核心。

如果你真的想玩CPU绑定(但这真的是个好主意吗?),你需要将N Redis实例绑定到N + 1个CPU核心,保留一个核心可用于后台操作,并确保在对于这些实例,大多数后台操作可以​​同时运行。