Redis 分布式集群部署
一、环境
192.168.0.31
每台服务器1主1从,共3主3从
相关安装包存储路径:/usr/local/
二、部署
2.1 下载安装Redis
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xzf redis-5.0.5.tar.gz
cd redis-5.0.5
make
2.2 配置
选择一个目录在该目录(/root/redis-cluster)创建6个文件夹
命令:
mkdir 7001,mkdir 7002,mkdir 7003,mkdir 7004,mkdir 7005,mkdir 7006
然后把redis.conf这个文件拷贝到这6个目录中
命令:
cp /usr/local/redis-5.0.0/redis.conf /root/redis-cluster/7001/
2.3 修改配置文件
命令:
vim 7001/redis.conf
修改内容:
port 7001 #修改为自己对应的端口号
logfile "/root/redis-cluster/redis.log" #事先创建好目录
dir/root/redis-cluster/7001/ #事先创建好,数据库写入会在这个目录。rdb,aof文件也会在这个目录
cluster-enabled yes #是否开启集群.
cluster-config-file nodes_7001.conf #根据目录不同区分.#集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突
cluster-node-timeout 5000 #节点互连超时的阀值。集群节点超时毫秒数
appendonly yes #默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
protected-mode no #保护模式关闭
#bind 127.0.0.1 #注释掉绑定ip
pidfile /var/run/redis_7001.pid
2.4 启动
分别启动不同的节点
/usr/local/redis-5.0.0/src/redis-server /root/redis-cluster/7001/redis.conf
/usr/local/redis-5.0.0/src/redis-server /root/redis-cluster/7002/redis.conf
/usr/local/redis-5.0.0/src/redis-server /root/redis-cluster/7003/redis.conf
/usr/local/redis-5.0.0/src/redis-server /root/redis-cluster/7004/redis.conf
/usr/local/redis-5.0.0/src/redis-server /root/redis-cluster/7005/redis.conf
/usr/local/redis-5.0.0/src/redis-server /root/redis-cluster/7006/redis.conf
启动成功图:ps -ef|grep redis
2.5 创建集群
执行命令:
/usr/local/redis-5.0.0/src/redis-cli --cluster create 192.168.0.31:7001 192.168.0.31:7002 192.168.0.31:7003 192.168.0.31:7004 192.168.0.31:7005 192.168.0.31:7006 --cluster-replicas 1
/data/redis-5.0.8/src/redis-cli --cluster create 10.1.162.59:7001 10.1.162.59:7002 10.1.162.59:7003 10.1.162.59:7004 10.1.162.59:7005 10.1.162.59:7006 --cluster-replicas 1
cluster-replicas 1: 集群中1个主节点对应的从节点数
是否检查成功:
./redis-cli -c -p 7001
这要注意有输入-c(表示集群模式)
然后执行cluster nodes显示如图则表示集群部署成功
三、高可用水平扩展
增加redis实例 执行mkdir 7007 7008拷贝相应的redis.conf配置文件,然后进行相应的修改配置 然后启动。
执行集群节点并没有返现我们的节点数据,这个时候需要把启动的节点数据增加到集群中
3.1 增加主节点
执行命令:./redis-cli --cluster add-node 192.168.0.31:7007 192.168.0.31:7001
查看集群状态,可发现节点是7个,但是7007节点,没有hash槽分配;因为16384个槽都应经分配给之前3个master了;
3.2 重新分配哈希槽
使用redis-cli命令为7007分配hash槽,找到集群中的任意一个主节点(7001),对其进行重新分片工作
命令 : ./redis-cli --cluster reshard 192.168.0.31:7001
两种方式:
一种是all,以将所有节点用作散列槽的源节点,
一种是done,这种是你自己选择从哪个节点上拿出来节点分给8007
备注:all是随机的,比如说我们要分出1000个,则3个主节点分别拿出333个,333个,334个节点分别7007,这里我们选择done,从7001拿1000个给7007
3.3 增加从节点
命令: ./redis-cli --cluster add-node 192.168.0.31:7008 192.168.0.31.7001
目前增加还是主节点,并且没有hash槽。
变成从节点:
命令:CLUSTER REPLICATE 095faf5f43085d2b8034fcb417daddbd0f5d9c2c
(这个节点依赖哪个主节点)
3.4 其他命令
./redis-cli --cluster del-node 192.168.0.31:7008 230e6e5b45e310fffafd2809f0bd5c869889a015
#删除从节点
./redis-cli --cluster reshard 192.168.0.31:7007
#删除主节点
./redis-cli -p 7001 shutdown
# 关闭节点