Redis 集群搭建
Redis 集群搭建
Redis5.0之后的版本放弃了 Ruby 的集群方式,改为使用 C 语言编写的redis-cli的方式,使集群的构建方式复杂度大大降低。此处Redis版本为5.0.6。便于操作,以下6个redis服务均为同一台部署(伪集群)。
Redis安装
-
下载Redis安装包
wget http://download.redis.io/releases/redis-5.0.6.tar.gz
-
解压压缩包
tar -zxvf redis-5.0.6.tar.gz
-
yum安装gcc依赖
yum install gcc -y
-
进入Redis目录
cd redis-5.0.6
-
编译安装
make MALLOC=libc
cd src && make install
-
配置文件拷贝
cp /usr/local/redis-5.0.6/redis.conf /etc/redis/6379.conf
Redis集群配置
Redis 集群是一个提供在多个Redis节点间共享数据的程序集。此处以三个master节点和三个slave节点作为示例。Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽。集群的每个节点负责一部分hash槽。
为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有一到多个从节点。例如master-A节点不可用了,集群便会选举slave-A节点作为新的主节点继续服务。
- 复制6份Redis的配置文件,如下所示:
cp /etc/redis/6379.conf /etc/redis/7001.conf cp /etc/redis/6379.conf /etc/redis/7002.conf cp /etc/redis/6379.conf /etc/redis/7003.conf cp /etc/redis/6379.conf /etc/redis/7004.conf cp /etc/redis/6379.conf /etc/redis/7005.conf cp /etc/redis/6379.conf /etc/redis/7006.conf
- 修改以下配置项
port 7001 # 端口,每个配置文件不同7001-7006 cluster-enabled yes # 启用集群模式 cluster-config-file nodes_7001.conf # 节点配置文件,每个配置文件不同7001-7006 cluster-node-timeout 5000 # 超时时间 appendonly yes # 打开aof持久化 daemonize yes # 后台运行 protected-mode no # 非保护模式 pidfile /var/run/redis_7001.pid # 根据端口修改
- 启动6个Redis节点
/usr/local/bin/redis-server /etc/redis/7001.conf /usr/local/bin/redis-server /etc/redis/7002.conf /usr/local/bin/redis-server /etc/redis/7003.conf /usr/local/bin/redis-server /etc/redis/7004.conf /usr/local/bin/redis-server /etc/redis/7005.conf /usr/local/bin/redis-server /etc/redis/7006.conf
- 配置集群
此时启动的6个Redis服务是相互独立运行的,通过以下命令配置集群:
配置完,看到如下图所示,则表示集群搭建成功。/usr/local/bin/redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
从图中可以看到启动了3个master节点,3个slave节点,16384个槽点平均分配到了3个master节点上。图中字母数字的组合为节点的ID。
集群常用命令
-
查看集群状态
redis-cli --cluster check 127.0.0.1:7001
-
查看节点
redis-cli -h 127.0.0.1 -p 7001 cluster nodes
-
添加节点
添加节点127.0.0.1:7007到集群
redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001
-
删除节点
从集群中删除 node-id 节点(删除主节点前需重新分片),以下 1bdc25d07bced05f6a65582c6365227d5e6a4530 为 node-id
redis-cli --cluster del-node 127.0.0.1:7001 1bdc25d07bced05f6a65582c6365227d5e6a4530
-
节点分片
为 127.0.0.1:7007 节点重新分片
redis-cli --cluster reshard 127.0.0.1:7007
-
创建从节点
上面第3点创建了127.0.0.1:7007的主节点,下面为 7007 创建 7008 从节点(7007 的 node-id 为7c593fc948c98d698d4821141af8737279c5c6e)
redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7001
redis-cli -h 127.0.0.1 -p 7008 127.0.0.1:7008> cluster replicate 7c593fc948c98d698d4821141af8737279c5c6e3