两种redis集群搭建方式

本文详细介绍Redis集群的搭建过程,包括单机版与集群版的安装步骤、不同版本间的集群启动方式,以及主从节点的手动切换技巧。同时,还探讨了Redis作为NoSQL数据库的优势及其在高并发场景的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

redis简介

介绍

Redis 是一个开源的内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如:

  • 字符串(strings)
  • 散列(hashes)
  • 列表(lists)
  • 集合(sets)
  • 有序集合(sorted sets)
  • 范围查询
  • 位图(Bitmaps)
  • 基数计算(HyperLogLogs)
  • 地理空间(geospatial)

redis 内置了 复制,LUA脚本, LRU驱动事件,事务和不同级别的 磁盘持久化, 并通过 Redis哨兵和Cluster提供高可用性。

由于其支持多种存储格式,对高并发读写的优秀支持以及高可用使得redis逐渐成为最广泛使用的nosql数据库.

redis的官方网站

非常建议在安装和使用之前先看一下官方文档,里面对于redis安装和使用过程有非常明确的指导,是最有价值和最有参考意义的.
如果英文好的话可以看英文文档,地址:
https://redis.io/
在这里插入图片描述

如果看英文比较吃力,也有中文社区
http://www.redis.cn/
在这里插入图片描述

redis单机版安装

  1. 检查是否安装gcc等依赖:
yum list installed | grep gcc
yum list installed | grep pcre-devel
yum list installed | grep zlib-devel
yum list installed | grep openssl-devel

如果没有安装需要安装:

yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
  1. 上传附件redis文件夹
    解压redis,安装到/app/redis目录
tar -zxvf redis-3.2.1.tar.gz -C /app
cd /app/redis-3.2.1
make 
make install PREFIX=/app/redis
  1. 启动redis
    进入redis安装目录
cd /app/redis/bin
./redis-server
  1. 查看redis进程
ps -ef|grep redis

如果有redis进程号存在证明安装成功了

redis cluster集群安装

集群安装很简单,但是不同的版本有不同的安装方式

1. 集群安装的准备工作

  1. 创建cluster

    cd /app/redis/bin
    mkdir redis_cluster
    cd redis_cluster
    mkdir 7001
    mkdir 7002
    mkdir 7003
    mkdir 7004
    mkdir 7005
    mkdir 7006
    

    注: 如果在不同的服务器下安装redis集群就将对应的cluster文件夹创建到该服务器下

  2. 修改redis.conf
    复制redis.conf文件到集群目录下

    cp /app/redis-3.2.1/redis.conf /app/redis/bin/redis_cluster/7000
    vi redis.conf
    

    修改如下:

       daemonize    yes                    
       bind  192.168.56.101                  #绑定的ip,一定要修改
       pidfile  /var/run/redis_7000.pid          #生成的唯一标识,一定要修改成不同的
       logfile   "/app/redis/redis_log/redis_7000.log"   #根据需要修改
       dir   "/app/redis_db"                 #可以不修改
       port  7000                            #根据规划修改
       cluster-enabled  yes                   #开始集群,一定要修改
       cluster-config-file  nodes_7000.conf       #自动生成配置文件,一定要修改
       cluster-node-timeout  5000            #超时时间,根据需要修改
       appendonly  yes  						#打开aof持久化策略
       # 新增配置
       masterauth "yourpassword"		#根据需要新增,如果你的redis需要密码则需要此项
       requirepass "yourpassword"       #需要密码登录
    
  3. 启动节点
    检查是否开启了防火墙:

    systemctl status firewalld
    

    如果开启了要开放对应的两个端口如:7001,17001
    例:
    添加指定需要开放的端口:

    firewall-cmd --add-port=7001/tcp --permanent
    firewall-cmd --add-port=17001/tcp --permanent
    

    重载入添加的端口:

    firewall-cmd --reload 
    

    查询指定端口是否开启成功:

    firewall-cmd --query-port=7001/tcp
    firewall-cmd --query-port=17001/tcp
    
  4. 启动redis节点
    redis-server redis_cluster/7001/redis.conf

  5. 依次配置好剩下的节点

2. redis5以前版本的集群启动

  1. 安装ruby和rubygem
  • 离线安装

    1. 下载redis.gem
      上传准备的包,解压并安装(具体版本可以在官网中找到)
      https://gems.ruby-china.com/search?utf8=%E2%9C%93&query=redis
      在这里插入图片描述
      点进去以后
      在这里插入图片描述
      在这里插入图片描述
      选择自己的版本点进去,下载
      在这里插入图片描述

    2. 下载ruby
      当执行以下语句时会提醒你当前版本所需要的ruby最低版本

      gem install redis
      
        ERROR:  Error installing redis:
        redis requires Ruby version >= 2.3.0
      

      到ruby的官方网站去下载对应的包,至少要大于提示的最低版本
      http://www.ruby-lang.org/en/downloads/

      在这里插入图片描述

    3. 下载rubygem
      https://rubygems.org/pages/download

    4. 安装
      (1)ruby

      tar -xvf ruby-2.3.0.tar.gz -C /app/
      cd /app/ruby-2.3.0/
      ./configure
      make && make install
      

      检查是否成功

      ruby -v   
      

      (2) rubygem

      tar -xvf rubygems-2.3.0.tgz -C /app/
      cd /app/rubygems-2.3.0/  
      ruby setup.rb
      

      (3) redis gem模块
      上传redis-3.3.1.gem到/app/rubygems-2.3.0/下

      gem install -l ./redis-3.3.1.gem
      
    • RVM安装
      可以参考其他博客教程
      Redis集群环境Ruby必须版本2.2以上解决

      (4)修改配置
      powershell find / -name client.rb
      找到位于此目录下的文件:lib/redis/client.rb

      vi /usr/local/lib/ruby/gems/2.3.0/gems/redis-3.3.1/lib/redis/client.rb
      

      修改password
      在这里插入图片描述
      (5) 启动集群
      进入redis源包下

      cd /app/redis-3.2.1/src
      

      创建并启动集群

      ./redis-trib.rb  create -a yourpassword --replicas  1  
      192.168.75.23:7001 192.168.75.24:7004 
      192.168.75.24:7003 192.168.75.25:7006 
      192.168.75.25:7005 192.168.75.23:7002
      

    注:

    •   -a:密码
      
    •   --replicas:副本数量(1为每个主节点有一个子节点)
      
    • 集群按照一定的规则创建主备节点,写在前面的为主节点,紧跟其后的是它的从节点
      (但存在一定的可能redis没有按照这个规则创建,后面会介绍怎么手动修改主备节点)
    • 主备节点的创建原则:
      (1) 至少需要6个节点(三主三从)
      (2) 根据redis选举机制,创建集群时尽量不让主节点都在一台机器上,或者一台机器上拥有超过半数的主节点
      (3) 主节点的从节点需要分布在其他服务器上,如:192.168.75.23:7001的从节点应该为192.168.75.24:7004

    (6)节点加入集群

    • 进入redis安装目录
      cd \app\redis\bin
      
    • 登录子节点
      redis-cli -h 192.168.75.23 -p 7001 -c
      
    • 输入命令
      auth yourpassword
      cluster meet 192.168.75.24 7004
      
      每个服务器节点都meet一遍然后等待连接成功

    (7)测试集群是否创建成功
    在redis中输入set命令,如果执行成功,集群创建成功

3. redis5及以后版本的集群启动

进入redis源包下

cd /app/redis-3.2.1/src

创建并启动集群

redis-cli -a yourpassword --cluster create --cluster-replicas 1 
10.128.52.33:7001 10.128.52.34:7004 10.128.52.34:7003 10.128.52.35:7006 10.128.52.35:7005 10.128.52.33:7002

4. 主从节点的手动切换

  • 从节点的手动切换
    查看主从节点信息
cluster slots

在这里插入图片描述
如果发现有主节点的从节点是当前服务器的,需要手动将其他服务器的从节点更改为自己的从节点.
假设:
192.168.75.23 7001的从节点为192.168.75.23 7002,现在需要将192.168.75.24 7004更改为192.168.23 7001的从节点
操作如下:
登录192.168.75.24 7004,执行命令(masterid就是上图中的节点id,这里需要输入7001的节点id)

cluster replicate masterid

依次更换好其他从节点
再次执行 cluster slots查看集群信息

  • 主节点的切换
    一般不会出现redis主节点分配到同一台服务器的情况,但是如果出现了就需要重新分配主节点.

    • 如果是刚开始创建的集群,建议删除所有的db文件和生成的节点文件,直接重新创建集群;
    • 但如果是无法停止redis服务并重新创建集群,那么就需要手动切换:
      redis没有直接更换主节点的命令,手动更新主节点非常麻烦.
    • 如果该主节点的的从节点位于其他服务器,可以手动下线该主节点,sentinel将自动将从节点变更为主节点,重启原先的主节点以后将自动变成原从节点(现主节点)的从节点
    • 如果情况更复杂一点,提供以下思路供参考:
      (1) 在需要创建主节点的服务器新建一个节点(如75.24:7007),启动,并加入到当前集群
      新增结束后执行新增主节点命令:
      redis-trib.rb add-node 192.168.75.24:7007
      //redis5以后用redis-cli
      redis-cli add-node 192.168.75.24:7007
      
      (2) 重新分配hash槽,将你要挪动的主节点的所有hash槽全部迁移到新主节点上
      redis-trib.rb reshard 192.168.75.24:7003  //可以为任意的节点 在此登录的7003只是作为客户端去访问的
      //redis5以后同样用redis-cli
      
      在这里插入图片描述原主节点有多少个就填多少个
      等待一段时间之后按照以下输入
      在这里插入图片描述
      完成后检查集群
      cluster slots
      
      分配成功后下线原来的主节点
    • 以下是我觉得写的比较清晰的文章,推荐一下,可以看看
      什么是redis的文件事件处理器
      redis是单线程还是多线程
      redis事件操作为什么选择单线程

      总结一下:
      redis是单线程模型,但是仅仅是文件事件分派时使用单线程,而在I/O操作时为了提高效率在4版本以后采用了多线程.
      redis执行事件时不需要通过多线程提高效率,因为内存操作本来就非常快,而多线程频繁切换上下文反而会影响效率. 但是redis的瓶颈在内存和io.内存不用说,但单线程的io如果网络不好导致单线程阻塞在那里,将会非常影响效率,所以在高版本中,采用多线程提高网络数据和协议的处理效率,降低网络阻塞对redis性能的影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值