Redis 集群搭建

Redis集群搭建前言最近通过看视频学习了一下Redis,前天使用CentOS7配置了一下Redis4.0.9单机版(相关链接:CentOS7配置Redis4.0.9),今天则通过之前的笔记,视频以及redis官网上集群搭建的教程(https://redis.io/topics/cluster-tutorial)的资料来搭建一下Redis集群。…

大家好,又见面了,我是你们的朋友全栈君。

Redis 集群搭建

前言

最近通过看视频学习了一下 Redis,前天使用 CentOS 7 配置了一下 Redis 4.0.9 单机版(相关链接:CentOS 7 配置 Redis 4.0.9),今天则通过之前的笔记,视频以及 redis 官网上集群搭建的教程(https://redis.io/topics/cluster-tutorial) 的资料来搭建一下 Redis 集群。

本次则是在上次 CentOS 7 配置 Redis 4.0.9 的环境下继续搭建集群


配置运行在集群模式的 Redis 实例

最少选项的集群的配置文件:

# 端口号
port 7000
# 开启集群模式
cluster-enabled yes
# 设置保存节点配置文件的路径,默认值为 nodes.conf。节点配置文件无须人为修改
cluster-config-file nodes.conf
# 设置节点超时时间
cluster-node-timeout 5000
# 设置是否开启 aof 模式,对数据库完整性要求比较高可以开启
appendonly no

为了外部访问,需要配置一下 IP 地址以及关闭防火墙。例如 bind 192.168.229.162来绑定 IP 地址。这里我以我运行 Redis 实例的虚拟机的 IP 地址为例。CentOS 7 停止防火墙:systemctl stop firewalld.service;禁止防火墙开机启动:systemctl disable firewalld.service

Redis 持久化方案有两种,默认开启的是 rdb 模式,定期把内存中的数据保存到磁盘;另一种则是 aof 模式,会频繁进行保存,会影响性能。自己练手时,推荐使用 rdb 模式即可。

顺带记得设置一下后端启动,代码如下:

# 设置为后端启动
daemonize yes

我的配置如下:

# IP
bind 192.168.229.162
# 端口号
port 7001
# 开启集群模式
cluster-enabled yes
# 设置保存节点配置文件的路径,默认值为 nodes.conf。节点配置文件无须人为修改
cluster-config-file nodes.conf
# 设置节点超时时间
cluster-node-timeout 5000
# 设置是否开启 aof 模式,对数据库完整性要求比较高可以开启
appendonly no
# 设置为后端启动
daemonize yes

配置集群前期准备

集群正常运行至少需要 3个节点,不过刚开始使用集群功能时,推荐使用 6个节点:3个主节点,3个从节点。

集群正常运行至少需要 3个节点,是因为 Redis 集群有个投票机制(容错机制),来判断某个节点是否挂了,当超过半数认为该节点挂了,则认定该节点挂了,此时则切换到该节点的从节点。

如上,若一个节点挂了,找不到从节点,无法切换,则数据不完整,则整个 Redis 集群就挂了。故为了实现高可用,每个节点至少配置一个从节点。

在 /usr/local 下创建文件夹 redis-cluster-test。使用命令:mkdir redis-cluster-test。然后在 redis-cluster-test 下创建六个以端口号为名字的子目录

cd redis-cluster-test
mkdir 7000 7001 7002 7003 7004 7005

在这六个子目录之中,各创建一个 redis.conf 配置文件,配置内容为上面最少选项的集群的配置文件,端口改为对应的目录名字。或者是从 Redis 源码里面拷贝一份 redis.conf 配置文件出来并修改对应的参数。

将编译好的 redis-server(从上回配置单机版 redis 的文件夹下拷贝,路径为 /usr/local/redis/bin 下) 可执行文件复制到 redis-cluster-test 文件夹下,使用以下命令,分别开启实例:

cd 7000
../redis-server ./redis.conf

因为 nodes.conf 文件不存在, 所以每个节点都为它自身指定了一个新的 ID

当然,我们可以写一个脚本文件,来一键开启 6个 Redis 实例。在 redis-cluster-test 文件夹下,运行命令:vi start-all.sh,会自动在 redis-cluster-test 文件夹下生成一个 start-all.sh 文件,在里面输入以下代码:

cd 7000
../redis-server ./redis.conf
cd ..
cd 7001
../redis-server ./redis.conf
cd ..
cd 7002
../redis-server ./redis.conf
cd ..
cd 7003
../redis-server ./redis.conf
cd ..
cd 7004
../redis-server ./redis.conf
cd ..
cd 7005
../redis-server ./redis.conf
cd ..

然后保存退出即可(按 ESC 键后,输入:wq,回车即可),保存后对该脚本文件进行授权:chmod u+x start-all.sh。(同理,我们也可以配置一个关闭 redis 服务的脚本,先从之前的 /usr/local/redis/bin 中拷贝 redis-cli 来关闭,参考之前配置单机版 redis 的文章)

运行命令:./start-all.sh,此时,我们通过查看进程(命令:ps aux|grep redis),可以看到运行着 6个 Redis 实例。

Redis 集群搭建


搭建集群

Ruby 环境

官方默认提供了 Redis 集群命令行工具 redis-trib.rb。redis-trib.rb 位于 Redis 源码的 src 文件夹中, 它是一个 Ruby 程序, 这个程序通过向实例发送特殊命令来完成创建新集群, 检查集群, 或者对集群进行重新分片(reshared)等工作。

为了方便之后的使用,我们可以使用命令将它复制到 redis-cluster-test 文件夹之中。进入 Redis (之前,我们是将源码从本地上传到虚拟机中的 root 目录下,路径为 /root/redis-4.0.9)源码的 src 文件夹后,使用命令:cp redis-trib.rb /usr/local/redis-cluster-test

因为这是个 Ruby 程序,所以我们需要先配置一下 Ruby 环境和 redis-trib.rb 脚本运行使用的包(redis-X.X.X.gem,官方地址:https://rubygems.org/gems/redis) 。这之间走了一些弯路,这里就不细讲了。

进入 /usr/local/redis-cluster-test,通过命令配置 Redis 集群:

./redis-trib.rb create --replicas 1 192.168.229.162:7000 192.168.229.162:7001 192.168.229.162:7002 192.168.229.162:7003 192.168.229.162:7004 192.168.229.162:7005

注:参数 –replicas 1 表示为集群中的每个主节点创建一个从节点,之后跟着是这个集群实例的地址列表,先是主节点,然后是从节点。

其中会让你确认配置是否有问题,输入 yes 即可。redis-trib.rb 就会配置好一切,让各个节点之间相互通信。

Redis 集群搭建


测试集群

可以使用 redis 默认提供的客户端 —— redis-cli 来进行测试(先从之前的 /usr/local/redis/bin 中拷贝 redis-cli)。

连接集群:./redis-cli -c -h 192.168.229.162 -p 7000
注:这与平时直接连接 redis 实例有所不同,需要加上 -c 这个参数,代表连接的是 Redis 集群
连接成功后,试着往里面添加一些数据,如下图:

Redis 集群搭建

如上图,在添加数据的时候,会对每个 key 进行 CRC16 校验后对 16384 取模来决定放在哪个哈希槽,然后存储到对应的节点上。到此 Redis 集群就搭建完成了。

后记

目前 Redis 集群的客户端使用最多的是 Java 客户端 —— Jedis。之后也会对 Jedis 的使用做一些笔记。

在实践中学习。

HochenChong

2018-04-27

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126136.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 51单片机流水灯的三种实现方法「建议收藏」

    51单片机流水灯的三种实现方法「建议收藏」首先,介绍下原理。下图为主控芯片和流水灯模块的原理图。流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯。相反,如果要LED灯熄灭,就要把P1口的电平变为高电平即可。要实现流水灯功能,我们只要将LED1~LED8依次点亮、熄灭,依始类推,8只LED变会一亮一暗的做流水灯了。              实现8个LED流水灯程序用中

    2022年5月30日
    52
  • django 异常处理_error for wireless request

    django 异常处理_error for wireless request前言在讲解如何解决migrate报错原因前,我们先要了解migrate做了什么事情,migrate:将新生成的迁移脚本。映射到数据库中。创建新的表或者修改表的结构。问题1:migrate怎么判断哪

    2022年7月28日
    9
  • 相关网站_如何制作一个网站

    相关网站_如何制作一个网站一、职称申报无锡市职称申报系统二、一建报名中国人事考试网三、无锡人事考试网无锡人事考试网四、社保卡江苏人力资源和社会保障网江苏社保卡服务网五、个人公积金查询公积金查询入口六、个人社保查询个人社保查询入口

    2022年8月23日
    6
  • kthreaddi挖矿病毒

    kthreaddi挖矿病毒今天上服务器一查看cpu被占满了,使用了top命令一看,好家伙看到kthreaddi进程占用cpu300%老子气坏了,没碰见过,什么是kthreaddi白百度了一圈,原来【kthreaddi】是挖矿病毒不断的写入定时任务执行操作先是top命令查占用进程PID29221直接杀死但是过一段时间又会自动的建立进程使用查看定时任务命令crontab-e果然有一条定时任务,更加可气的是找不到这个文件解决办法:删除这条命名,然后又top命名kill-9PID杀死进…

    2022年5月10日
    60
  • 初识AvalonDock

    初识AvalonDock前些时间由于工作原因接触了AvalonDock,从中受益匪浅,不敢独享,在此与大家共勉。AvalonDock是WPF做的一个类似VisualStudio中的拖拽功能的控件。想要根据AvalonDock开发WPF项目,首先要下载AvalonDock.dll和AvalonDock.Themes.Aero.dll。 新建WPF项目,将下载的dll文件引用到项目中,在工具箱中引用该dll

    2022年7月20日
    15
  • 如何用pycharm编译器打包,最简单的方法[通俗易懂]

    如何用pycharm编译器打包,最简单的方法[通俗易懂]如何用pycharm编译器打包exe,最简单的方法一、找到pycharm上边的位置1.执行之前要确保下载了pyinstaller2.我的是加过了,点击加号二、步骤二1.找到相关位置program:pyinstaller.exe位置进行操作,可以找到你的相关路径2.生成exe代码如下(示例):2.读入数据在你的pycharm写的代码的文件夹里边找到dist,就在里边:生成exe…

    2022年8月29日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号