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

cip*_*hor 8 redis

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

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

Did*_*zia 14

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

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

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

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

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

如果你真的想与CPU结合发挥(但它真的是一个好主意吗?),你需要到N的Redis实例绑定到N + 1个CPU核心,保持自由一个核心的后台操作,并确保最多一个背景对于这些实例,操作可以同时运行.