先准备环境centos7
ip:192.168.81.132 192.168.81.133 192.168.81.137
设置三台机器的/etc/hosts,每台都要添加如下三行,保存退出
[root@localhost ~]# vim /etc/hosts
192.168.81.132 redis-132
192.168.81.133 redis-133
192.168.81.137 redis-137
安装依赖(3台都需要安装)
yum -y install gcc gcc-c++ wget
上传解压redis包到当前目录下
[root@localhost ~]# rz
[root@localhost ~]# ll
总用量 1936
-rw-------. 1 root root 1402 1月 20 09:20 anaconda-ks.cfg
-rw-r--r--. 1 root root 1975750 4月 1 10:33 redis-5.0.5.tar.gz
[root@localhost ~]# tar zxf redis-5.0.5.tar.gz
进入刚解压出来的redis目录,开始编译安装
[root@localhost ~]# cd redis-5.0.5
[root@localhost redis-5.0.5]# make && make PREFIX=/usr/local/redis install
make[1]: 离开目录“/root/redis-5.0.5/src”
make[1]: 进入目录“/root/redis-5.0.5/src”
Hint: It's a good idea to run 'make test' ;)
INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
make[1]: 离开目录“/root/redis-5.0.5/src”
查看是否编译安装成功,执行 如下命令,如果输出0 表示redis安装成功了
[root@localhost redis-5.0.5]# echo $?
0
配置环境变量,在/etc/profile文件最后添加如下内容
[root@localhost redis-5.0.5]# vim /etc/profile
###### redis env ######
export REDIS_HOME=/usr/local/redis
export PATH=$PATH:$REDIS_HOME/bin
[root@localhost redis-5.0.5]# source /etc/profile
分别创建两个7001和7002的配置文件目录conf,日志目录logs,数据存储目录data,如下命令
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7001/conf/
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7001/logs/
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7001/data/
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7002/conf/
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7002/logs/
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7002/data/
创建7001的配置文件,并添加如下内容
[root@localhost redis-5.0.5]# vim /usr/local/redis/redis_cluster/7001/conf/redis.conf
# 绑定服务器域名或IP地址
bind redis-132
# 设置端口,区分集群中Redis的实例
port 7001
# 后台运行
daemonize yes
# pid进程文件名,以端口号命名
pidfile /var/run/redis-7001.pid
# 日志文件名称,以端口号为目录来区分
logfile /usr/local/redis/redis_cluster/7001/logs/redis.log
# 数据文件存放地址,以端口号为目录名来区分
dir /usr/local/redis/redis_cluster/7001/data
# 启用集群
cluster-enabled yes
# 配置每个节点的配置文件,同样以端口号为名称
cluster-config-file nodes_7001.conf
# 配置集群节点的超时时间
cluster-node-timeout 15000
# 启动AOF增量持久化策略
appendonly yes
# 发生改变,则记录日志
appendfsync always
创建7002的配置文件,并添加如下内容
[root@localhost redis-5.0.5]# vim /usr/local/redis/redis_cluster/7002/conf/redis.conf
# 绑定服务器域名或IP地址
bind redis-132
# 设置端口,区分集群中Redis的实例
port 7002
# 后台运行
daemonize yes
# pid进程文件名,以端口号命名
pidfile /var/run/redis-7002.pid
# 日志文件名称,以端口号为目录来区分
logfile /usr/local/redis/redis_cluster/7002/logs/redis.log
# 数据文件存放地址,以端口号为目录名来区分
dir /usr/local/redis/redis_cluster/7002/data
# 启用集群
cluster-enabled yes
# 配置每个节点的配置文件,同样以端口号为名称
cluster-config-file nodes_7002.conf
# 配置集群节点的超时时间
cluster-node-timeout 15000
# 启动AOF增量持久化策略
appendonly yes
# 发生改变,则记录日志
appendfsync always
第二台机器上操作:
分别创建两个7001和7002的配置文件目录conf,日志目录logs,数据存储目录data,如下命令
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7001/conf/
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7001/logs/
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7001/data/
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7002/conf/
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7002/logs/
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7002/data/
创建7001的配置文件,并添加如下内容
[root@localhost redis-5.0.5]# vim /usr/local/redis/redis_cluster/7001/conf/redis.conf
# 绑定服务器域名或IP地址
bind redis-133
# 设置端口,区分集群中Redis的实例
port 7001
# 后台运行
daemonize yes
# pid进程文件名,以端口号命名
pidfile /var/run/redis-7001.pid
# 日志文件名称,以端口号为目录来区分
logfile /usr/local/redis/redis_cluster/7001/logs/redis.log
# 数据文件存放地址,以端口号为目录名来区分
dir /usr/local/redis/redis_cluster/7001/data
# 启用集群
cluster-enabled yes
# 配置每个节点的配置文件,同样以端口号为名称
cluster-config-file nodes_7001.conf
# 配置集群节点的超时时间
cluster-node-timeout 15000
# 启动AOF增量持久化策略
appendonly yes
# 发生改变,则记录日志
appendfsync always
创建7002的配置文件,并添加如下内容
[root@localhost redis-5.0.5]# vim /usr/local/redis/redis_cluster/7002/conf/redis.conf
# 绑定服务器域名或IP地址
bind redis-133
# 设置端口,区分集群中Redis的实例
port 7002
# 后台运行
daemonize yes
# pid进程文件名,以端口号命名
pidfile /var/run/redis-7002.pid
# 日志文件名称,以端口号为目录来区分
logfile /usr/local/redis/redis_cluster/7002/logs/redis.log
# 数据文件存放地址,以端口号为目录名来区分
dir /usr/local/redis/redis_cluster/7002/data
# 启用集群
cluster-enabled yes
# 配置每个节点的配置文件,同样以端口号为名称
cluster-config-file nodes_7002.conf
# 配置集群节点的超时时间
cluster-node-timeout 15000
# 启动AOF增量持久化策略
appendonly yes
# 发生改变,则记录日志
appendfsync always
第三台机器上操作
分别创建两个7001和7002的配置文件目录conf,日志目录logs,数据存储目录data,如下命令
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7001/conf/
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7001/logs/
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7001/data/
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7002/conf/
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7002/logs/
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/redis_cluster/7002/data/
创建7001的配置文件,并添加如下内容
[root@localhost redis-5.0.5]# vim /usr/local/redis/redis_cluster/7001/conf/redis.conf
# 绑定服务器域名或IP地址
bind redis-137
# 设置端口,区分集群中Redis的实例
port 7001
# 后台运行
daemonize yes
# pid进程文件名,以端口号命名
pidfile /var/run/redis-7001.pid
# 日志文件名称,以端口号为目录来区分
logfile /usr/local/redis/redis_cluster/7001/logs/redis.log
# 数据文件存放地址,以端口号为目录名来区分
dir /usr/local/redis/redis_cluster/7001/data
# 启用集群
cluster-enabled yes
# 配置每个节点的配置文件,同样以端口号为名称
cluster-config-file nodes_7001.conf
# 配置集群节点的超时时间
cluster-node-timeout 15000
# 启动AOF增量持久化策略
appendonly yes
# 发生改变,则记录日志
appendfsync always
创建7002的配置文件,并添加如下内容
[root@localhost redis-5.0.5]# vim /usr/local/redis/redis_cluster/7002/conf/redis.conf
# 绑定服务器域名或IP地址
bind redis-137
# 设置端口,区分集群中Redis的实例
port 7002
# 后台运行
daemonize yes
# pid进程文件名,以端口号命名
pidfile /var/run/redis-7002.pid
# 日志文件名称,以端口号为目录来区分
logfile /usr/local/redis/redis_cluster/7002/logs/redis.log
# 数据文件存放地址,以端口号为目录名来区分
dir /usr/local/redis/redis_cluster/7002/data
# 启用集群
cluster-enabled yes
# 配置每个节点的配置文件,同样以端口号为名称
cluster-config-file nodes_7002.conf
# 配置集群节点的超时时间
cluster-node-timeout 15000
# 启动AOF增量持久化策略
appendonly yes
# 发生改变,则记录日志
appendfsync always
第一台上操作
在保证上面132,133,137都配置完成后,开始启动132,133,137各节点
[root@localhost redis-5.0.5]# redis-server /usr/local/redis/redis_cluster/7001/conf/redis.conf
[root@localhost redis-5.0.5]# redis-server /usr/local/redis/redis_cluster/7002/conf/redis.conf
[root@localhost redis-5.0.5]# ps -ef | grep redis
root 16461 1 0 14:28 ? 00:00:00 redis-server redis-132:7001 [cluster]
root 16466 1 0 14:28 ? 00:00:00 redis-server redis-132:7002 [cluster]
root 16474 2391 0 14:32 pts/1 00:00:00 grep --color=auto redis
第二台上操作
[root@localhost redis-5.0.5]# redis-server /usr/local/redis/redis_cluster/7001/conf/redis.conf
[root@localhost redis-5.0.5]# redis-server /usr/local/redis/redis_cluster/7002/conf/redis.conf
[root@localhost redis-5.0.5]# ps -ef | grep redis
root 25632 1 0 14:30 ? 00:00:00 redis-server redis-133:7001 [cluster]
root 25637 1 0 14:30 ? 00:00:00 redis-server redis-133:7002 [cluster]
root 25643 11559 0 14:33 pts/1 00:00:00 grep --color=auto redis
第三台上操作
[root@localhost redis-5.0.5]# redis-server /usr/local/redis/redis_cluster/7001/conf/redis.conf
[root@localhost redis-5.0.5]# redis-server /usr/local/redis/redis_cluster/7002/conf/redis.conf
[root@localhost redis-5.0.5]# ps -ef | grep redis
root 15607 1 0 14:31 ? 00:00:00 redis-server redis-137:7001 [cluster]
root 15612 1 0 14:31 ? 00:00:00 redis-server redis-137:7002 [cluster]
root 15618 1535 0 14:33 pts/0 00:00:00 grep --color=auto redis
在任意一台机器上使用 reids-cli 创建Redis集群 (注:这里必须使用IP,如果使用像redis-166这样的域名,则会报错)
[root@localhost redis-5.0.5]# redis-cli --cluster create 192.168.81.132:7001 192.168.81.133:7001 192.168.81.137:7001 192.168.81.132:7002 192.168.81.133:7002 192.168.81.137:7002 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.81.133:7002 to 192.168.81.132:7001
Adding replica 192.168.81.137:7002 to 192.168.81.133:7001
Adding replica 192.168.81.132:7002 to 192.168.81.137:7001
M: 639b7c706cc1e4dca8f93fe56469b4d55aac0fe4 192.168.81.132:7001
slots:[0-5460] (5461 slots) master
M: 54f08d1ee804ac541fc6a320296f4331a2228ad7 192.168.81.133:7001
slots:[5461-10922] (5462 slots) master
M: 125bbdc79c337779947839a3b43bd33f0def97d7 192.168.81.137:7001
slots:[10923-16383] (5461 slots) master
S: e058d576025fbd4f826e41b071c412b4d5bd6e53 192.168.81.132:7002
replicates 125bbdc79c337779947839a3b43bd33f0def97d7
S: 4ff9e3a9b8a4249b8d9ccb8a98d0405bda746a93 192.168.81.133:7002
replicates 639b7c706cc1e4dca8f93fe56469b4d55aac0fe4
S: 9c46244c3f781da15157dec922ed221356ee90b5 192.168.81.137:7002
replicates 54f08d1ee804ac541fc6a320296f4331a2228ad7
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.....
>>> Performing Cluster Check (using node 192.168.81.132:7001)
M: 639b7c706cc1e4dca8f93fe56469b4d55aac0fe4 192.168.81.132:7001
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 4ff9e3a9b8a4249b8d9ccb8a98d0405bda746a93 192.168.81.133:7002
slots: (0 slots) slave
replicates 639b7c706cc1e4dca8f93fe56469b4d55aac0fe4
S: 9c46244c3f781da15157dec922ed221356ee90b5 192.168.81.137:7002
slots: (0 slots) slave
replicates 54f08d1ee804ac541fc6a320296f4331a2228ad7
M: 54f08d1ee804ac541fc6a320296f4331a2228ad7 192.168.81.133:7001
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
M: 125bbdc79c337779947839a3b43bd33f0def97d7 192.168.81.137:7001
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: e058d576025fbd4f826e41b071c412b4d5bd6e53 192.168.81.132:7002
slots: (0 slots) slave
replicates 125bbdc79c337779947839a3b43bd33f0def97d7
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
查看我们刚创建集群的状态,如下命令:(在3台集群中的任意一台机器查看任意节点都一样,我在第一台机器上查看,会带出所有的节点信息)
[root@localhost redis-5.0.5]# redis-cli --cluster check 192.168.81.133:7001
192.168.81.133:7001 (54f08d1e...) -> 0 keys | 5462 slots | 1 slaves.
192.168.81.137:7001 (125bbdc7...) -> 0 keys | 5461 slots | 1 slaves.
192.168.81.132:7001 (639b7c70...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.81.133:7001)
M: 54f08d1ee804ac541fc6a320296f4331a2228ad7 192.168.81.133:7001
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 9c46244c3f781da15157dec922ed221356ee90b5 192.168.81.137:7002
slots: (0 slots) slave
replicates 54f08d1ee804ac541fc6a320296f4331a2228ad7
S: e058d576025fbd4f826e41b071c412b4d5bd6e53 192.168.81.132:7002
slots: (0 slots) slave
replicates 125bbdc79c337779947839a3b43bd33f0def97d7
M: 125bbdc79c337779947839a3b43bd33f0def97d7 192.168.81.137:7001
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 4ff9e3a9b8a4249b8d9ccb8a98d0405bda746a93 192.168.81.133:7002
slots: (0 slots) slave
replicates 639b7c706cc1e4dca8f93fe56469b4d55aac0fe4
M: 639b7c706cc1e4dca8f93fe56469b4d55aac0fe4 192.168.81.132:7001
slots:[0-5460] (5461 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
测试集群是否正常:
在集群中的任意一台测试都可以,如我们可以在133上连接137上的7002节点并添加一个数据
[root@localhost redis-5.0.5]# redis-cli -c -h 192.168.81.133 -p 7002
192.168.81.133:7002> set key001 helloredis
-> Redirected to slot [12657] located at 192.168.81.137:7001
OK
192.168.81.137:7001> get key001
"helloredis"
[root@localhost redis-5.0.5]# redis-cli -c -h 192.168.81.132 -p 7001
192.168.81.132:7001> get key001
-> Redirected to slot [12657] located at 192.168.81.137:7001
"helloredis"
[root@localhost redis-5.0.5]# redis-cli -c -h 192.168.81.133 -p 7001
192.168.81.133:7001> get key001
-> Redirected to slot [12657] located at 192.168.81.137:7001
"helloredis"
redis三主三从集群搭建完毕!!!!!!!