目的:用两台CentOS7虚拟机模拟6个节点,一台机器3个节点,创建出3 master、3 salve 环境。

版本:redis-6.2.6

一、安装

1.安装C编译器:yum -y install gcc

2.官网下载Redis后解压:tar -zxvf redis-6.2.6.tar.gz -C /mysoftware

3.编译

cd /mysoftware/redis-6.2.6
make && make install

 默认安装目录:/usr/local/bin

redis-benchmark:性能测试工具

redis-check-aof:修复有问题的AOF文件

redis-check-dump:修复有问题的dmp.rdb文件

redis-sentinel:Redis集群使用

redis-server:Redis服务器启动命令

redis-cli:客户端

二.创建Redis节点

①首先在 192.168.10.1机器上 /mysoftware/redis-6.2.6 目录下创建 redis_cluster 目录

mkdir redis_cluster

②在 redis_cluster 目录下,创建名为7000、7001、7002的目录,并将 redis.conf 拷贝到这三个目录中

mkdir 7000 7001 7002
cp redis.conf redis_cluster/7000
cp redis.conf redis_cluster/7001
cp redis.conf redis_cluster/7002

③分别修改这三个配置文件,修改如下内容

port 7000    //端口7000,7002,7003        
bind 本机ip    //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes    //redis后台运行
pidfile /var/run/redis_7000.pid    //pidfile文件对应7000,7001,7002
cluster-enabled  yes    //开启集群  把注释#去掉
cluster-config-file nodes_7000.conf   //集群的配置  配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 15000    //请求超时  默认15秒,可自行设置
appendonly yes    //aof日志开启  有需要就开启,它会每次写操作都记录一条日志
requirepass 123456    //密码,按需配置

接着在另外一台192.168.10.2机器上,重复以上三步,只是把目录改为7003、7004、7005,对应的配置文件也按照这个规则修改即可。

三.启动各个节点

第一台机器上执行
redis-server redis_cluster/7000/redis.conf
redis-server redis_cluster/7001/redis.conf
redis-server redis_cluster/7002/redis.conf
 
另外一台机器上执行
redis-server redis_cluster/7003/redis.conf
redis-server redis_cluster/7004/redis.conf
redis-server redis_cluster/7005/redis.conf

检查启动情况

##一台机器
ps -ef | grep redis
root      61020      1  0 02:14 ?        00:00:01 redis-server 127.0.0.1:7000 [cluster]    
root      61024      1  0 02:14 ?        00:00:01 redis-server 127.0.0.1:7001 [cluster]    
root      61029      1  0 02:14 ?        00:00:01 redis-server 127.0.0.1:7002 [cluster]    
 
netstat -tnlp | grep redis
tcp        0      0 127.0.0.1:17000             0.0.0.0:*                   LISTEN      61020/redis-server 
tcp        0      0 127.0.0.1:17001             0.0.0.0:*                   LISTEN      61024/redis-server 
tcp        0      0 127.0.0.1:17002             0.0.0.0:*                   LISTEN      61029/redis-server 
tcp        0      0 127.0.0.1:7000              0.0.0.0:*                   LISTEN      61020/redis-server 
tcp        0      0 127.0.0.1:7001              0.0.0.0:*                   LISTEN      61024/redis-server 
tcp        0      0 127.0.0.1:7002              0.0.0.0:*                   LISTEN      61029/redis-server

 

四.创建集群

Redis6已封装ruby,低版本注意先安装ruby:yum -y install ruby ruby-devel rubygems rpm-build

cd /usr/local/bin
redis-cli --cluster create 192.168.10.1:7000 192.168.10.1:7001 192.168.10.1:7002 192.168.10.2:7003 192.168.10.2:7004 192.168.10.2:7005 --cluster-replicas 1 -a 123456

// 执行命令提示Can I set the above configuration?
// 输入yes继续执行完成创建

 其中,前三个 ip:port 为第一台机器的节点,剩下三个为第二台机器。

验证:

在第一台机器上连接集群的7001端口的节点,在另外一台连接7005节点,连接方式为:

redis-cli -h 192.168.10.1 -c -p 7001 -a 123456 

加参数 -c可连接到集群,因为上面 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略。

在7001节点执行命令  set hello world

然后在另外一台7005端口,查看 key 为 hello 的内容为world,说明集群运作正常。

五.创建集群问题处理:

1.显示错误: [ERR] Node xxx is not empty. Either the node already knows other no...

这是由于上次redis集群没有配置成功或异常关闭,生成了每个节点的配置文件和db的备份文件,所以才会产生这个错误。处理步骤如下:

①删除每个节点的备份文件、数据库文件和集群配置文件,比如说我有7000~7005    6个节点,那么每个节点中的appendonly.aof、dump.rdb、node_xxx.conf文件都要被删除.

②使用redis-cli -c -h -p登录每个redis节点,使用以下命令

flushdb
cluster reset

③重启所有的redis服务后,再执行redis集群连接命令。