文章目录
redis-cluster安装使用
一、在服务器上安装ruby
1、会在/etc/yum.repos.d/目录下多出一个CentOS-SCLo-scl-rh.repo源
yum install centos-release-scl-rh
2、安装ruby
yum install rh-ruby23 -y
3、必要一步
scl enable rh-ruby23 bash
4、查看ruby版本
ruby -v
5、安装redis接口包
gem install redis
二、redis-cluster具体测试
1、创建节点,不同节点对应不同的目录
6个节点对应6个目录
mkdir 8000 8001 8002 8003 8004 8005
2、在节点对应的目录下复制一份redis.conf文件,并修改其配置
1、复制redis.conf文件,这里仅列出8000端口的redis.conf文件
cp redis.conf ./8000/redis.conf
2、修改配置
- rdb方式:必须要客户端调用save命令,才会将数据保存到持久化文件中,容易造成缓存未命中
AOF方式:二进制的日志,实时记录redis客户端操作的所有写命令,没有来得及save的数据不保存在dump里,但是命令内容保存在了aof文件中,恢复时,只需要将没save的所有内容的命令调出来
按上面将所有节点的redis.conf都修改
分别启动节点实例
检查是否启动成功
ps -ef|grep redis
三、客户端登录集群
当我们以普通的当时登录某个节点时,是不能往节点中设置值的,因为集群开启后,向节点中设置值时,会通过hash计算出一个槽道号,集群中每个节点都对应了一个范围的槽道号,只有计算出的槽道号在节点槽道号的范围中,就会在该节点中设置值,而普通的登录节点是不会计算槽道号的,所以不能在节点中设置值。
四、创建集群
1、在redis安装目录的src目录下,找到一个rb文件
2、使用redis-trib.rb命令
redis-trib.rb create --replicas 1 127.0.0.1:8000 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003 127.0.0.1:8004 127.0.0.1:8005 127.0.0.1:8006
–replicas 1 表示自动为每一个master节点分配一个slave节点,上面命令中有6个节点,程序会按照一定规则生成3个master(主)3个slave(从)
redis-trib.rb create 127.0.0.1:8000 127.0.0.1:8001 127.0.0.1:8002
没有带–replicas表示创建的全是master(主)节点
1、创建三个主节点集群
注意:如果创建失败,可能是需要关闭防火墙
service iptables stop # 临时关闭防火墙
chkconfig iptables off # 永久关闭防火墙配置,和上面的一起使用
2、使用集群登录redis
查看集群状态
cluster info
设置一个值
动态添加主节点
// 将8003端口节点加入到8000节点的集群中,默认创建的是主节点,并且不管理槽道,不管理槽道的主节点是不存储的数据的
redis-trib.rb add-node 192.168.75.102:8003 192.168.75.102:8000
新的主节点要启用,需要分配槽道
redis-trib.rb reshard 192.168.75.102:8000
表示将集群中的槽道重新分配,后面的节点信息已经在集群中存在的任意节点信息
动态添加从节点(8004添加到8001)
redis-trib.rb add-node --slave --master-id 8001节点的id,使用cluster nodes查看 192.168.75.102:8004 192.168.0.102:8001
redis-trib.rb add-node --slave --master-id 02547600e3bc609b89355d3fd0ccc4d779a8057f 192.168.75.102:8004 192.168.75.102:8001
五、redis集群补充操作
1、重启集群
没有restart类似的重启集群的命令
重启集群的目的:操作时的各种失误,导致集群失效
第一步:杀掉所有redis进程
第二步:删除node-8000.conf文件(记录了当前服务器的唯一一个集群节点状态)
第三步:删除dump8000.rdb文件(为了防止启动其他新节点时,读取原有dump的数据导致添加集群节点非空失败)删除当前目录下所有dump开头的文件:rm -f dump*
第四步:可以调用原有的配置文件,启动redis服务,利用redis-trib.rb create 重新创建集群
这里我使用cluster meet来添加节点
- 如下可知,所有节点都加入到了集群,但是没有分配槽道
- 使用cluster addslots 0,给节点分配0号槽道
- 在16384个槽道分配完成之前,集群是不可用的
- 编写一个shell脚本分配槽道
执行shell脚本:sh ./8000slots0_5461.sh
for i in {1..5461}; do redis-cli -h 192.168.75.102 -c -p 8000 cluster addslots $i;done
复制两份sh文件,分别给8001和8002分配槽道
验证槽道分配完毕之后,集群是否开始工作