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 实例。


搭建集群

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-cli 来进行测试(先从之前的 /usr/local/redis/bin 中拷贝 redis-cli)。

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

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

后记

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

在实践中学习。

HochenChong

2018-04-27

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值