一.Redis Cluster集群
Redis Cluster是社区版推出的Redis分布式解决方案,主要解决Redis分布式方面的需求,比如遇到单机内存,并发和流量等瓶颈的时候,Redis cluster能起到比较好负载均衡目的。
为什么使用Redis Cluster呢?
为了在大流量访问下提供稳定的业务,集群化是存储的必然形态,未来的发展趋势肯定是云计算的大数据紧密集合,只有分布式架构才能满足需求。
集群描述:
- Twiter开发的twenmproxy
- 豌豆荚开发的codis
- redis官方推荐的redis-cluster
redis集群搭建的方式有很多种,但是从redis3.0版本之后redis-cluster的集群,至少需要3个Master+3个Slave才能建立集群。 Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点和其他所有节点连接
Redis Cluster集群特点
- 所有的节点彼此互联,内部使用二进制协议优化传输速度和带宽。
- 节点的fail是通过集群种超过半数的节点检测失效时生效。
- redis Cluster把所有物理节点映射到0-16383 slot上,不一定是平均分配,cluster负责维护。
- 客户端与redis节点直连,不需要中间proxy层,客户端不需要连接集群的所有节点,连接集群中任何一个可用节点即可。
- Redis集群预分好16384个哈希槽,当需要在Redis集群中放置一个key-value时,redis先对key使用crc16算法算出一个结果,然后把结果对16384求余数,这样每一个key都会对应一个编号在0-16383之间的哈希槽,redis会根据节点数量大致均等的将哈希槽映射到的节点上。
Redis Cluster 容错
容错性,是指软件检测应用程序所运行的软件或硬件中发生错误中恢复的能力,通常可以从系统的可靠性、可用性、可测性等几个方面来衡量。
二、Redis Cluster集群搭建(本博文采用redis5.0)
官方文档:
https://redis.io/topics/cluster-tutorial
我的本机已经安装好了Redis5.0
使用redis-server -v 可以查看redis的版本
如果你是在本机的话,你可能需要安装Vmware安装一个Linux系统环境,如果是服务器的那就可以直接省略。
如果你对在Linux 下安装Redis5不熟悉的话,你可以参考我这之前写的这篇文章在Linux环境下面安装Redis5.
https://editor.csdn.net/md/?articleId=85619487
1.创建节点安装目录
cd /usr/local
mkdir -p redis-cluster
cd redis-cluster
mkdir data
进入节点目录
cd redis-cluster
创建6个节点目录
mkdir 7000 7001 7002 7003 7004 7005
把redis.conf复制一份到7000
cp -rp /usr/local/redis/etc/redis-6379.conf /usr/local/redis-cluster/7000
进入7000目录,修改其配置文件
cd /usr/local/redis-cluster/7000
mv redis-6379.conf redis.conf
vim redis.conf
修改后的Redis配置文件如下
daemonize yes #开启守护进程模式
port 7000 #指定端口
bind 0.0.0.0 #不限制ip连接redis-server
logfile "7000.log" #指定日志文件名称
databases 16 #指定redis数据库的个数
dir "/usr/local/redis-cluster/data/" #数据保存的位置
protected-mode no #关闭保护模式,其他客户端可以redis-server
appendonly yes #开启redis aof持久化存储
appendfsync everysec #指定持久化存储模式
appendfilename appendonly-7000.aof #持久化数据数据名称
cluster-enabled yes #开启redis 集群模式
cluster-config-file nodes-7000.conf #指定redis节点配置
cluster-node-timeout 5000 #配置redis超时时间
masterauth zq2020 #设置集群密码
requirepass zq2020 #设置redis密码
replica-server-stale-data yes #意味着必须完成 master 同步之后才能做接下来的操作。可以防止数据不一致的情况
保存配置文件,退出
然后将7000下面的redis.conf 配置文件复制到7001
cp -rp /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/7001
修改7001目录
然后修改7001下面的redis.conf,主要将上面的配置文件的端口号保存为对应目录的端口号
cd /usr/local/redis-cluster/7001/
vi redis.conf
:%s/7000/7001/g (按回车确认)
wq
保存退出
修改7002目录
然后将7000下面的redis.conf 配置文件复制到7002
cp -rp /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/7002
修改7002目录
然后修改7002下面的redis.conf,主要将上面的配置文件的端口号保存为对应目录的端口号
cd /usr/local/redis-cluster/7002/
vi redis.conf
:%s/7000/7002/g (按回车确认)
wq
保存退出
然后将7000下面的redis.conf 配置文件复制到7003
cp -rp /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/7003
修改7003目录
然后修改7003下面的redis.conf,主要将上面的配置文件的端口号保存为对应目录的端口号
cd /usr/local/redis-cluster/7003/
vi redis.conf
:%s/7000/7003/g (按回车确认)
wq
保存退出
然后将7000下面的redis.conf 配置文件复制到7004
cp -rp /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/7004
修改7004目录
然后修改7001下面的redis.conf,主要将上面的配置文件的端口号保存为对应目录的端口号
cd /usr/local/redis-cluster/7004/
vi redis.conf
:%s/7000/7004/g (按回车确认)
wq
保存退出
然后将7000下面的redis.conf 配置文件复制到7005
cp -rp /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/7005
修改7005目录
然后修改7001下面的redis.conf,主要将上面的配置文件的端口号保存为对应目录的端口号
cd /usr/local/redis-cluster/7005/
vi redis.conf
:%s/7000/7005/g (按回车确认)
wq
保存退出
将安装好的redisbin目录复制到redis-cluster目录下面
cp -rp /usr/local/redis/bin /usr/local/redis-cluster/
分别启动6台redis-server
cd /usr/local/redis-cluster/bin
./redis-server /usr/local/redis-cluster/7000/redis.conf
./redis-server /usr/local/redis-cluster/7001/redis.conf
./redis-server /usr/local/redis-cluster/7002/redis.conf
./redis-server /usr/local/redis-cluster/7003/redis.conf
./redis-server /usr/local/redis-cluster/7004/redis.conf
./redis-server /usr/local/redis-cluster/7005/redis.conf
我们来查看一哈6台redis服务器服务是否已经启动
ps -ef | grep redis
在Redis5中直接使用如下命令创建Redis-cluster的集群
cd /usr/local/redis-cluster/bin
创建集群 -a指令指定创建redis集群的密码:
./redis-cli --cluster create -a zq2020 192.168.80.129:7000 192.168.80.129:7001 \
192.168.80.129:7002 192.168.80.129:7003 192.168.80.129:7004 192.168.80.129:7005 \
--cluster-replicas 1
直接输入 yes
这样表示redis-cluster集群创建成功
集群测试
cd /usr/local/usr/redis-cluster/bin
redis-cli -c -p 7000 -a zq2020
cluster nodes (查看集群节点)
info replication (查看当前节点的信息)
集群测试
如果集群中的ip配置错了,可以把/usr/local/redis-cluster/data
目录下面的文件删除掉重新配置加入集群就可以了
Redis集群关闭脚本
vim shutdown.sh
./usr/local/redis-cluster/bin/redis-cli -c -h 192.168.80.129 -p -a zq2020 7000 shutdown
./usr/local/redis-cluster/bin/redis-cli -c -h 192.168.80.129 -p -a zq2020 7001 shutdown
./usr/local/redis-cluster/bin/redis-cli -c -h 192.168.80.129 -p -a zq2020 7002 shutdown
./usr/local/redis-cluster/bin/redis-cli -c -h 192.168.80.129 -p -a zq2020 7003 shutdown
./usr/local/redis-cluster/bin/redis-cli -c -h 192.168.80.129 -p -a zq2020 7004 shutdown
./usr/local/redis-cluster/bin/redis-cli -c -h 192.168.80.129 -p -a zq2020 7005 shutdown
chmod 777 shutdown.sh
Redis集群启动脚本:
vim start.sh
./redis-server /usr/local/redis-cluster/7000/redis.conf
./redis-server /usr/local/redis-cluster/7001/redis.conf
./redis-server /usr/local/redis-cluster/7002/redis.conf
./redis-server /usr/local/redis-cluster/7003/redis.conf
./redis-server /usr/local/redis-cluster/7004/redis.conf
./redis-server /usr/local/redis-cluster/7005/redis.conf
chmod 777 start.sh