redis--19--集群--简单搭建和理论验证

redis–19–集群–简单搭建和理论验证

1、机器

机器IP端口
机器1192.168.187.1386379
机器1192.168.187.1386380
机器1192.168.187.1386381
机器1192.168.187.1386382
机器1192.168.187.1386383
机器1192.168.187.1386384

2、修改配置

2.1、公共配置

修改最初的redis.conf文件

# 设置后台启动
daemonize yes

# 本机访问保护模式,no 开启远程访问
protected-mode no

# 无限制接受任何ip地址的访问
# bind 127.0.0.1 -::1

# aof 和rdb文件的目录
dir /redis/data/
 

2.2、创建6379.conf配置文件

已6379配置为例,其他端口参考配置

vim /redis/6379.conf

内容



# 引用公用的配置
include /redis/redis.conf
# 存放pid文件的位置
pidfile /var/run/redis_6379.pid
# 端口号
port 6379
# rdb文件
dbfilename 6379.rdb
# rdb文件目录
dir "/redis/data/"
# 日志文件
logfile "/redis/data/6379.log"

#----集群配置------
# 开启集群模式
cluster-enabled yes    
# 设定节点配置文件名
cluster-config-file nodes-6379.conf
# 设定节点超时时间,单位毫秒,超过该时间,集群自动进行主从切换。
cluster-node-timeout 15000

 


在这里插入图片描述

3、启动6个redis服务


/usr/local/bin/redis-server /redis/6379.conf 
/usr/local/bin/redis-server /redis/6380.conf 
/usr/local/bin/redis-server /redis/6381.conf 
/usr/local/bin/redis-server /redis/6382.conf 
/usr/local/bin/redis-server /redis/6383.conf 
/usr/local/bin/redis-server /redis/6384.conf 

ps -ef | grep redis

在这里插入图片描述

3.1、确保所有redis实例启动后,nodes-xxxx.conf文件都生成正常

在这里插入图片描述

4、将6个节点合成一个集群


redis-cli --cluster create --cluster-replicas 1 192.168.187.138:6379 192.168.187.138:6380 192.168.187.138:6381 192.168.187.138:6382 192.168.187.138:6383 192.168.187.138:6384

在这里插入图片描述

4.1、命令说明

redis-cli --cluster help
Cluster Manager Commands:
  create         host1:port1 ... hostN:portN   #创建集群
                 --cluster-replicas <arg>      #每个主节点对应从节点个数
  check          host:port                     #检查集群
                 --cluster-search-multiple-owners #检查是否有槽同时被分配给了多个节点
  info           host:port                     #查看集群状态
  fix            host:port                     #修复集群
                 --cluster-search-multiple-owners #修复槽的重复分配问题
  reshard        host:port                     #指定集群的任意一节点进行迁移slot,重新分slots
                 --cluster-from <arg>          #需要从哪些源节点上迁移slot,可从多个源节点完成迁移,以逗号隔开,传递的是节点的node id,还可以直接传递--from all,这样源节点就是集群的所有节点,不传递该参数的话,则会在迁移过程中提示用户输入
                 --cluster-to <arg>            #slot需要迁移的目的节点的node id,目的节点只能填写一个,不传递该参数的话,则会在迁移过程中提示用户输入
                 --cluster-slots <arg>         #需要迁移的slot数量,不传递该参数的话,则会在迁移过程中提示用户输入。
                 --cluster-yes                 #指定迁移时的确认输入
                 --cluster-timeout <arg>       #设置migrate命令的超时时间
                 --cluster-pipeline <arg>      #定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10
                 --cluster-replace             #是否直接replace到目标节点
  rebalance      host:port                                      #指定集群的任意一节点进行平衡集群节点slot数量 
                 --cluster-weight <node1=w1...nodeN=wN>         #指定集群节点的权重
                 --cluster-use-empty-masters                    #设置可以让没有分配slot的主节点参与,默认不允许
                 --cluster-timeout <arg>                        #设置migrate命令的超时时间
                 --cluster-simulate                             #模拟rebalance操作,不会真正执行迁移操作
                 --cluster-pipeline <arg>                       #定义cluster getkeysinslot命令一次取出的key数量,默认值为10
                 --cluster-threshold <arg>                      #迁移的slot阈值超过threshold,执行rebalance操作
                 --cluster-replace                              #是否直接replace到目标节点
  add-node       new_host:new_port existing_host:existing_port  #添加节点,把新节点加入到指定的集群,默认添加主节点
                 --cluster-slave                                #新节点作为从节点,默认随机一个主节点
                 --cluster-master-id <arg>                      #给新节点指定主节点
  del-node       host:port node_id                              #删除给定的一个节点,成功后关闭该节点服务
  call           host:port command arg arg .. arg               #在集群的所有节点执行相关命令
  set-timeout    host:port milliseconds                         #设置cluster-node-timeout
  import         host:port                                      #将外部redis数据导入集群
                 --cluster-from <arg>                           #将指定实例的数据导入到集群
                 --cluster-copy                                 #migrate时指定copy
                 --cluster-replace                              #migrate时指定replace
  help           

For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.

5、验证

5.1、普通方式登录

进入读机,写数据时,会出现MOVED重定向操作

/usr/local/bin/redis-cli -h 192.168.187.138 -p 6384

在这里插入图片描述

5.2、集群方式登录

写数据时,会自动切换到相应的写主机

-c:自动重定向到对应插槽所在的节点

/usr/local/bin/redis-cli -c  -h 192.168.187.138 -p 6384

在这里插入图片描述

5.3、不在一个slot下的键值,是不能使用mget,mset等多键操作

192.168.187.138:6381> mset k1 v1 k2 v2 k3 v3
(error) CROSSSLOT Keys in request don't hash to the same slot
192.168.187.138:6381> 

5.4、可以通过{}来定义组的概念,从而使key中{}内相同内容的键值对放到一个slot中去。

192.168.187.138:6381> mset k1{1111} v1 k2{1111} v2 k3{1111} v3
OK
192.168.187.138:6381> 

5.5、故障恢复

5.5.1、主节点下线,从节点自动升为主节点

6383从节点对应的master是6379

在这里插入图片描述

关闭6379后,6383变为master

在这里插入图片描述

5.5.2、主节点恢复后,主节点变成从机。

6379重启后,6379是从节点,6383还是master
在这里插入图片描述

5.5.3、如果所有某一段插槽的主从节点都宕掉,redis服务是否还能继续?

  1. 如果 cluster-require-full-coverage 为yes ,那么 ,整个集群都挂掉
  2. 如果 cluster-require-full-coverage 为no ,那么,该插槽数据全都不能使用,也无法存储。但是集群的其他插槽可以用

redis.conf中的参数

cluster-require-full-coverage yes

6、常用命令

6.1、命令查看集群信息

192.168.187.138:6381>  cluster nodes

在这里插入图片描述

6.2、查看k1(key)对应的插槽是哪个


192.168.187.138:6381> cluster keyslot k1
(integer) 12706
192.168.187.138:6381> 

6.2、查看12706插槽内有几个key。

需要进入插槽对应的节点,不然返回的数据不对


192.168.187.138:6384> cluster countkeysinslot 12706
(integer) 0
192.168.187.138:6384> 



进入对应的节点

 # 我们通过 set k1 v1自动调整到对应节点
192.168.187.138:6384> set k1 v1
-> Redirected to slot [12706] located at 192.168.187.138:6381
OK
192.168.187.138:6381> cluster keyslot k1
(integer) 12706
192.168.187.138:6381> cluster countkeysinslot 12706
(integer) 1


6.2、返回12706插槽内的10个key。

192.168.187.138:6381> cluster getkeysinslot 12706 10
1) "k1"
192.168.187.138:6381> 

7、注意

  1. 分配原则尽量保证每个主数据库运行在不同的IP地址,每个从库和主库不在一个IP地址上。防止1台机器挂了,导致集群失败。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值