Redis 集群安装

环境准备

Redis集群安装需要至少三台机器,由于每台机器至少需要一个从节点,所以至少需要6台机器,为了保证其中某一台机器宕机时,不会造成数据的丢失。我这里机器个数有限,我只使用3台机器,每台机器部署一个主节点和一个从节点。

CentOS7 三台(xiaoer:192.168.21.100  yangqi1:192.168.21.101  yangqi2:192.168.21.102)
redis-3.0.0.tar.gz 安装包

为了使集群和其他redis服务区分开来,创建redis-cluster目录用来存放redis集群的文件:

[yangqi@xiaoer apps]$ pwd
/opt/apps
[yangqi@xiaoer apps]$ mkdir redis-cluster
[yangqi@xiaoer apps]$ cd redis-cluster/
[yangqi@xiaoer reids-cluster]$ mkdir 7000 7001 7002 7003 7004 7005
解压

解压redis-3.0.0.tar.gz源码包,并进入该目录执行以下命令:

[yangqi@xiaoer apps]$ pwd
/opt/apps
[yangqi@xiaoer apps]$ tar -zvxf redis-3.0.0.tar.gz -C ./
[yangqi@xiaoer apps]$ cd redis-3.0.0
[yangqi@xiaoer redis-3.0.0]$ make && make install prefix=/opt/apps/redis-cluster
安装

redis单机版已经安装成功,在redis-cluster目录下有一个bin目录,里面存放的就是刚才编译安装好的redis。复制redis-cluster/bin目录中的redis.conf文件到super-cluster/7000super-cluster/7001super-cluster/7002super-cluster/7003super-cluster/7004super-cluster/7005目录中,并修改如下内容:

# 端口号
port port
# 后台启动
daemonize yes
# 开启集群
cluster-enabled yes
#集群节点配置文件
cluster-config-file nodes-port.conf
# 集群连接超时时间
cluster-node-timeout 5000
# 进程pid的文件位置
pidfile /var/run/redis-port.pid
# 开启aof
appendonly yes
# aof文件路径
appendfilename "appendonly-7005.aof"
# rdb文件路径
dbfilename dump-port.rdb

例如在7000目录中redis.conf的配置如下:

# 端口号
port 7000
# 后台启动
daemonize yes
# 开启集群
cluster-enabled yes
#集群节点配置文件
cluster-config-file nodes-7000.conf
# 集群连接超时时间
cluster-node-timeout 5000
# 进程pid的文件位置
pidfile /var/run/redis-7000.pid
# 开启aof
appendonly yes
# aof文件路径
appendfilename "appendonly-7005.aof"
# rdb文件路径
dbfilename dump-7000.rdb

70027003分发到yangqi1,将70047005分发到yangqi2

# 注意:发送过去之后要删除掉目录下产生的数据文件(data)
[yangqi@xiaoer apps]$ pwd
/opt/apps
[yangqi@xiaoer apps]$ scp -r ./redis-cluster/7002/ yangqi1:/opt/apps/redis-cluster/
[yangqi@xiaoer apps]$ scp -r ./redis-cluster/7003/ yangqi1:/opt/apps/redis-cluster/
[yangqi@xiaoer apps]$ scp -r ./redis-cluster/7004/ yangqi2:/opt/apps/redis-cluster/
[yangqi@xiaoer apps]$ scp -r ./redis-cluster/7005/ yangqi2:/opt/apps/redis-cluster/
# 删除 xiaoer 主机上的 7002、7003、7004、7005 文件
[yangqi@xiaoer apps]$ rm -rf ./redis-cluster/7002/
[yangqi@xiaoer apps]$ rm -rf ./redis-cluster/7003/
[yangqi@xiaoer apps]$ rm -rf ./redis-cluster/7004/
[yangqi@xiaoer apps]$ rm -rf ./redis-cluster/7005/

启动每个节点的redis-server服务:

# xiaoer
[yangqi@xiaoer redis-cluster]$ pwd
/opt/apps/redis-cluster
[yangqi@xiaoer redis-cluster]$ mv ./* ./
[yangqi@xiaoer redis-cluster]$ ./redis-server ./7000/redis.conf
[yangqi@xiaoer redis-cluster]$ ./redis-server ./7001/redis.conf

# yangqi1
[yangqi@yangqi1 redis-cluster]$ pwd
/opt/apps/redis-cluster
[yangqi@yangqi1 redis-cluster]$ mv ./* ./
[yangqi@yangqi1 redis-cluster]$ ./redis-server ./7002/redis.conf
[yangqi@yangqi1 redis-cluster]$ ./redis-server ./7003/redis.conf

# yangqi2
[yangqi@yangqi2 redis-cluster]$ pwd
/opt/apps/redis-cluster
[yangqi@yangqi2 redis-cluster]$ mv ./* ./
[yangqi@yangqi2 redis-cluster]$ ./redis-server ./7004/redis.conf
[yangqi@yangqi2 redis-cluster]$ ./redis-server ./7005/redis.conf

此时每个节点的redis服务已经启动,但是每个服务都是单独的服务,并没有构成集群,构成集群我们使用官方提供的工具redis-trib,这个工具是用ruby写的,所以需要安装ruby环境

[yangqi@xiaoer redis-cluster]$ sudo yum install ruby rubygems -y

在使用工具redis-trib连接之前,需要先安装gem-redis,如果网络可以,可以在线安装,网络差的情况下,可以离线安装:

# 在线安装
[yangqi@xiaoer redis-cluster]$ gem install redis

# 离线安装:将下载好的 redis-3.0.0.gem 上传到 redis-cluster
[yangqi@xiaoer redis-cluster]$ gem install ./redis-3.0.0.gem

使用redis.trib工具进行连接:

[yangqi@xiaoer redis-cluster]$ ./redis-trib.rb create --replicas 1 192.168.21.100:7000 192.168.21.100:7001 192.168.21.101:7002 192.168.21.101:7003 192.168.21.102:7004 192.168.21.102:7005

此时会提示如下:

输入yes后,继续执行:

报错

redis集群安装过程中,可能会出现以下错误:

解决方法:

1.删除掉 redis-cluster 目录下的 nodes-port.conf、appendonly-7005.aof 和 dump-7000.rdb 文件
2.登录每一个端口的客户端,然后执行 flushall 和 cluster reset 命令
3.将 hostname 换成 ip 地址