隐藏

搭建redis 集群----Windows 篇(史上最细,会聊天打字的人都学会了,需要的是耐心)

发布:2022/7/31 19:55:11作者:管理员 来源:本站 浏览次数:1084

由于公司项目使用的架构不得不使用redis 集群,但公司的网络又差的让人崩溃,所以决定搭建一套本地环境,共开发使用;

本文侧重点主要在于如何搭建redis集群(cluster模式) ,看完之后,即可随意搭建N主N从的Cluster模式(最低3主)。如果不是非必须,还是建议在Linux上搭建redis 集群,windows 上某些操作还是挺受限制的,倒是不影响使用。

一、简单介绍

1,Redis集群分为三种模式,下列顺序由简单到复杂

       1,主从模式    `redis实例架构:一主多从`


       2,哨兵模式(sentinel模式) `建立在主从模式基础上,redis实例架构:一主多从多哨兵,哨兵的作用是监听主库挂掉之后,会选举一个从库提升为主库,从而做到高可用,所以哨兵redis实例建议不要与 主库实例与从库实例在一台服务器上`


       3,cluster模式,`也就是本文主要介绍的,redis实例架构:N主N从,(最低三主)比如:3主0从(3台redis 实例),3主3从(6台redis实例),本文介绍3主0从,虽然意义不大,但是够用就好,当然你可以搭建30主60从(90个redis 实例而已)`

2,redis集群的三种模式最初目标都是一致的,无论哪种模式,首先确定需要几个redis 实例,就先启动几个redis 实例,启动过程无非就是每个实例与每个实例的配置(redis.conf)不同罢了,比如:端口肯定不能相同;当然启动时必须要指定当前实例对应的配置;由于cluster模式solt槽默认总共为16383,如果选择3主的话,在创建集群的时候将16383 平均分配给这三个redis 实例,在每次添加key是,会将key进行hash 算法之后的值对16383取余,再确定存储在哪个redis 实例之上。


本文不做过多的阐述,redis详解请点击这里:https://blog.csdn.net/miss1181248983/article/details/90056960

二、实战

1, 安装包准备


ps: ruby的版本与rubygems 的版本应大致保持一致,不要相差太大,本文采用ruby 2.7 ,rubygems 2.6,是没有问题的,相差过大可能会引起下面安装 ruby连接redis驱动失败 等问题,自行下载安装包的同学请注意!

1,下载windows版本的Redis(本文使用的 redis3.2.100,截至20210804最新版)


若您选择在github上下载,也需要将redis源码下载一份,由于创建集群使用的一个ruby脚本在redis源码中(脚本的名字叫做redis-trib.rb),在redis安装包中没有。不过在百度网盘与蓝奏云的安装包里已经已经放了redis-trib.rb 脚本;

github下载地址:https://github.com/MSOpenTech/redis/tags

百度网盘:https://pan.baidu.com/s/1ewi_yAZ3xVYDafmoZnBP3A 提取码: tafn

蓝奏云:https://wwe.lanzoui.com/iwjqIsa4gle 密码:0707

2,下载 Ruby


由于创建集群需要使用一个ruby脚本(指的就是上面所说的redis源码中存放的ruby脚本),所以需要下载ruby来执行这个脚本,这也就是windows目前 创建集群的一个弊端,在linux的redis 5.0之后的版本已经支持 使用redis-cli的方式创建集群了,目前windows还不支持


官网下载:https://rubyinstaller.org/downloads/archives/

百度网盘:https://pan.baidu.com/s/1-q0tJee7QGLXBFT_UvtYTQ 提取码: 4ibz

蓝奏云:https://wwe.lanzoui.com/izWMzsa4bfi 密码:0707

3,下载 rubygems (这个工具是用来安装 《ruby连接redis 的一个驱动》)


官网下载:https://rubygems.org/pages/download

百度网盘:https://pan.baidu.com/s/1XMbTPf3Dmw-zmdu3ZCc8WA 提取码: wpzs

蓝奏云:https://wwe.lanzoui.com/iIHUjsa4b3g 密码:0707

2, 安装并启动

1,redis 安装


   将下载的redis安装包 解压到你需要安装的目录即可,便可以启动redis实例了,我的是F盘redis_cluster/bin目录,如下图:


redis 安装目录.png

2,ruby 安装


   将下载的ruby 安装包解压到你想安装的目录即可;我的F盘根目录,如下图:


ruby安装目录.png

3,rubygems 安装


   1,将下载的rubygems 安装包解压到你想安装的目录;我的F盘根目录,如下图


rubygems安装目录.png


   2,打开dos窗口(不知道如何打开,百度搜一下),进入到rubygems的安装目录下,执行 ruby setup.rb,如下图


rubygems install.png

4,安装ruby 连接的redis 驱动


   打开dos窗口,进入到ruby安装目录的bin 目录下,执行 gem install redis,出现windows 安全中心警报,允许访问即可,如下图:


image.png

5,启动全部redis 实例


本文演示创建3主架构的集群,我就只启动3个redis 实例即可,启动几个redis实例,就需要几个配置文件,你们想多创建几个也可以,大同小异;


   1, 创建3个redis.conf配置文件


ps 配置中#号开头的为注释

1、redis_6301.conf

#绑定的ip,在连接是redis 实例只能使用 该ip,连接,若不是只有自己使用,建议不配置此选项 比如:redis-cli -h 127.0.0.1

#bind 127.0.0.1

#端口号

port 6301

# 日志目录,注意自己日志放在什么目录下,本文采取的是相对路径(相对于在哪层目录下执行启动redis实例 的命令)

logfile "logs\\redis_6301.log"

# 数据目录  注意自己数据放在什么目录下,找不到该目录会启动失败

dir "data\\redis_6301\\"

# 保护模式关闭,如果在未设置密码的情况下,必须关闭保护模式,集群才可以正常使用

protected-mode no

# 访问主库时的密码

#masterauth 123456

# redis 实例连接密码

#requirepass

#开启进群

cluster-enabled yes

# 集群节点配置

cluster-config-file nodes_6301.conf

# redis 节点超时 15s

cluster-node-timeout 15000

# 开启aof 持久化

appendonly yes


2、redis_6302.conf

#bind 127.0.0.1

port 6302

logfile "logs\\redis_6302.log"

dir "data\\redis_6302\\"

protected-mode no

#masterauth 123456

#requirepass

appendonly yes

cluster-enabled yes

cluster-config-file nodes_6302.conf

cluster-node-timeout 15000


3、redis_6303.conf

#bind 127.0.0.1

port 6303

logfile "logs\\redis_6303.log"

dir "data\\redis_6303\\"

protected-mode no

#masterauth 123456

#requirepass

appendonly yes

cluster-enabled yes

cluster-config-file nodes_6303.conf

cluster-node-timeout 15000


   2、启动三个redis 实例


ps 启动之前,展示一下我当前的redis_cluster 安装目录结构,logs目录下为空,bin目录下为 上图 redis 安装目录.png ,注意观察下图中的路径:

redis根目录.png


data.png


conf.png


   打开dos 窗口,进入redis 根目录下 ,依次执行以下命令:


bin\redis-server.exe conf\redis_6301.conf


bin\redis-server.exe conf\redis_6302.conf


bin\redis-server.exe conf\redis_6303.conf


   需要打开三个 dos窗口,由于window 版本的不支持直接后台启动,启动之后且不能关闭dos 窗口,若想实现后台启动,需安装服务;本文暂不介绍安装redis 服务的启动方式。


启动.png


ps 在创建集群的时候,需要所有的redis 实例必须全部启动,并且全部可连接成功;创建集群之前每个实例与每个实例之间并没有互通;创建集群之后,才可以在存缓存的时候,经过hash 算法取模,确定存储在哪个redis实例上,在取缓存的时候,还会经过同样的算法去对应的实例上取数据;;; 别着急,下一小节贴图

6,为redis 实例创建集群


   使用 redis-trib.rb 来创建集群,若你的redis 里没有redis-trib.rb这个脚本,请在源码的src目录复制一份到redis安装目录

   无从库的情况:

   执行命令: ruby redis-trib.rb create 127.0.0.1:6301 127.0.0.1:6302 127.0.0.1:6303

   有从库的情况(下面命令6台redis 实例:3主3从,每一个主库有一个从库):

   执行命令: ruby redis-trib.rb create --replicas 1 127.0.0.1:6301 127.0.0.1:6302 127.0.0.1:6303 127.0.0.1:6304 127.0.0.1:6305 127.0.0.1:6306

   ps --replicas n 的意思是 为每个主库建立n个从库,所以说若想保证主库能够平均分配同样的从库实例,应满足:实例总数%(n+1) = 0

   创建集群成功图.png


3,结束语


   简单介绍安装redis 服务,后台启动教程

   为每一个redis 实例安装服务,即可使用 net start redis6301(服务名) 来启动


安装服务的命令:


F:/reids_cluster/bin/redis-server.exe --service-install D:/redis_cluster/conf/redis.6380.conf --service-name redis6301(服务名)


卸载服务的命令():


F:/reids_cluster/bin/redis-server.exe --service-uninstall --service-name redis6301


ps 这里有一个非常需要注意的地方,就是上面安装服务的命令 指定的配置建议使用绝对路径,以及配置里的日志路径(logfile)和数据路径(dir)都建议使用绝对路径而非相对路径,不是相对路径不可以,而是需要改变原有的目录结构,而且很容易出错,不是相对路径配置对就可以了,我尝试过,觉得有bug,最终以redis-server.exe与配置文件在同层目录下安装服务成功的,反正相对路径的方式安装服务挺坑的,若配置中不配置logfile 和data的话 就不说了,随便安装服务;还有要注意的就是,若添加了logfile,那在使用redis-server.exe 期间执行的所有命令的日志,都会在logfile 配置的日志文件中,包括上面安装启动redis 服务的日志,建议 先去掉logfile,尝试安装成功之后,在卸载掉服务,配置好日志,再去安装服务。