集群介绍
Redis Cluster 是 redis的分布式解决方案,在3.0版本正式推出。当遇到单机、内存、并发、流量等瓶颈时,可以采用Cluster架构方案达到负载均衡目的。
Redis Cluster之前的分布式方案有两种:
1)客户端分区方案,优点分区逻辑可控,缺点是需要自己处理数据路由,高可用和故障转移等。
2)代理方案,优点是简化客户端分布式逻辑和升级维护便利,缺点加重架构部署和性能消耗。
官方提供的 Redis Cluster集群方案,很好的解决了集群方面的问题
数据分布
分布式数据库首先要解决把整个数据库集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整体数据的一个子集,需要关注的是数据分片规则,Redis Cluster采用哈希分片规则。
集群拓扑
3台虚拟机6个实例,每台虚拟机2个实例
思路
1)部署一台服务器上的2个集群节点
2)发送完成后修改其他主机的IP地址
目录规划
#3台都执行
#redis安装目录
/opt/redis_cluster/redis_{PORT}/{conf,logs,pid}
#redis安装目录
/opt/redis_cluster/redis_{PORT}/{conf,logs,pid}
#redis数据文件
/data/redis_cluster/redis_{PORT}/redis_{PORT}.rdb
#redis运维脚本
/root/scripts/redis_shell.sh
3台主机编辑/etc/hosts文件,添加如下内容,实现主机名相互访问
#3台都执行
192.168.200.79 redis01
192.168.200.80 redis02
192.168.200.81 redis03
创建目录
#3台都执行
mkdir -p /data/soft
mkdir -p /opt/redis_cluster/redis_{6380,6381}/{conf,logs,pid}
mkdir -p /data/redis_cluster/redis_{6380,6381}
手动搭建部署集群
部署过程
redis01
下载Redis 3.2.9并安装
cd /data/soft/
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar zxf redis-3.2.9.tar.gz -C /opt/redis_cluster/
ln -s /opt/redis_cluster/redis-3.2.9/ /opt/redis_cluster/redis
cd /opt/redis_cluster/redis
make && make install
使用自己的配置文件
cat >/opt/redis_cluster/redis_6380/conf/redis_6380.conf <<EOF
###以守护进程模式启动
daemonize yes
###绑定的主机地址
bind 192.168.200.79
###监听端口
port 6380
###pid文件和log文件的保存地址
pidfile /opt/redis_cluster/redis_6380/pid/redis_6380.pid
logfile /opt/redis_cluster/redis_6380/logs/redis_6380.log
###设置数据库的数量,默认数据库为0
databases 16
###指定本地持久化文件的文件名,默认是dump.rdb
dbfilename redis_6380.rdb
###本地数据库的目录
dir /data/redis_cluster/redis_6380/
###集群相关参数
cluster-enabled yes
cluster-config-file nodes_6380.conf
cluster-node-timeout 15000
EOF
cd /opt/redis_cluster/
cp redis_6380/conf/redis_6380.conf redis_6381/conf/redis_6381.conf
sed -i ‘s#6380#6381#g’ redis_6381/conf/redis_6381.conf
rsync -avz /opt/redis_cluster/redis_638* redis02:/opt/redis_cluster/
rsync -avz /opt/redis_cluster/redis_638* redis03:/opt/redis_cluster/
redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf
redis-server /opt/redis_cluster/redis_6381/conf/redis_6381.conf
redis02
find /opt/redis_cluster/redis_638* -type f -name “*.conf”|xargs sed -i “/bind/s#79#80#g”
mkdir -p /data/redis_cluster/redis_{6380,6381}
redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf
redis-server /opt/redis_cluster/redis_6381/conf/redis_6381.conf
redis03
find /opt/redis_cluster/redis_638* -type f -name “*.conf”|xargs sed -i “/bind/s#79#81#g”
mkdir -p /data/redis_cluster/redis_{6380,6381}
redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf
redis-server /opt/redis_cluster/redis_6381/conf/redis_6381.conf
手动配置节点发现
当把所有节点都启动后查看进程会有cluster的字样
登录后执行CLUSTER NODES命令会发现只有每个节点自己的ID,目前集群内的节点还没有互相发现,所以搭建redis集群我们第一步要做的就是让集群内的节点互相发现.
在执行节点发现命令之前我们先查看一下集群的数据目录会发现有生成集群的配置文件
查看后发现只有自己的节点内容,等节点全部发现后会把所发现的节点ID写入这个文件。
集群模式的Redis除了原有的配置文件之外又加了一份集群配置文件.当集群内节点信息发生变化,如添加节点,节点下线,故障转移等.节点会自动保存集群状态到配置文件.需要注意的是,Redis自动维护集群配置文件,不需要手动修改,防止节点重启时产生错乱.
节点发现使用命令: CLUSTER MEET {IP} {PORT}
提示:在集群内任意一台机器执行此命令就可以,添加运维脚本redis.shell.sh
节点都发现完毕后我们再次查看集群配置文件,可以看到,发现到的节点的ID也被写入到了集群的配置文件里
运维脚本:
[root@redis01 ~]# cat redis_shell.sh
#!/bin/bash
USAG(){
echo "sh $0 {start|stop|restart|login|ps|tail