文章目录
前言
问题1:搭建redis集群,为什么master节点至少要3个,slave节点也是3个?
解答1:这是因为一个redis集群如果要对外提供可用的服务,那么集群中必须要有过半的master节点正常工作,基于这个特性,如果想搭建一个能够允许 n 个master节点挂掉的集群,那么就要搭建2n+1个master节点的集群,如:
- 2个master节点,挂掉1个,则1不过半,则集群down掉,无法使用,容错率为0
- 3个master节点,挂掉1个,2>1,还可以正常运行,容错率为1
- 4个master节点,挂掉1个,3>1,还可以正常运行,但是当挂掉2个时,2=2,不过半,容错率依然为1
在CentOS 7.3下搭建redis集群,在此将操作记录下来,亲测通过。
一、redis安装
1、资源准备
- 3台服务器:redis01、redis02、redis03
- redis安装包:redis-5.0.9.tar.gz
2、依赖库安装
在3台服务器分别执行以下命令:
# yum -y install gcc gcc-c++
# yum -y install ruby
# yum -y install ruby-devel
# yum -y install rubygems
3、安装redis
在3台服务器分别执行以下命令:
# tar -zxvf redis-5.0.9.tar.gz
# mv redis-5.0.9 /usr/local
# cd /usr/local/redis-5.0.9
# make
# cd src/
# make install
# cd /usr/local/redis-5.0.9
# mkdir bin
# mkdir etc
# mv redis.conf /usr/local/redis-5.0.9/etc
# cd src/
# mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-server /usr/local/redis-5.0.9/bin
二、redis集群搭建
1、集群规划
Redis集群最少需要6个节点,可以分布在一台或者多台主机上,如下:
节点1:100.100.56.3:7000 100.100.56.3:7001 100.100.56.3:7002
节点2:100.100.56.4:7003 100.100.56.4:7004 100.100.56.4:7005
节点3:100.100.56.5:7006 100.100.56.5:7007 100.100.56.5:7008
2、在redis01服务器上创建多节点
执行以下命令:
# cd /usr/local/redis-5.0.9
# mkdir -p redis_cluster/7000
# mkdir -p redis_cluster/7001
# mkdir -p redis_cluster/7002
# cp etc/redis.conf redis_cluster/7000
//编辑配置文件
# vim /usr/local/redis-5.0.9/redis_cluster/7000/redis.conf
//编辑内容如下:
port 7000 //端口7000,7001,7002
bind redis01服务器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 //redis访问密码
# cp /usr/local/redis-5.0.9/redis_cluster/7000/redis.conf /usr/local/redis-5.0.9/redis_cluster/7001
//编辑配置文件
# vim /usr/local/redis-5.0.9/redis_cluster/7001/redis.conf
//编辑内容如下:
port 7001 //端口7000,7001,7002
bind redis01服务器ip //默认ip为127.0.0.1,需要改为节点服务器ip,否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes //redis后台运行
pidfile /var/run/redis_7001.pid //pidfile文件对应7000,7001,7002
cluster-enabled yes //开启集群
cluster-config-file nodes_7001.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
requirepass 123456 //redis访问密码
# cp /usr/local/redis-5.0.9/redis_cluster/7000/redis.conf /usr/local/redis-5.0.9/redis_cluster/7002
//编辑配置文件
# vim /usr/local/redis-5.0.9/redis_cluster/7002/redis.conf
//编辑内容如下:
port 7002 //端口7000,7001,7002
bind redis01服务器ip //默认ip为127.0.0.1,需要改为节点服务器ip,否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes //redis后台运行
pidfile /var/run/redis_7002.pid //pidfile文件对应7000,7001,7002
cluster-enabled yes //开启集群
cluster-config-file nodes_7002.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
requirepass 123456 //redis访问密码
3、在redis02服务器上创建多节点
执行以下命令:
# cd /usr/local/redis-5.0.9
# mkdir -p redis_cluster/7003
# mkdir -p redis_cluster/7004
# mkdir -p redis_cluster/7005
# cp etc/redis.conf redis_cluster/7003
//编辑配置文件
# vim /usr/local/redis-5.0.9/redis_cluster/7003/redis.conf
//编辑内容如下:
port 7003 //端口7003,7004,7005
bind redis01服务器ip //默认ip为127.0.0.1,需要改为节点服务器ip,否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes //redis后台运行
pidfile /var/run/redis_7003.pid //pidfile文件对应7003,7004,7005
cluster-enabled yes //开启集群
cluster-config-file nodes_7003.conf //集群的配置 配置文件首次启动自动生成 7003,7004,7005
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
# cp /usr/local/redis-5.0.9/redis_cluster/7003/redis.conf /usr/local/redis-5.0.9/redis_cluster/7004
//编辑配置文件
# vim /usr/local/redis-5.0.9/redis_cluster/7004/redis.conf
//编辑内容如下:
port 7004 //端口7003,7004,7005
bind redis01服务器ip //默认ip为127.0.0.1,需要改为节点服务器ip,否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes //redis后台运行
pidfile /var/run/redis_7004.pid //pidfile文件对应7003,7004,7005
cluster-enabled yes //开启集群
cluster-config-file nodes_7004.conf //集群的配置 配置文件首次启动自动生成 7003,7004,7005
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
# cp /usr/local/redis-5.0.9/redis_cluster/7003/redis.conf /usr/local/redis-5.0.9/redis_cluster/7005
//编辑配置文件
# vim /usr/local/redis-5.0.9/redis_cluster/7005/redis.conf
//编辑内容如下:
port 7005 //端口7003,7004,7005
bind redis01服务器ip //默认ip为127.0.0.1,需要改为节点服务器ip,否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes //redis后台运行
pidfile /var/run/redis_7005.pid //pidfile文件对应7003,7004,7005
cluster-enabled yes //开启集群
cluster-config-file nodes_7005.conf //集群的配置 配置文件首次启动自动生成 7003,7004,7005
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
4、在redis03服务器上创建多节点
执行以下命令:
# cd /usr/local/redis-5.0.9
# mkdir -p redis_cluster/7006
# mkdir -p redis_cluster/7007
# mkdir -p redis_cluster/7008
# cp etc/redis.conf redis_cluster/7006
//编辑配置文件
# vim /usr/local/redis-5.0.9/redis_cluster/7006/redis.conf
//编辑内容如下:
port 7006 //端口7006,7007,7008
bind redis01服务器ip //默认ip为127.0.0.1,需要改为节点服务器ip,否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes //redis后台运行
pidfile /var/run/redis_7006.pid //pidfile文件对应7006,7007,7008
cluster-enabled yes //开启集群
cluster-config-file nodes_7006.conf //集群的配置 配置文件首次启动自动生成 7006,7007,7008
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
# cp /usr/local/redis-5.0.9/redis_cluster/7006/redis.conf /usr/local/redis-5.0.9/redis_cluster/7007
//编辑配置文件
# vim /usr/local/redis-5.0.9/redis_cluster/7007/redis.conf
//编辑内容如下:
port 7007 //端口7006,7007,7008
bind redis01服务器ip //默认ip为127.0.0.1,需要改为节点服务器ip,否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes //redis后台运行
pidfile /var/run/redis_7007.pid //pidfile文件对应7006,7007,7008
cluster-enabled yes //开启集群
cluster-config-file nodes_7007.conf //集群的配置 配置文件首次启动自动生成 7006,7007,7008
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
# cp /usr/local/redis-5.0.9/redis_cluster/7006/redis.conf /usr/local/redis-5.0.9/redis_cluster/7008
//编辑配置文件
# vim /usr/local/redis-5.0.9/redis_cluster/7008/redis.conf
//编辑内容如下:
port 7008 //端口7003,7004,7005
bind redis01服务器ip //默认ip为127.0.0.1,需要改为节点服务器ip,否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes //redis后台运行
pidfile /var/run/redis_7008.pid //pidfile文件对应7003,7004,7005
cluster-enabled yes //开启集群
cluster-config-file nodes_7008.conf //集群的配置 配置文件首次启动自动生成 7003,7004,7005
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
5、在3台服务器分别创建启动脚本
- redis01服务器启动脚本,执行以下命令:
# cd /usr/local/redis-5.0.9
# vim start_redis.sh
//编辑内容如下:
/usr/local/redis-5.0.9/bin/redis-server /usr/local/redis-5.0.9/redis_cluster/7000/redis.conf
/usr/local/redis-5.0.9/bin/redis-server /usr/local/redis-5.0.9/redis_cluster/7001/redis.conf
/usr/local/redis-5.0.9/bin/redis-server /usr/local/redis-5.0.9/redis_cluster/7002/redis.conf
# chmod 777 start_redis.sh
- redis02服务器启动脚本,执行以下命令:
# cd /usr/local/redis-5.0.9
# vim start_redis.sh
//编辑内容如下:
/usr/local/redis-5.0.9/bin/redis-server /usr/local/redis-5.0.9/redis_cluster/7003/redis.conf
/usr/local/redis-5.0.9/bin/redis-server /usr/local/redis-5.0.9/redis_cluster/7004/redis.conf
/usr/local/redis-5.0.9/bin/redis-server /usr/local/redis-5.0.9/redis_cluster/7005/redis.conf
# chmod 777 start_redis.sh
- redis03服务器启动脚本,执行以下命令:
# cd /usr/local/redis-5.0.9
# vim start_redis.sh
//编辑内容如下:
/usr/local/redis-5.0.9/bin/redis-server /usr/local/redis-5.0.9/redis_cluster/7006/redis.conf
/usr/local/redis-5.0.9/bin/redis-server /usr/local/redis-5.0.9/redis_cluster/7007/redis.conf
/usr/local/redis-5.0.9/bin/redis-server /usr/local/redis-5.0.9/redis_cluster/7008/redis.conf
# chmod 777 start_redis.sh
5、启动redis服务
- 在3台服务器分别执行以下命令:
# cd /usr/local/redis-5.0.9
# sh start_redis.sh
6、查看redis服务是否正常开启
- 在3台服务器分别执行以下命令:
# ps -ef|grep redis
7、创建redis集群
- 在redis01服务器,执行以下命令:
# cd /usr/local/redis-5.0.9
//编辑创建redis集群的脚本文件
# vim start_create_redis_cluster.sh
//编辑内容如下:
//如果redis访问设置了密码,则创建集群时就需要加-a参数
//--cluster-replicas 创建集群时指定slave为1个
/usr/local/redis-5.0.9/bin/redis-cli --cluster create 100.100.56.3:7000 100.100.56.3:7001 100.100.56.3:7002 100.100.56.4:7003 100.100.56.4:7004 100.100.56.4:7005 100.100.56.6:7006 100.100.56.6:7007 100.100.56.6:7008 --cluster-replicas 1 -a 123456
# chmod 777 start_create_redis_cluster.sh
//创建redis集群
# sh start_create_redis_cluster.sh
//出现如下信息。则说明创建redis集群成功
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered
三、redis集群验证
在redis01服务器上连接集群的7005端口节点,在redis03服务器连接集群的7001端口节点,连接方式为 redis-cli -h 服务器IP -c -p redis端口 -a redis访问密码
参数说明:
- -c 表示以集群方式连接redis
- -h 指定ip地址
- -p 指定端口号
- -a 指定redis访问密码
1、在redis01服务器上连接集群的7005端口节点
在redis01服务器,执行以下命令:
# cd /usr/local/redis-5.0.9/bin
# redis-cli -h 100.100.56.4 -c -p 7005 -a 123456
100.100.56.4:7005> set hello world
-> Redirected to slot [866] located at 100.100.56.3:7000
OK
100.100.56.3:7000>
2、在redis03服务器连接集群的7001端口节点
在redis03服务器,执行以下命令:
# cd /usr/local/redis-5.0.9/bin
# redis-cli -h 100.100.56.3 -c -p 7001 -a 123456
100.100.56.3:7001> get hello
-> Redirected to slot [866] located at 100.100.56.3:7000
"world"
100.100.56.3:7000>