---
title: 配置进程NUMA绑核
description: "根据Redis Node在集群中的角色可以将具体的实例分为Master和Slave两类，其中，Master节点负责request的处理，写入、读取、更新数据，定时同步数据到备用Redis Node，数据持久化。Slave节点负责当主用Redis Node故障时，取代主用Redis Node对外提供服务。由于角色不同，在实际业务中，Master实例需要更多的CPU资源与网络资源，因此在Redis集群部署完成后，根据Redis节点在集群中负责的角色，将相应的Redis实例进行NUMA绑核操作。当集群规模不同时，需要调整该绑核策略以发挥不同规模集群的最优性能。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdbs/ecosystemEnable/Redis/kunpengredishdp_05_0018.html
sourcePath: /source/zh/kunpengdbs/ecosystemEnable/Redis/kunpengredishdp_05_0018.html
indexId: 39ed36312b035c0953df8bd947177a03fa87c25dee71f84a9dff24db507521e272
---
# 配置进程NUMA绑核

#### 目的

根据Redis Node在集群中的角色可以将具体的实例分为Master和Slave两类，其中，Master节点负责request的处理，写入、读取、更新数据，定时同步数据到备用Redis Node，数据持久化。Slave节点负责当主用Redis Node故障时，取代主用Redis Node对外提供服务。由于角色不同，在实际业务中，Master实例需要更多的CPU资源与网络资源，因此在Redis集群部署完成后，根据Redis节点在集群中负责的角色，将相应的Redis实例进行NUMA绑核操作。当集群规模不同时，需要调整该绑核策略以发挥不同规模集群的最优性能。


#### 方法

1. 获取当前集群的节点（实例）信息，首先使用如下命令通过集群中任一节点登录集群。
  1 redis-cli -h ip_server -p port_server

  以下参数请根据实际情况修改： ip_server：Redis服务器所在的IP地址。 port_server：Redis服务器所监听的端口号。

2. 查询当前集群各节点的角色信息，示例如下（简化版），可以看到通过该方式可以获得当前集群中各个实例的具体角色，将该信息保存至临时文件tmp_nodes_info.log中。
  1 cluster nodes

3. 根据实例的角色进行绑核，因为Redis集群是部署在多个物理服务器上的分布式数据库，因此需要分别获取每个服务器上Redis实例的角色信息。使用如下命令从tmp_nodes_info.log中批量获取属于某个服务IP地址的实例角色信息。
  1 2 local_master_ports=(cat tmp_nodes_info.log |grep "master"|awk '{print $2}'|awk -F@ '{print $1}' | grep ip_server | awk -F: '{print $2}') local_slave_ports=(cat tmp_nodes_info.log |grep "slave"|awk '{print $2}'|awk -F@ '{print $1}'|grep ip_server | awk -F: '{print $2}')

  ip_server：Redis服务器所在的IP地址，请根据实际情况修改。

4. 根据local_master_ports和local_slave_ports中的端口信息获取相应的进程PID，再根据PID对相应的Redis实例进行绑核操作。
  1 2 pid=(ps -ef | grep "redis" | grep port | awk '{print $2}') taskset -cp destCores pid

  以下参数请根据实际情况修改： port：需要绑核的Redis实例的端口号。 pid：需要绑定CPU核的进程ID。 destCores：需要绑定的CPU核。
