Redis集群——Redis4.0.1版本高可用集群模式搭建(3.9.2版本适用)

从reids3.0版本以后实现redis高可用不只是通过哨兵模式实现了,redis提供了redis-cluster模式,下面比较一下两种模式

Redis集群模式比较

哨兵模式

在 redis3.0以前的版本要实现集群一般是借助哨兵 sentinel工具来监控 master节点的状态,如果 master节点异常,则会主从切换,将某一台 slave作为 master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特別是在主从切换瞬间存在访问瞬断的情况。

高可用集群模式

redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Reds集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心点,可水平扩展,据官方文档称可以线性扩展到1000点节。redis集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单。

这种模式每一个master和各自的slave相当于一个小集群,当其中的master节点挂掉后,会在剩余的slave节点选择一个升级为master节点,当这个小集群所有的节点挂掉则这个小集群不能提供服务了,也就无法访问这个集群中缓存的数据了。

根据压测,redis每秒最高可承受10w或者15w的并发,由于哨兵模式只有一个master节点,所以哨兵模式最高就是10w或者15w的承受能力,而redis-cluster集群可以有多个master节点,所以是要比哨兵模式承压能力强很多的。

现在阿里、京东这些BAT巨头都是使用第二种模式的,所以这篇文章主要介绍redis高可用集群的搭建方式。

redis高可用集群搭建

版本介绍

centos7 虚拟机三台 ip分别是192.168.1.10 192.168.1.11 192.168.12

redis版本 4.0.1 (3.9.2)也可以使用我的方法搭建是一样的

ruby版本 2.3.5

redis安装

第一步,安装gcc

yum install gcc-c++

 

第二步,安装zlib

yum -y install zlib zlib-devel

第三步,下载redis

cd /home/data
wget http://download.redis.io/releases/redis-4.0.1.tar.gz

第四步,安装redis(不需要config)

cd redis-4.0.1
make && make install (确保安装了gcc 和 zlib)

第五步,确认安装成功

[root@localhost redis-4.0.1]# redis-server -v
Redis server v=4.0.1 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=1ce1baf22cf9ba09

Redis集群搭建

由于只有三台虚拟机,redis集群需要至少要三个master节点,我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,由于节点数较多,所以搭建一个伪集群,一台机器部署两个节点,端口分别是7001到7006

第一步,在192.168.1.10机器上创建文件夹

mkdir -p /opt/redis-cluster/{7001,7004}
cp /home/data/redis-4.0.1/redis.conf /opt/redis-cluster/7001/redis-7001.conf

第二步,编辑redis-7001.conf,修改以下几个位置

vim /opt/redis-cluster/7001/redis-7001.conf
  1. daemonize yes
  2. port 7001(分别对每个机器的端口号进行设置)
  3. bind 192.168.1.10(必须要绑定当前机器的ip,这里方便redis集群定位机器,不绑定可能会出现循环查找集群节点机器的情况)
  4. dir  /opt/redis-cluster/7001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
  5. cluster-enabled yes(启动集群模式)
  6. cluster-config-file nodes-7001.conf(这里700x最好和port对应上) 集群内部配置文件,改掉端口号 
  7. cluster-node-timeout 15000 节点超时时间
  8. appendonly yes 写操作写日志

第三步,把这个文件复制到7004下面并把端口改为7004

cp /opt/redis-cluster/7001/redis-7001.conf /opt/redis-cluster/7004/redis-7004.conf

可以使用批量修改模式 

:%s/源字符串/目的字符串/g

:%s/7001/7004/g
:wq!

 

第四步,同样的在192.168.1.11和192.168.1.12两台机器重复上面的操作 ,其中192.168.1.11的端口为7002和7005,192.168.1.12的端口为7003和7006

第五步,接下来分别启动三台机器的每个节点

cd /home/data/redis-4.0.1
./redis-server /opt/redis-cluster/7001/redis-7001.conf
./redis-server /opt/redis-cluster/7004/redis-7004.conf

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

cd /home/data/redis-4.0.1
./redis-server /opt/redis-cluster/7002/redis-7002.conf
./redis-server /opt/redis-cluster/7005/redis-7005.conf

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

cd /home/data/redis-4.0.1
./redis-server /opt/redis-cluster/7003/redis-7003.conf
./redis-server /opt/redis-cluster/7006/redis-7006.conf

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

第六步redis-trib.rb环境准备(该文件存在于redis-4.0.1/src/目录中)    //只需要在其中一台上执行此步骤!!

redis-trib.rb是采用Ruby实现的Redis集群管理工具。内部通过Cluster相关命令帮助我们简化集群创建、检查、槽迁移和均衡等常见操作,使用之前需要安装Ruby依赖环境。

我选择在10的机器上安装

第七步,安装ruby

cd /home/data/
wget http://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.5.tar.gz
tar -zxvf  ruby-2.3.5.tar.gz
cd ruby-2.3.5
./configure  --prefix=/opt/ruby
make && make install
ln -s /opt/ruby/bin/ruby /usr/bin/ruby
ln -s /opt/ruby/bin/gem /usr/bin/gem

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

检查是否安装成功

[root@localhost 7001]# ruby -v
ruby 2.3.5p376 (2017-09-14 revision 59905) [x86_64-linux]

第八步,安装rubygem redis依赖    

wget http://rubygems.org/downloads/redis-3.3.0.gem

gem install -l redis-3.3.0.gem

如果安装失败参考:https://blog.csdn.net/feinifi/article/details/78251486

检查redis-trib.rb可用性

第九步,开放端口

10服务器开放7001 17001 7004 17004 端口

11服务器开放7002 17002 7005 17005 端口

12服务器开放7003 17003 7005 17005 端口

第十步,创建集群

cd /home/data/redis-4.0.1/src
./redis-trib.rb create --replicas 1 192.168.1.10:7001 192.168.1.11:7002 192.168.1.12:7003 192.168.1.10:7004 192.168.1.11:7005 192.168.1.12:7006

说明:--replicas参数指定集群中每个主节点配备几个从节点,这里设置为1,没个主节点只有一个从节点。

这里因为测试,只用了3台机器,如果部署节点使用不同的IP地址,redis-trib-rb会尽可能保证主从节点不分配在同一台机器下,因此会重新排序节点表顺序。节点列表顺序用于确定主从角色,先主节点之后是从节点。创建过程中首先会给出主从节点角色分配的计划,如下图:

集群把7001 7002 7003 当作主节点 7005 7004 7006分别是它们的从节点

(因为redis集群尽量使主从节点不在同一台机器上,所以这里7005是7001的从节点,7004是7002的从节点)

填写yes

最后的输出报告说明:16384个槽全部被分配完,集群创建成功。

如果你卡在join一直等待请检查是否开放了17001、17002.。。端口

redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口

集群总线端口为redis客户端连接的端口 + 10000
如redis端口为6379
则集群总线端口为16379
故,所有服务器的点需要开通redis的客户端连接端口和集群总线端口
注意:iptables 放开,如果有安全组,也要放开这两个端口
另外,你必须保证每个节点无数据(即刚才配置的7001、7002等文件夹下除了redis配置文件的其他文件),否则集群节点拒绝连接。

第十一步,完整性检查

任意一个节点都行

./redis-trib.rb check 192.168.1.10:7001

第十二步,连接一个节点测试

cd /home/data/redis-4.0.1
./redis-cli -c -h 192.168.1.10 -p 7001 (-c 表示集群模式 -h 表示主机 -p表示端口)

发现中间集群通过算法负载均衡到到指定的节点。

cluster info 查看集群信息 cluster nodes 查看节点信息

通过cluster nodes命令发现7005是7001的从节点,7004是7002的从节点,7006是7003的从节点,现在停掉7001主节点,通过命令redis-cli -c -h 192.168.1.10 -p 7001 shutdown或者通过ps -ef | grep redis 查到进程号然后kill 进程号的方式

redis-cli -c -h 192.168.1.10 -p 7001 shutdown

通过ps -ef | grep redis查看确实停掉了

重新连接一个节点查看集群信息

redis-cli -c -h 192.168.1.10 -p 7004

发现7001的节点多了一个fail,现在他的从节点7005变成了主节点

现在看第一行

bec5fc998979d98a6f591aff25b01de2117efa99是redis集群分配给7006节点的id,slave表示它是一个从节点,后面的字符串

4ab388e3ed4e1399d6b1b412aec670d60f56383a是它的主节点的id,也就是7003节点,在每个master节点最后有一个分片

7005 是 0-5460 7002是5461-10922 7003是10923-16383

现在重启7001节点

redis-server /opt/redis-cluster/7001/redis-7001.conf

再次连接一个集群节点查看节点信息

redis-cli -c -h 192.168.1.10 -p 7004

发现7001节点已经自动加入集群了,但是是作为一个从节点加入的,是7005的从节点。

Redis集群重启

关闭节点

可以通过kill命令关闭或者/home/data/redis-4.0.1/redis-cli -c -p 192.168.1.0 -p 7001 shutdown逐个关闭

1、先删除每个节点的如下文件

2、启动每个节点

3、创建集群

cd /home/data/redis-4.0.1/src
./redis-trib.rb create --replicas 1 192.168.1.10:7001 192.168.1.11:7002 192.168.1.12:7003 192.168.1.10:7004 192.168.1.11:7005 192.168.1.12:7006

关于redis-trib.rb的命令详解可以参考https://blog.csdn.net/qq_37595946/article/details/78069298,这里还有详细介绍创建集群时的具体过程。

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值