week3-第三周作业 Redis集群

Redis Cluster 即 Redis 集群,是 Redis 官方在 3.0 版本推出的一套分布式存储方案。完全去中心化,由多个节点组成,所有节点彼此互联。Redis 客户端可以直接连接任何一节点获取集群中的键值对,不需要中间代理,如果该节点不存在用户所指定的键值,其内部会自动把客户端重定向到键值所在的节点。

Redis 集群是一个网状结构,每个节点都通过 TCP 连接跟其他每个节点连接。在一个有 N 个节点的集群中,每个节点都有 N-1 个流出的 TCP 连接,和 N-1 个流入的连接,这些 TCP 连接会永久保持。

Redis Cluster 同其他分布式存储系统一样,主要具备以下两个功能:

数据分区
Redis 集群会将用户数据分散保存至各个节点中,突破单机 Redis 内存最大存储容量。集群引入了 哈希槽slot的概念,其搭建完成后会生 16384 个哈希槽slot,同时会根据节点的数量大致均等的将 16384 个哈希槽映射到不同的节点上。当用户存储key-value时,集群会先对key进行 CRC16 校验然后对 16384 取模来决定key-value放置哪个槽,从而实现自动分割数据到不同的节点上。

数据冗余
Redis 集群支持主从复制和故障恢复。集群使用了主从复制模型,每个主节点master应至少有一个从节点slave。假设某个主节点故障,其所有子节点会广播一个数据包给集群里的其他主节点来请求选票,一旦某个从节点收到了大多数主节点的回应,那么它就赢得了选举,被推选为主节点,负责处理之前旧的主节点负责的哈希槽。

为了节省服务器资源,本次实验 采用单台机器启动6个不同的端口来模拟实践redis 集群。

服务器IP  192.168.10.132   端口 8001-8006

1.1  Ruby编译安装

Redis3.0需要安装ruby和rubygems环境,而且ruby版本要高于1.8.7;

tar -zxvf ruby-2.5.5.tar.gz

cd ruby-2.5.5

./configure

make &&make install

[root@hdp-03 cluster]# ruby -v

ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-linux]

1.2  Rubygems编译安装

下载最新的rubygems-3.0.4.tgz安装包上传服务器对应安装目录/opt

#tar -zxvf rubygems-3.0.4.tgz

#cd rubygems-3.0.4

#ruby setup.rb

[root@hdp-03 cluster]# gem -v

3.0.4

1.3  Redis3.0编译安装

tar -zxvf redis-3.0.0.tar.gz

cd redis-3.0.0/

make

make install

1.4  Redis3.0集群配置

1.4.1    创建集群需要的目录

 [root@hdp-03 redis]# mkdir -pv cluster

[root@hdp-03 redis]# mkdir -pv  /opt/redis/cluster/{8001,8002,8003,8004,8005,8006}

mkdir: created directory `/opt/redis/cluster/8001'

mkdir: created directory `/opt/redis/cluster/8002'

mkdir: created directory `/opt/redis/cluster/8003'

mkdir: created directory `/opt/redis/cluster/8004'

mkdir: created directory `/opt/redis/cluster/8005'

mkdir: created directory `/opt/redis/cluster/8006'

1.4.2    修改redis.conf配置文件并分发到集群节点目录

vim redis.conf

###修改配置文件中的下面选项

port 8001    #分别更改 

daemonize yes #允许后台启动

cluster-enabled yes # 启用集群模式

cluster-config-file nodescode.conf # 设置当前节点集群配置文件路径

appendonly yes 

pidfile /var/run/redis8001.pid  #设置 Redis 实例 pid 文件

logfile "/var/8001.log"    #设置 Redis 实例log文件

dir  /opt/redis/cluster/8001

bind 192.168.10.132

分发各个节点配置文件:

[root@hdp-03 redis-3.0.0]# cp redis.conf  /opt/redis/cluster/8001

[root@hdp-03 redis-3.0.0]# cp redis.conf  /opt/redis/cluster/8002

[root@hdp-03 redis-3.0.0]# cp redis.conf  /opt/redis/cluster/8003

[root@hdp-03 redis-3.0.0]# cp redis.conf  /opt/redis/cluster/8004

[root@hdp-03 redis-3.0.0]# cp redis.conf  /opt/redis/cluster/8005

[root@hdp-03 redis-3.0.0]# cp redis.conf  /opt/redis/cluster/8006

将分发的配置文件进行批量修改:

sed -i 's/8001/8006/g'  /opt/redis/cluster/8006/redis.conf

 sed -i 's/8001/8005/g'  /opt/redis/cluster/8005/redis.conf

 sed -i 's/8001/8004/g'  /opt/redis/cluster/8004/redis.conf

 sed -i 's/8001/8003/g'  /opt/redis/cluster/8003/redis.conf

 sed -i 's/8001/8002/g'  /opt/redis/cluster/8002/redis.conf

1.4.3    分别启动这6个redis实例

cd  /opt/redis/redis-3.0.0/src

./redis-server   /opt/redis/cluster/8001/redis.conf

./redis-server   /opt/redis/cluster/8002/redis.conf

./redis-server   /opt/redis/cluster/8003/redis.conf

./redis-server   /opt/redis/cluster/8004/redis.conf

./redis-server   /opt/redis/cluster/8005/redis.conf

./redis-server   /opt/redis/cluster/8006/redis.conf

 1.4.4    Redis集群创建

执行redis的创建集群命令创建集群:

[root@hdp-03 src]#  ./redis-trib.rb  create --replicas 1 192.168.10.132:8001  192.168.10.132:8002 192.168.10.132:8003 192.168.10.132:8004 192.168.10.132:8005  192.168.10.132:8006

1.5 验证集群状态:

 1.6 测试验证集群数据写入

 发现有error 报错了,根据网络上建议:

启动时使用-c参数来启动集群模式,命令如下:

[root@muze1 src]$ killall redis-server

登录redis-cli  时候指定 -c 选项,指定客户端连接到redis cluster的集群。

 

posted @ 2022-12-12 11:05  beawh  阅读(30)  评论(0编辑  收藏  举报