华为python673集_实现Redis Cluster并实现Python链接集群

本文介绍了如何搭建Redis Cluster集群,包括集群环境准备、Redis实例安装配置、创建集群以及处理常见问题。此外,还详细讲解了Python如何连接Redis Cluster,涉及Redis-py和redis-py-cluster的安装与使用,以及解决兼容性问题。
摘要由CSDN通过智能技术生成

一、Redis Cluster简单介绍

Redis集群搭建的方式有多种,例如使用Redis主从复制+Sentinel高可用集群、zookeeper等,但从Redis 3.0之后版本支持Redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。

其Redis-cluster结构图如下:

2e260b66c3332bca82158fc88b401684.png

Redis Cluster集群的运行机制:

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

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

客户端与Redis节点直连,不需要中间Proxy层。客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可(默认slave从节点只提供备份)。

Redis-cluster把所有的物理节点映射到[0-16383]Slot上(不一定是平均分配),Cluster 负责维护nodeslotvalue。

Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个槽中。

二、背景

为了保证Redis集群的高可用性,即使使用Sentinel哨兵实现Failover自动切换,Redis每个实例也是全量存储,每个Redis存储的内容都是完整的数据,比较浪费内存。为了最大化利用内存,可以采用数据分片的形式,保存到不同的Redis实例上,这就是分布式存储。即每台redis存储不同的内容,Redis Cluster集群架构正是满足这种分布式存储要求的一种体现。

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

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

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

三、环境准备

3.1 主机环境

[[email protected] ~]# cat /etc/redhat-release

CentOS Linux release 7.4.1708 (Core)

[[email protected] ~]# uname -m

x86_64

3.2 主机规划

每台主机安装两个Redis实例,一主、一从。

9af27836c9a1d7f9dfe0f41faeb2f1bd.png

其缓存架构图如下:

1dfb4a06cbe01a7089b5f5ff8f8412b4.png

四、部署Redis

4.1 安装Redis软件

#下载redis

[[email protected] server]# cd /server/tools && wget http://download.redis.io/releases/redis-3.2.12.tar.gz

#解压并进入src目录

[[email protected] server]# tar xf redis-3.2.12.tar.gz && cd redis-3.2.12

#编译软件,参数MALLOC=jemalloc,2.4.4以上版本默认的内存分配器(可省略)

[[email protected] redis-3.2.12]# make

#将软件安装到指定目录下

[[email protected] redis-3.2.12]# make PREFIX=/application/redis-3.2.12 install

#创建软链接

[[email protected] redis-3.2.12]# ln -s /application/redis-3.2.12 /application/redis

#修改PATH环境变量并使其生效

[[email protected] redis]# echo 'PATH=/application/redis/bin:$PATH'>>/etc/profile && source /etc/profile

#检查安装结果

[[email protected] redis]# ll bin

-rwxr-xr-x 1 root root 2432992 Apr 10 13:34 redis-benchmark

-rwxr-xr-x 1 root root 25176 Apr 10 13:34 redis-check-aof

-rwxr-xr-x 1 root root 5192440 Apr 10 13:34 redis-check-rdb

-rwxr-xr-x 1 root root 2586080 Apr 10 13:34 redis-cli

lrwxrwxrwx 1 root root 12 Apr 10 13:34 redis-sentinel -> redis-server

-rwxr-xr-x 1 root root 5192440 Apr 10 13:34 redis-server

命令解释:

redis-server:Redis 服务端的启动程序 。

redis-cli:Redis客户端程序,也可以用 telnet 根据其纯文本协议来操作Redis缓存。

redis-benchmark:Redis 性能测试工具,测试 Redis 在当前系统下的读写性能。

redis-check-aof:数据修复。

redis-check-dump:检查导出工具。

4.2 编辑Redis配置文件

[[email protected] redis]# mkdir /application/redis/conf

[[email protected] redis]# cp /server/tools/redis-3.2.12/redis.conf ./conf/

[[email protected] redis]# cd conf

[[email protected] redis]# vim redis.conf

#是否后台运行

daemonize yes

#默认端口

port 6379

#日志文件位置

logfile /var/log/redis.log

#持久化文件存储位置

dir /data/6379

#RDB持久化数据文件

dbfilename dump.rdb

4.3 启动Redis服务

4.3.1 启动前优化内存分配策略

有三种方法进行修改,但是需要root权限:

sysctl vm.overcommit_memory=1

echo ‘vm.overcommit_memory=1‘ >>/etc/sysctl.conf && sysctl -p

echo 1 >/proc/sys/vm/overcommit_memory

Overcommit_Memory参数可选值含义:

0 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

1 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

2 表示内核允许分配超过所有物理内存和交换空间总和的内存。

4.3.2 启动redis-server

#启动服务

[[email protected] redis]# redis-server /application/redis/conf/redis.conf &

#追加启动命令到/etc/rc.local文件中

echo -e '#start redis-server\nredis-server /application/redis/conf/redis.conf &' >>/etc/rc.local

#添加执行权限

[[email protected] ~]# chmod +x /etc/rc.d/rc.local

4.3.3 检查服务

#默认端口6379

[[email protected] redis]# lsof -i :6379

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

redis-ser 10835 root 4u IPv4 26242 0t0 TCP localhost:6379 (LISTEN)

4.3.4 客户端连接测试

#交互式简单存取数据

[[email protected] redis]# redis-cli

127.0.0.1:6379> set name oldboy

OK

127.0.0.1:6379> get name

"oldboy"

#非交互式简单存取数据:类似mysql -e参数

[[email protected] redis]# /application/redis/bin/redis-cli set name oldboy

OK

[[email protected] redis]# /application/redis/bin/redis-cli get name

"oldboy"

#删除数据

[[email protected] redis]# /application/redis/bin/redis-cli del name

注:也可以通过telnet命令实现redis交互式存取数据,类似操作memcached缓存。

五、构建Redis Cluster集群

Redis Cluster集群正常工作至少需要3个主

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值