redis3.0 以前集群需要借助哨兵 sentinel ,在 3.0 版本正式推出 Redis Cluster 高可用集群模式; Redis Cluster 方案不需要额外部署 Sentinel(哨兵)集群。

Redis 集群要求至少三个节点,否则不成功。本文采用虚拟机,模拟搭建三主三从集群模式。

虚拟机 IP 分别是 192.168.18.139192.168.18.140192.168.18.141
可以只配置一台虚拟机,其他两台直接用克隆
本文使用 192.168.18.139 进行配置

一 安装 redis v5

1. 下载

1
wget http://download.redis.io/releases/redis-5.0.7.tar.gz

2. 解压

1
tar -zxvf redis-5.0.7.tar.gz

3. 编译安装

将其安装在 /usr/local/redis 目录

1
2
3
cd redis-5.0.7
make
cd src && make PREFIX=/usr/local/redis install

二 配置节点

将节点信息配置在cluster目录下, 端口号分别是6378,6379

1
2
cd /usr/local/redis
mkdir -p cluster/6378 cluster/6378

1. 修改配置文件

复制 redis.confcluster/6378/

1
vim cluster/redis.conf

主要修改内容如下:

启用守护线程
1.daemonize yes

同台计器不同节点的端口要不一样
2. port 6378

指定数据目录,必须要指定不同的目录位置,不然会丢失数据
3. dir /usr/local/redis/cluster/6378/

启动集群模式
4. cluster-enabled yes

集群节点信息文件,这里6378最好和port对应上
5. cluster-config-file nodes-6378.conf

去掉bind绑定访问ip信息
6. #bind 127.0.0.1

关闭保护模式
7. protected-mode no

  1. appendonly yes
  1. cluster-node-timeout 5000

如果要设置密码需要增加如下配置

设置redis密码
10. requirepass xxx

设置集群节点间访问密码,跟上面一致
11. masterauth xxx

6378 的配置复制到 6379 并将 2,3,5 中的端口号修改为6379

1
cp cluster/6378/redis.conf cluster/6379/redis.conf

2. 创建启动脚本

1
2
3
4
5
6
vim /usr/local/redis/start-redis-cluster.sh

#!/bin/sh
REDIS_HOME=/usr/local/redis
$REDIS_HOME/bin/redis-server $REDIS_HOME/cluster/6378/redis.conf
$REDIS_HOME/bin/redis-server $REDIS_HOME/cluster/6379/redis.conf

:wq 保存

3. 克隆该虚拟机

三 启动集群

1. 创建启动集群脚本

可以在任意一台虚拟机上创建该脚本,本文在 139 上创建

1
2
3
4
vim /usr/local/redis/create-cluster.sh

#!/bin/sh
bin/redis-cli --cluster create 192.168.18.139:6378 192.168.18.139:6379 192.168.18.140:6378 192.168.18.140:6379 192.168.18.141:6378 192.168.18.141:6379 --cluster-replicas 1

--cluster: redis 5 提供的参数
--cluster-replicas 1: 一主一从配置,六个节点就是 三主三从

2. 启动所有的 redis 节点

需要在三个虚拟机上都执行该命令

1
./start-redis-cluster.sh

2.1 查看是否启动成功

1
ps -ef | grep redis
Redis Status
Redis Status

3. 创建集群

只需要在一台虚拟机上执行该命令即可

1
./create-cluster.sh

如出现错误: [ERR] Node 192.168.18.139:637x is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0. 删除 cluster/637x 下aof、rdb、nodes-637x.conf本地备份文件, 然后再次执行脚本

出现交互 直接输入 yes 接受即可

Accept Redis

[OK] All 16384 slots covered 说明集群创建成功

Success
Success

待续…