Linux部署Redis-Cluster集群

一、Redis集群介绍

Redis集群是一个可以在多个Redis节点之间进行数据共享的设施installation。

Redis集群不支持那些需要同时处理多个键的Redis命令,因为执行这些命令需要在多个Redis节点之间移动数据,并且在高负载的情况下,这些命令将降低Redis集群的性能,并导致不可预测的行为。

Redis集群通过分区partition来提供一定程度的可用性availability:即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求。

Redis集群提供了以下两个好处:

将数据自动切分split到多个节点的能力。

当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力。

所有的Redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。

节点的fail是通过集群中超过半数的节点检测失效时才生效。

客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

Redis集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

redis-cluster投票:容错

投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超时(cluster-node-timeout),认为当前master节点挂掉.

什么时候整个集群不可用(cluster_state:fail)?

如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完整时进入fail状态.

redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.

如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态.

二、Redis Cluster集群搭建

环境准备:CentOS Linux release 7.9.2009 (Core)

1、安装wget和gcc及依赖包

[root@localhost ~]# yum -y install wget gcc gcc-c++ openssl openssl-devel

2、下载Redis安装包

[root@localhost ~]# wget https://download.redis.io/releases/redis-6.0.16.tar.gz

3、解压和创建存放目录

[root@localhost ~]# tar xf redis-6.0.16.tar.gz

[root@localhost ~]# cd redis-6.0.16

[root@localhost redis-6.0.16]# make

# 创建集群目录

[root@localhost redis-6.0.16]# mkdir -p /usr/local/redis-cluster

4、拷贝实例目录

[root@localhost redis-6.0.16]# cd

[root@localhost ~]# for i in $(seq 7000 7005);do cp -a /root/redis-6.0.16 /usr/local/redis-cluster/redis_${i};done

# 创建数据目录

[root@localhost ~]# mkdir -p /data/redis_{7000..7005}

5、将六个节点的redis.conf配置文件进行修改(这里采用的是脚本修改)

[root@localhost ~]# vim config_redis.sh

for i in $(seq 7000 7005)
do
	cd /usr/local/redis-cluster/redis_${i}
	sed -i "/port/s/6379/${i}/g" /usr/local/redis-cluster/redis_${i}/redis.conf
	sed -i '/appendonly/s/no/yes/' /usr/local/redis-cluster/redis_${i}/redis.conf
	sed -i '/daemonize/s/no/yes/' /usr/local/redis-cluster/redis_${i}/redis.conf
	echo never > /sys/kernel/mm/transparent_hugepage/enabled
	sysctl vm.overcommit_memory=1 >/dev/null
	sed -i "/dir/s#.*#dir /data/redis_${i}#" /usr/local/redis-cluster/redis_${i}/redis.conf
	cat >>/usr/local/redis-cluster/redis_${i}/redis.conf <<-EOF
	cluster-enabled yes
	cluster-config-file nodes.conf
	cluster-node-timeout 5000
	EOF
done

注:端口号如果是同一台主机的话,必须不同。不同主机可以相同。

注:我这里是使用一台主机,所以我将六个节点的端口号修改为7000-7005

6、编写集群启动脚本

[root@localhost ~]# vim start_redis_cluster.sh

for i in $(seq 7000 7005)
do
    cd /usr/local/redis-cluster/redis_${i}/src
    ./redis-server ../redis.conf
done
7、编写集群停止脚本

[root@localhost ~]# vim stop_redis_cluster.sh

for i in $(seq 7000 7005)
do
    cd /usr/local/redis-cluster/redis_${i}/src
    ./redis-cli -p ${i} shutdown
done
8、启动Redis集群

[root@localhost ~]# chmod +x *.sh

[root@localhost ~]# sh config_redis.sh

[root@localhost ~]# sh start_redis_cluster.sh

[root@localhost ~]# netstat -lntup

Linux部署Redis-Cluster集群

9、创建Redis集群

[root@localhost ~]# /usr/local/redis-cluster/redis_7000/src/redis-cli –cluster create –cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

Linux部署Redis-Cluster集群Linux部署Redis-Cluster集群

# 可以看到16384个slot都已经创建完成,并且建立了3个master和对应的replica

10、验证集群状态

[root@localhost ~]# /usr/local/redis-cluster/redis_7000/src/redis-cli -c -p 7000

127.0.0.1:7000> cluster info

127.0.0.1:7000> cluster nodes

Linux部署Redis-Cluster集群

11、测试Redis集群比较简单的办法就是使用redis-rb-cluster或者redis-cli,接下来我们将使用redis-cli为例来进行演示:

127.0.0.1:7000> set test 123

-> Redirected to slot [6918] located at 127.0.0.1:7001

OK

127.0.0.1:7001> keys *

1) “test”

三、Redis Cluster集群扩容

1、新增Master主节点

# 集群创建成功后可以向集群中添加节点,下面是添加一个master主节点。

1)启动一个新节点

[root@localhost ~]# cp -a /usr/local/redis-cluster/redis_7000/ /usr/local/redis-cluster/redis_7006

[root@localhost ~]# sed -i ‘s/7000/7006/g’ /usr/local/redis-cluster/redis_7006/redis.conf

[root@localhost ~]# mkdir -p /data/redis_7006

[root@localhost ~]# /usr/local/redis-cluster/redis_7006/src/redis-server /usr/local/redis-cluster/redis_7006/redis.conf

2)查看Redis进程

[root@localhost ~]# ps -ef | grep redis |grep -v grep

Linux部署Redis-Cluster集群

3)加入节点

[root@localhost ~]# /usr/local/redis-cluster/redis_7000/src/redis-cli –cluster add-node 127.0.0.1:7006 127.0.0.1:7000

Linux部署Redis-Cluster集群

4)查询集群状态信息,是否把7006添加到集群中

[root@localhost ~]# /usr/local/redis-cluster/redis_7000/src/redis-cli -c -p 7000

Linux部署Redis-Cluster集群

5)为新节点分配槽位

[root@localhost ~]# /usr/local/redis-cluster/redis_7006/src/redis-cli –cluster reshard 127.0.0.1:7006

2、添加Slave从节点

1)创建新节点

[root@localhost ~]# cp -a /usr/local/redis-cluster/redis_7000/ /usr/local/redis-cluster/redis_7007

[root@localhost ~]# sed -i ‘s/7000/7007/g’ /usr/local/redis-cluster/redis_7007/redis.conf

[root@localhost ~]# mkdir -p /data/redis_7007

[root@localhost ~]# /usr/local/redis-cluster/redis_7007/src/redis-server /usr/local/redis-cluster/redis_7007/redis.conf

2)查看Redis进程

[root@localhost ~]# ps -ef | grep redis |grep -v grep

Linux部署Redis-Cluster集群

3)添加从节点

[root@localhost ~]# /usr/local/redis-cluster/redis_7006/src/redis-cli –cluster add-node –cluster-slave 127.0.0.1:7007 127.0.0.1:7006

Linux部署Redis-Cluster集群

4)查询集群状态信息,是否把7007添加到集群中

[root@localhost ~]# /usr/local/redis-cluster/redis_7006/src/redis-cli -p 7000

Linux部署Redis-Cluster集群

1cb952f1609ad5853418c9f919bdb3e6e5233b6a是7006节点的id,可以通过cluster nodes查看

3、删除节点

[root@localhost ~]# /usr/local/redis-cluster/redis_7006/src/redis-cli –cluster del-node 127.0.0.1:7007 2eaa5ffe9636c6f9a67599addc7160457c8854d8

>>> Removing node 2eaa5ffe9636c6f9a67599addc7160457c8854d8 from cluster 127.0.0.1:7007

>>> Sending CLUSTER FORGET messages to the cluster…

>>> Sending CLUSTER RESET SOFT to the deleted node.

1)查看集群状态信息

[root@localhost ~]# /usr/local/redis-cluster/redis_7006/src/redis-cli -p 7000

127.0.0.1:7000> cluster nodes

Linux部署Redis-Cluster集群

原创文章,作者:admin,如若转载,请注明出处:https://hostingchat.cn/396.html

(0)
admin的头像admin
上一篇 2022年8月31日 下午3:33
下一篇 2022年9月1日 上午11:52

相关推荐

  • Ubuntu 22.04安装Redis

    一、方式一 1、安装Redis 1)更新系统 root@ubuntu:~# apt update -y 2)安装Redis root@ubuntu:~# apt -y instal…

    2024年11月6日
    000
  • Redis 集合(Set)

    Redis 集合(Set) Redis 的Set是String类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。 Redis 中集合是通过哈希表实现的,所以添加…

    2020年5月12日
    000
  • Redis 事务

    Redis 事务 Redis 事务可以一次执行多个命令,并且带有以下三个重要的保证: 批量操作在发送EXEC命令前被放入队列缓存。 收到EXEC命令后进入事务执行,事务中任意命令执…

    2020年5月13日
    000
  • Linux部署Redis数据库主从架构

    一、Redis主从概述 为了提升redis高可用性,我们除了备份redis dump数据之外,还需要创建Redis主从架构,可以利用从将数据库持久化(数据持久化通俗讲就是把数据保存…

    2017年12月14日
    000
  • Redis 列表(List)

    Redis 列表(List) Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边) 一个列表最多可以包含2^32 &#8211…

    2020年5月12日
    000
  • Redis HyperLogLog

    Redis HyperLogLog Redis 在2.8.9版本添加了HyperLogLog结构。 Redis HyperLogLog是用来做基数统计的算法,HyperLogLog…

    2020年5月12日
    000
  • Redis 性能测试

    Redis简介 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。 Redis是一个开…

    2020年5月13日
    000
  • Linux部署Redis-Sentinel集群

    一、Redis-Sentinel简介 Sentinel(哨岗、哨兵)是Redis的高可用性(high availability)解决方案:由一个或多个Sentinel实例(inst…

    2022年11月28日
    000
  • Redis 发布订阅

    一、Redis 发布订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 Redis 客户端可以订阅任意数量的频道。…

    2020年5月13日
    000
  • Redis 分区

    Redis 分区 分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。 分区的优势 通过利用多台计算机内存的和值,允许我们构造更大的数据库。 通过多核…

    2020年5月13日
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注