NoSQL之Redis集群搭建

一、案例概述

  • 单节点Redis服务器带来的问题
  1. 单点故障,服务不可用
  2. 无法处理大量的并发数据请求
  3. 数据丢失一大灾难
  • 解决方法:搭建Redis集群

二、Redis群集介绍

  • Redis群集是一个提供在多个Redis间节点间共享数据的程序集
  • Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误
  • Redis集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下可继续处理命令
  • Redis集群的优势
  1. 自动分割数据到不同的节点上
  2. 整个集群的部分节点失败或者不可达的情况下能够继续处理命令
  • Redis集群的实现方法
  1. 有客户端分片
  2. 代理分片
  3. 服务器分片
  • Redis-Cluster数据分片
  1. Redis集群没有使用一致性hash,而是引入了哈希槽概念

  2. Redis集群有16384个哈希槽

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

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

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

    ①节点A包含0-5500号哈希槽

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

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

  6. 支持添加或者删除节点

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

    ②例如:

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

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

  7. Redis-Cluster的主从复制模型

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

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

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

三、Redis群集搭建

  • 实验环境:VMware Workstation 15.5、Xshell 6、Centos7.6
  • 实验准备:在两台服务器上各添加2块网卡(每台一共3块)并安装Redis
  • 服务器IP规划
服务器名(网卡) IP地址
master(ens33) 192.168.50.133
master(ens36) 192.168.50.130
master(ens37) 192.168.50.131
slave(ens33) 192.168.50.134
slave(ens36) 192.168.50.132
slave(ens37) 192.168.50.136
  • 实验步骤

1、关闭两台服务器的防火墙

setenforce 0
iptables -F

2、分别编辑Redis配置文件

vim /etc/redis/6379.conf     ## 编辑配置文件

修改如下内容:(前面的数字为行号)
70 注释掉 #bind 127.0.0.1
89 protected-mode no       //yes改为no(关闭保护模式)
137 daemonize yes
833 # cluster-enabled yes       //去掉注释(以独立进程启动)
841 cluster-config-file nodes-6379.conf      //去掉注释(群集名称文件设置)
847 # cluster-node-timeout 15000     //去掉注释(群集超时时间设置)
700 appendonly yes      //no改为yes(开启aof持久化)

3、重启Redis服务

/etc/init.d/redis_6379 restart

cd /var/lib/redis/6379    //进入目录
可以看到三个文件:
-rw-r--r--. 1 root root   0 9月   9 15:20 appendonly.aof     ## 持久化AOF文件
-rw-r--r--. 1 root root  92 9月   9 15:20 dump.rdb
-rw-r--r--. 1 root root 114 9月   9 15:20 nodes-6379.conf     ## 首次启动生成

4、导入key文件

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

5、从本地上传脚本到主服务器并添加执行权限

下载地址:https://wwa.lanzous.com/i93nrghemyd
chmod +x rvm-installer.sh

6、执行脚本

./rvm-installer.sh

7、执行环境变量

source /etc/profile.d/rvm.sh

8、列出Ruby可安装的按本

rvm list known

9、安装Ruby2.4.10版本【等待时间较长,耐心等待】

rvm install 2.4.10

10、使用Ruby2.4.10版本

rvm use 2.4.10

11、查看当前Ruby2.4.10版本

ruby -v    ## 查看ruby版本
返回结果:ruby 2.4.10p364 (2020-03-31 revision 67879) [x86_64-linux]

12、再次安装Redis(构建群集)

gem install redis

13、进行集群开启前配置

vim /etc/redis/6379.conf   ## 编辑配置文件
主服务器上更改第70行:
 70 bind 192.168.50.133 192.168.50.130 192.168.50.131
 
 从服务器上更改第70行:
 70 bind 192.168.50.134 192.168.50.132 192.168.50.136
 
 修改完成后重启Redis服务:/etc/init.d/redis_6379 restart
 
 查看服务状态:netstat -nultp | grep 6379

[root@localhost profile.d]# netstat -nultp | grep 6379
tcp        0      0 192.168.50.131:6379     0.0.0.0:*               LISTEN      102094/redis-server 
tcp        0      0 192.168.50.130:6379     0.0.0.0:*               LISTEN      102094/redis-server 
tcp        0      0 192.168.50.133:6379     0.0.0.0:*               LISTEN      102094/redis-server 
tcp        0      0 192.168.50.131:16379    0.0.0.0:*               LISTEN      102094/redis-server 
tcp        0      0 192.168.50.130:16379    0.0.0.0:*               LISTEN      102094/redis-server 
tcp        0      0 192.168.50.133:16379    0.0.0.0:*               LISTEN      102094/redis-server 

14、开启集群

redis-cli --cluster create 192.168.50.133:6379 192.168.50.130:6379 192.168.50.131:6379 192.168.50.134:6379 192.168.50.132:6379 192.168.50.136:6379 --cluster-replicas 1

w3xqds.md.jpg

15、验证试验结果

[root@localhost profile.d]# redis-cli -c -h 192.168.50.133
192.168.50.133:6379> set name tom
OK

[root@localhost profile.d]# redis-cli -c -h 192.168.50.131
192.168.50.131:6379> get name
"tom"

[root@localhost profile.d]# redis-cli -c -h 192.168.50.136
192.168.50.133:6379> get name
"tom"

猜你喜欢

转载自blog.csdn.net/u014042047/article/details/108500444