当前位置: 首页 > 工具软件 > Redis-Search > 使用案例 >

redis5 集群安装--redis-cluster命令使用(笔记)

商飞尘
2023-12-01

介绍

  • redis最开始使用主从模式做集群,若master宕机需要手动配置slave转为master;后来为了高可用提出来哨兵模式,该模式下有一个哨兵监视master和slave,若master宕机可自动将slave转为master,但它也有一个问题,就是不能动态扩充;所以在3.x提出cluster集群模式。

  • Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。

结构特点

  • 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
  • 节点的fail是通过集群中超过半数的节点检测失效时才生效。
  • 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
  • redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value。
  • Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。

意思是,Redis-Cluster把存储的数据分开存入各个主节点,主节点间存储的数据是不一样的

# 假如预先设置3个节点,slot大致分配方式
节点A覆盖0-5460;
节点B覆盖5461-10922;
节点C覆盖10923-16383.
# 添加一个D节点,redis cluster的这种做法是从各个节点的前面各拿取一部分slot到D上
节点A覆盖1365-5460
节点B覆盖6827-10922
节点C覆盖12288-16383
节点D覆盖0-1364,5461-6826,10923-12287

准备

somaxconn参数

  • 对于一个TCP连接,Server与Client需要通过三次握手来建立网络连接.当三次握手成功后, 连接队列上限。
  • 系统中每一个端口最大的监听队列的长度,这是个全局的参数,默认值为128,具体信息为。

修改

# 重启后就没有了
echo 2048 >   /proc/sys/net/core/somaxconn
vim /etc/sysctl.conf
# 在/etc/sysctl.conf中添加如下
net.core.somaxconn = 2048

安装redis(6个)

yum install gcc
cd /usr/local/
# 下载
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
tar -zxvf redis-5.0.7.tar.gz
mv redis-5.0.7 redis
 
cd redis
# 编译
make
cd src
make install PREFIX=/usr/local/redis
 
makdir etc
# 移动启动配置
mv /usr/local/redis/redis.conf /usr/local/redis/etc/redis.conf
# 设置开机启动
vi /etc/rc.local
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
# 修改配置
vi /usr/local/redis/etc/redis.conf
# 允许后台启动
daemonize 改为yes
# 启动redis
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
 
# 关闭redis 
/usr/local/redis/bin/redis-cli shutdown 或者pkill redis-server

redis.conf 配置修改

mkdir -p /usr/local/redis-cluster
mkdir 8001 8002 8003 8004 8005 8006
# 允许后台启动
daemonize 改为yes
# 端口
port 8001
# 去掉指定访问ip
# bind 127.0.0.1
# 关闭保护模式
protected-mode no
# 开启redis集群
cluster-enabled yes
# 配置redis自动生成的集群配置文件名
cluster-config-file nodes-8001.conf
# 集群节点超时毫秒数
cluster-node-timeout 5000
# 如果需要设置密码
requirepass 123456
masterauth 123456 # 集群节点间访问密码
# 启动6个实例
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/8001/redis.conf

初始集群主从节点

/usr/local/redis/bin/redis-cli -a 123456 --cluster create --cluster-replicas 1 192.168.5.100:8001 192.168.5.100:8002 192.168.5.100:8003 192.168.5.100:8004 192.168.5.100:8005 192.168.5.100:8006

redis-cli --cluster

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
# 获取集群节点信息
cluster nodes
# 创建集群主节点
redis-cli --cluster create 192.168.163.132:6379 192.168.163.132:6380 192.168.163.132:6381
# 创建集群主从节点,前三主节点,后三从节点
redis-cli --cluster create 192.168.163.132:6379 192.168.163.132:6380 192.168.163.132:6381 192.168.163.132:6382 192.168.163.132:6383 192.168.163.132:6384 --cluster-replicas 1
# 添加集群主节点,连接到6379,加入6382节点
redis-cli --cluster add-node 192.168.163.132:6382 192.168.163.132:6379 
# 添加集群从节点,把6382节点加入到6379节点的集群中,并且当做node_id为 117457eab5071954faab5e81c3170600d5192270 的从节点。如果不指定 --cluster-master-id 会随机分配到任意一个主节点。
redis-cli --cluster add-node 192.168.163.132:6382 192.168.163.132:6379 --cluster-slave --cluster-master-id 117457eab5071954faab5e81c3170600d5192270
#  删除节点,指定IP、端口和node_id 来删除一个节点,从节点可以直接删除,主节点不能直接删除,删除之后,该节点会被shutdown。
redis-cli --cluster del-node 192.168.163.132:6384 f6a6957421b80409106cb36be3c7ba41f3b603ff
# 检查集群信息
redis-cli --cluster check 192.168.163.132:6384 --cluster-search-multiple-owners
# 检查key、slots、从节点个数的分配情况
redis-cli --cluster info 192.168.163.132:6384
# 修复集群和槽的重复分配问题
redis-cli --cluster fix 192.168.163.132:6384 --cluster-search-multiple-owners
# 设置集群的超时时间 
redis-cli --cluster set-timeout 192.168.163.132:6382 10000

 参考

https://www.cnblogs.com/zhoujinyi/p/11606935.html

 类似资料: