NoSQLRedis集群

一、案例概述

1.1单节点Redis服务器带来的问题

单点故障,服务不可用

无法处理大量的并发数据请求

数据丢书一大灾难

1.2 解决方法

搭建Redis集群

二、案例前置知识点

2.1 Redis集群介绍

Redis集群是一个提供在多个Redis间节点间共享数据的程序集(路由)

Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误

Redis集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下可继续处理命令

2.2 Redis集群的优势

自动分割数据到不同的节点上

整个集群的部分节点失败或者不可达的情况下能够继续处理命令

2.3 Redis集群的实现方法

有客户端分片

代理分片

服务器端分片

Redis群集:去中心化模式——>区块链用的多

2.4 Redis-Cluster数据分片

Redis集群没有使用一致性hash,而是引入了哈希槽概念

Redis集群有16384个哈希槽

每个key通过CRC16校验后对16384取模来决定放置槽

集群的每个节点负责一部分哈希槽

以3个节点组成的集群为例

节点A包含0到5500号到哈希槽

节点B包含5501到11000号哈希槽

节点C包含11001到16384号哈希槽

支持添加或者删除节点

添加删除节点无需停止服务

例如

如果想新添加节点D,需要移动节点A、B、C中的部分槽到D上

如果想移除节点A,需要将A中的槽移到B和C节点上,再将没有任何槽的A节点从集群中移除

2.5 Redis-Cluster的主从复制模型

集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会缺少5501-11000这个范围的槽而不可用

为每个节点添加一个从节点A1,B1,C1,整个集群便有三个master节点和三个slave节点组成,在节点B失败后,集群便会选举B1成为新的主节点继续服务

当B和B1都失败后,集群将不可用

三、案例环境

案例拓扑图

操作系统

配置

主机名

ip

Centos7.9

2G4G

master1

192.168.10.129

Centos7.9

2G4G

master2

192.168.10.130

Centos7.9

2G4G

master3

192.168.10.131

Centos7.9

2G4G

slave1

192.168.10.132

Centos7.9

2G4G

slave2

192.168.10.133

Centos7.9

2G4G

slave3

192.168.10.134

案例实施

下载并安装Redis(所有节点)

修改Redis配置文件(所有节点)

#6台虚拟机都要做, # 准备Redis源码包

[root@master1 ~]# ls anaconda-ks.cfg redis-4.0.9.tar.gz

# 安装gcc环境

[root@master1 ~]# yum -y install gcc gcc-* # 解包,配置,编译安装

[root@master1 ~]# tar zxf redis-4.0.9.tar.gz

[root@master1 ~]# cd redis-4.0.9

[root@master1 redis-4.0.9]# make && make PREFIX=/usr/local/redis install

# 查看返回结果,以免安装出错

[root@master1 redis-4.0.9]# echo $? 0

[root@master1 redis-4.0.9]# cd utils/

# 创建软链接

[root@master1 utils]# ln -s /usr/local/redis/bin/* /usr/local/bin/

#执行脚本,一直回车就可以

[root@master1 utils]# ./install_server.sh

# 查看6379端口号

[root@master1 utils]# ss -nlpt | grep 6379 LISTEN 0 128 127.0.0.1:6379

修改Redis配置文件 [root@master1 ~]# vi /etc/redis/6379.conf

70行加注释

89行yes改成no

815行删注释

823行删注释,829删注释并把后面的15000参数改成5000

673行改成yes

#因为一个一个改太麻烦了所以,先把第一台配置文件改好然后用 SCP命令进行复制传输给每台虚拟机

[root@master1 utils]# scp /etc/redis/6379.conf root@192.168.10.130:/etc/redis/6379.conf

SCP命令用于在本地主机和远程主机之间复制文件或目录。 /etc/redis/6379.conf #需要传输的文件以及目录 root@192.168.10.130 接收用户,ip /etc/redis/6379.conf #传输位置 SCP命令的基本语法如下: scp [选项] [源文件] [目标文件] 常用的选项包括: -r:递归复制目录及其内容。 -P:指定远程主机的端口号。 -i:指定用于身份验证的私钥文件。 -v:显示详细的传输信息。 #改完刷新重启

[root@master1 ~]# /etc/init.d/redis_6379 restart

创建Redis集群(master1节点)

在master1节点拉取ruby-2.6.9的源码包

# 安装所需依赖包

[root@master1 ~]# yum -y install zlib-devel openssl-devel

[root@master1 ~]# sudo yum install -y gcc make openssl-devel readline-devel zlib-devel

# 编译安装

[root@master1 ~]# tar zxvf ruby-2.6.9.tar.gz -C /usr/src/

[root@master1 ~]# cd /usr/src/ruby-2.6.9/

[root@master1 ~]# ./configure --prefix=/usr/local/ruby-2.6.9

[root@master1 ~]# make && make install

# 优化执行路径

[root@master1 ~]# ln -s /usr/local/ruby-2.6.9/bin/ruby /usr/bin/ruby

[root@master1 ~]# ln -s /usr/local/ruby-2.6.9/bin/gem /usr/bin/gem

# 查看版本

[root@master1 ~]# ruby -v

[root@master1 ~]# gem -v

# 使用gem安装redis依赖

[root@master1 ~]# gem install redis

#验证安装结果 [root@master1 ruby-2.6.9]# echo $? 0

# 创建redis集群

[root@master1 ~]# redis-4.0.9/src/redis-trib.rb create --replicas 192.168.10.129:6379 192.168.10.130:6379 192.168.10.131:6379 \ 192.168.10.132:6379 192.168.10.133:6379 192.168.10.134:6379

# 删除所有的从节点(master1节点)

[root@master1 ~]# /root/redis-4.0.9/src/redis-trib.rb del-node 192.168.10.133:6379 e078b85f41ce868e02751a82e4ee69865ed249e8 >>> Removing node e078b85f41ce868e02751a82e4ee69865ed249e8 from cluster 192.168.10.133:6379 >>> Sending CLUSTER FORGET messages to the cluster... >>> SHUTDOWN the node.

[root@master1 ~]# /root/redis-4.0.9/src/redis-trib.rb del-node 192.168.10.132:6379 7b09ef916953d5f12aeaa577dd0209da55d897a3 >>> Removing node 7b09ef916953d5f12aeaa577dd0209da55d897a3 from cluster 192.168.10.132:6379 >>> Sending CLUSTER FORGET messages to the cluster... >>> SHUTDOWN the node.

[root@master1 ~]# /root/redis-4.0.9/src/redis-trib.rb del-node 192.168.10.134:6379 a14a3300355f68ed9993b793ce2f1fd67b216f8e >>> Removing node a14a3300355f68ed9993b793ce2f1fd67b216f8e from cluster 192.168.10.134:6379 >>> Sending CLUSTER FORGET messages to the cluster... >>> SHUTDOWN the node.

#删除节点配置文件和持久化文件(slave1、2、3节点) #在3个slave节点执行

[root@slave3 ~]# cd /var/lib/redis/6379/

[root@slave3 6379]# rm -rf appendonly.aof dump.rdb nodes-6379.conf

[root@slave3 6379]# /etc/init.d/redis_6379 restart

[root@slave3 6379]# echo $? 0

# 重新添加从节点(master1节点)

[root@master1 ~]# /root/redis-4.0.9/src/redis-trib.rb add-node --slave --master-id 2a5eabacf684cdc7fe96c70fd62c3bbfb9aa390f 192.168.10.132:6379 192.168.10.129:6379 [root@master1 ~]# /root/redis-4.0.9/src/redis-trib.rb add-node --slave --master-id dc0e877ee32557fca4280b5b9280a54c8f3412eb 192.168.10.133:6379 192.168.10.130:6379 [root@master1 ~]# /root/redis-4.0.9/src/redis-trib.rb add-node --slave --master-id 7096ea83fa6407d4a325a8c4e992f5914adbc8c9 192.168.10.134:6379 192.168.10.131:6379 # 检查新的主从关系(master节点)

[root@master1 ~]# /root/redis-4.0.9/src/redis-trib.rb check 192.168.10.129:6379

#测试集群数据读写

[root@master1 ~]# redis-cli -c 127.0.0.1:6379> set name zhangsan -> Redirected to slot [5798] located at 192.168.10.130:6379 OK 192.168.10.130:6379> set name zhangsan

[root@master1 ~]# redis-cli -c 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> [root@master2 utils]# redis-cli -c 127.0.0.1:6379> keys * 1) "name" 127.0.0.1:6379> get name "zhangsan"

结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值