redis cluster高可用集群搭建、集群扩容、集群缩容

redis集群演变过程

单机版

核心技术:持久化

持久化是最简单的高可用方法,主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。

主从复制

复制是高可用redis的基础,哨兵和集群都是在复制基础上实现高可用,复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复,缺陷是故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制;

哨兵

在复制的基础上,哨兵实现了自动化的故障恢复,缺陷是写操作无法负载均衡;存储能力受到单机的限制。

集群

通过集群,redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。

在这里插入图片描述

什么是redis cluster集群

redis cluster是一个由多个朱从节点群组成的分布式服务器群,具有复制、高可用和分片特性。redis cluster不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可以水平扩展。redis cluster集群的性能和高可用性均优于哨兵模式,而且集群配置非常简单。

redis cluster集群搭建

下载安装

# 下redis5
wget http://download.redis.io/releases/redis-4.0.8.tar.gz
tar -zxvf redis-4.0.8.tar.gz
mv redis-4.0.8 redis
cd redis/
make
cd src
make install prefix=/usr/local/redis

配置

cd /usr/local/etc
# 集群搭建六个节点
mkdir redis7000 redis7001 redis7002 redis7003 redis7004 redis7005
cp /root/Desktop/installpack/redis/redis.conf /usr/local/etc/redis7000

要修改的配置

#绑定本机ip
69 bind 本机ip
#指定该节点端口号
92 port 7000
#以后台方式启动
137 daemonize yes
159 pidfile /var/run/redis_7000.pid
172 logfile "/usr/local/etc/redis7000/redis.log"
264 dir /usr/local/etc/redis7000
#设置集群连接主节点的密码
289 masterauth 123456
501 requirepass 123456
# 打开集群开关,以集群方式运行
815 cluster-enabled yes
823 cluster-config-file nodes-7000.conf
# 当主节点宕机,在没有从节点接替的情况下,整个集群是否可以正常运行,如果配置成no 则当没有相应从节点进行故障恢复时仍然可用
906 cluster-require-full-coverage yes

批量替换复制

[root@localhost etc]# sed 's/7000/7001/g' redis7000/redis.conf > redis7001/redis.conf
[root@localhost etc]# sed 's/7000/7002/g' redis7000/redis.conf > redis7002/redis.conf
[root@localhost etc]# sed 's/7000/7003/g' redis7000/redis.conf > redis7003/redis.conf
[root@localhost etc]# sed 's/7000/7004/g' redis7000/redis.conf > redis7004/redis.conf
[root@localhost etc]# sed 's/7000/7005/g' redis7000/redis.conf > redis7005/redis.conf

redis配置文件中文注释:
链接:https://pan.baidu.com/s/19OdEKKlF7zrbmzvlH62ODg
提取码:gh24

启动集群

/usr/local/bin/redis-server /usr/local/etc/redis7005/redis.conf

在这里插入图片描述
客户端连接
在这里插入图片描述
插入一条数据,报错,没有分配集群槽位。
在这里插入图片描述

分配槽位,指定主从节点

meet
让各个节点之间能够互相通信;

cluster meet ip port

指派槽

# 查看crc16算法算出的key的槽位命令
cluster keyslot key
cluster addslots slot 槽位下标

分配主从

> cluster nodes
6e5bfe8f68cd4a543283f5a94bc206e061c66d9a :7000@17000 myself,master - 0 0 0 connected
> cluster replicate node-id

也可以直接用一条命令完成指定:

# redis3
./redis-trib.rb create --replicas 1 192.168.1.8:7000 192.168.1.8:7001 192.168.1.8:7002 192.168.1.8:7003 192.168.1.8:7004 192.168.1.8:7005
/usr/local/bin/redis-cli --cluster create 192.168.1.8:7000 192.168.1.8:7001 192.168.1.8:7002 192.168.1.8:7003 192.168.1.8:7004 192.168.1.8:7005 --cluster-replicas 1

--replicas 1表示将六个节点按1:1划分,即三个主节点,三个从节点。

在这里插入图片描述
在这里插入图片描述

验证集群

客户端连接集群

/usr/local/bin/redis-cli -c -h 192.168.1.8 -p 7000 -a 123456

查看集群信息
在这里插入图片描述
查看节点列表
在这里插入图片描述

查看帮助手册

 /usr/local/bin/redis-cli -c -h 192.168.1.8 -p 7000 -a 123456 --cluster help
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
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
                 --cluster-from <arg>
                 --cluster-to <arg>
                 --cluster-slots <arg>
                 --cluster-yes
                 --cluster-timeout <arg>
                 --cluster-pipeline <arg>
                 --cluster-replace
  rebalance      host:port
                 --cluster-weight <node1=w1...nodeN=wN>
                 --cluster-use-empty-masters
                 --cluster-timeout <arg>
                 --cluster-simulate
                 --cluster-pipeline <arg>
                 --cluster-threshold <arg>
                 --cluster-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
  import         host:port
                 --cluster-from <arg>
                 --cluster-copy
                 --cluster-replace
  help           

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

集群扩容

添加主节点

# 192.168.1.8:7006 新节点
# 192.168.1.8:7003 已经存在的节点
/usr/local/bin/redis-cli --cluster add-node 192.168.1.8:7006 192.168.1.8:7003  -a 123456

在这里插入图片描述

添加从节点

/usr/local/bin/redis-cli --cluster add-node 192.168.1.8:7007 192.168.1.8:7001  --cluster-slave --cluster-master-id 主节点node_id -a 123456

在这里插入图片描述
在这里插入图片描述
给新添加的主节点7006分配槽位

/usr/local/bin/redis-cli --cluster reshard 192.168.1.8:7006 -a 123456
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

# 分配多少个槽位
How many slots do you want to move (from 1 to 16384)? 300

# 分配给哪个主节点
What is the receiving node ID? e7876ab13bde2ea87be3ef3bf2ed9bb89328044f

# all表示在已经存在的主节点中平均分配
# 如果想从指定主节点中分配,则输入已经存在节点的node_id
# 指定完成后输入done表示完成
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1: 

在这里插入图片描述
在这里插入图片描述
查看分配结果
在这里插入图片描述

集群缩容

去除槽位

redis-cli --cluster reshard 已经存在节点ip:port  --cluster-from 迁出节点id  --cluster-to 迁入节点id --cluster-slot 300 -a 123456

删除节点

先删除从节点,再删除主节点

redis-cli --cluster del-node host:port node_id

关闭集群


# 需要一个一个执行
/usr/local/redis/bin/redis-cli -c -h 127.0.0.1 -p 7000 shutdown 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章