linux centos 7 安装redis4.0.11 3主3从集群模式

redis cluster的自我介绍:

1、redis cluster是Redis的分布式解决方案,在3.0版本推出后有效地解决了redis分布式方面的需求

2、自动将数据进行分片,每个master上放一部分数据

3、提供内置的高可用支持,部分master不可用时,还是可以继续工作的

4、支撑N个redis master node,每个master node都可以挂载多个slave node

5、高可用:因为每个master都有salve节点,那么如果mater挂掉,redis cluster这套机制,就会自动将某个slave切换成master

redis cluster的hash slot(哈希槽)算法:

1、redis cluster有固定的16384个hash slot,对每个key计算CRC16值,然后对16384取模,可以获取key对应的hash slot

2、redis cluster中每个master都会持有部分slot,比如有3个master,那么可能每个master持有5000多个hash slot

3、hash slot让node的增加和移除很简单,增加一个master,就将其他master的hash slot移动部分过去,减少一个master,就将它的hash slot移动到其他master上去

4、移动hash slot的成本是非常低的

5、客户端的api,可以对指定的数据,让他们走同一个hash slot,通过hash tag来实现

6、127.0.0.1:7000>CLUSTER ADDSLOTS 0 1 2 3 4 ... 5000  可以将槽0-5000指派给节点7000负责。

7、每个节点都会记录哪些槽指派给了自己,哪些槽指派给了其他节点。

8、客户端向节点发送键命令,节点要计算这个键属于哪个槽。

9、如果是自己负责这个槽,那么直接执行命令,如果不是,向客户端返回一个MOVED错误,指引客户端转向正确的节点。

redis cluster  多master的写入:

1、在redis cluster写入数据的时候,其实是你可以将请求发送到任意一个master上去执行

2、每个master都会计算这个key对应的CRC16值,然后对16384个hashslot取模,找到key对应的hashslot,找到hashslot对应的master

3、如果对应的master就在自己本地的话,set mykey1 v1,mykey1这个key对应的hashslot就在自己本地,那么自己就处理掉了

4、如果计算出来的hashslot在其他master上,那么就会给客户端返回一个moved error,告诉你,你得到哪个master上去执行这条写入的命令

5、什么叫做多master的写入,就是每条数据只能存在于一个master上,不同的master负责存储不同的数据,分布式的数据存储

100w条数据,5个master,每个master就负责存储20w条数据,分布式数据存储

6、默认情况下,redis cluster的核心的理念,主要是用slave做高可用的,每个master挂一两个slave,主要是做数据的热备,还有master故障时的主备切换,实现高可用的

7、redis cluster默认是不支持slave节点读或者写的,跟我们手动基于replication搭建的主从架构不一样的

8、jedis客户端,对redis cluster的读写分离支持不太好的

9、默认的话就是读和写都到master上去执行的

10、如果你要让最流行的jedis做redis cluster的读写分离的访问,那可能还得自己修改一点jedis的源码,成本比较高

11、读写分离,是为了什么,主要是因为要建立一主多从的架构,才能横向任意扩展slave node去支撑更大的读吞吐量

12、redis cluster的架构下,实际上本身master就是可以任意扩展的,你如果要支撑更大的读吞吐量,或者写吞吐量,或者数据量,都可以直接对master进行横向扩展就可以了

节点间的内部通信机制:

1、基础通信原理

(1)redis cluster节点间采取gossip协议进行通信

  跟集中式不同,不是将集群元数据(节点信息,故障,等等)集中存储在某个节点上,而是互相之间不断通信,保持整个集群所有节点的数据是完整的

  集中式:好处在于,元数据的更新和读取,时效性非常好,一旦元数据出现了变更,立即就更新到集中式的存储中,其他节点读取的时候立即就可以感知到; 不好在于,所有的元数据的跟新压力全部集中在一个地方,可能会导致元数据的存储有压力

  gossip:好处在于,元数据的更新比较分散,不是集中在一个地方,更新请求会陆陆续续,打到所有节点上去更新,有一定的延时,降低了压力; 缺点,元数据更新有延时,可能导致集群的一些操作会有一些滞后

(2)10000端口

  每个节点都有一个专门用于节点间通信的端口,就是自己提供服务的端口号+10000,比如7001,那么用于节点间通信的就是17001端口

  每隔节点每隔一段时间都会往另外几个节点发送ping消息,同时其他几点接收到ping之后返回pong

(3)交换的信息

  故障信息,节点的增加和移除,hash slot信息,等等

2、gossip协议

  gossip协议包含多种消息,包括ping,pong,meet,fail,等等

  meet: 某个节点发送meet给新加入的节点,让新节点加入集群中,然后新节点就会开始与其他节点进行通信

  redis-trib.rb add-node

  其实内部就是发送了一个gossip meet消息,给新加入的节点,通知那个节点去加入我们的集群

  ping: 每个节点都会频繁给其他节点发送ping,其中包含自己的状态还有自己维护的集群元数据,互相通过ping交换元数据

  每个节点每秒都会频繁发送ping给其他的集群,ping,频繁的互相之间交换数据,互相进行元数据的更新

  pong: 返回ping和meet,包含自己的状态和其他信息,也可以用于信息广播和更新

  fail: 某个节点判断另一个节点fail之后,就发送fail给其他节点,通知其他节点,指定的节点宕机了

 

搭建3主3从集群模式:

由于效能系统目前是分布式系统,没有进行接口认证,存在安全风险。

实现sessionId身份标识过期时间的限制,搭建redis集群:

1、环境准备:

centos 7    10.2.8.12   redis4.0.11对应端口为7000  7001  7002

centos 7    10.2.8.42   redis4.0.11对应端口为7000  7001  7002

注意 ,redis 集群使用redis-trib.rb 必须3主3从 ,也就是6个节点!

2、下载redis:

cd /usr/local/software

wget http://download.redis.io/releases/redis-4.0.11.tar.gz

tar -zxvf redis-4.0.11.tar.gz

cd redis-4.0.11

3、安装软件:

make && make install

4、配置软件

将redis-trib.rb复制到/usr/local/bin目录下

cd src

cp redis-trib.rb /usr/local/bin

 5、建立软件以及节点运行目录,复制配置文件

    cd /usr/local
    mkdir redis-cluster
    cd redis-cluster
    mkdir redis-4.0.11-node1 redis-4.0.11-node2 redis-4.0.11-node3
    cd redis-4.0.11-node1
    mkdir logs data
    cd /usr/local/software/redis-4.0.11
    cp redis.conf /usr/local/redis-cluster/redis-4.0.11-node1
    cp redis.conf /usr/local/redis-cluster/redis-4.0.11-node2
    cp redis.conf /usr/local/redis-cluster/redis-4.0.11-node3
    cd src
    cp redis.cli redis.server   /usr/local/redis-cluster/redis-4.0.11-node1
    cp redis.cli redis.server   /usr/local/redis-cluster/redis-4.0.11-node2
    cp redis.cli redis.server   /usr/local/redis-cluster/redis-4.0.11-node3

6、修改配置文件,6个节点都要修改

vim /usr/local/redis-cluster/redis-4.0.11-node1/redis.conf

=======================================================

bind 10.2.8.12/10.2.8.42 //需要改为其他节点机器可访问的ip 否则无法成功创建集群
port  7000 //端口号根据节点对应分配 7000,7001,7002
daemonize yes //redis后台运行
pidfile /usr/local/redis-cluster/redis-4.0.11-node1/redis_7000.pid //pidfile文件对应7000,7001,7002
cluster-enabled yes //开启集群
cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 15000 //请求超时时间
appendonly yes
logfile "/usr/local/redis-cluster/redis-4.0.11-node1/logs/redis_7000.log" //配置日志文件路径
dir "/usr/local/redis-cluster/redis-4.0.11-node1/data" //配置数据文件存放路径
=========================================================

7、利用redis-trib.rb创建集群

安装依赖ruby

yum -y install ruby ruby-devel rubygems rpm-build

gem install redis

查看ruby版本:ruby -v

升级ruby:curl -L get.rvm.io | bash -s stable 

 

执行红框中内容:

执行红框中内容:

然后重新下载rvm安装,成功了。安装完成:

接着,升级ruby:source环境,让rvm可用:

            source /usr/local/rvm/scripts/rvm

 

rvm list known

查看Ruby可用版本:

安装rvm版本:rvm install 2.6.3

至此,我们升级了Ruby的版本。

8、安装gem redis成功:gem install redis

9、安装rubygems成功:

yum install -y rubygems

 

系统环境:Centos7.2 x64 Minimal-1511

1、安装基本工具

[root@localhost ~]# yum -y install ruby ruby-devel rubygems rpm-build

2、查看当前版本

[root@localhost ~]# ruby -v

效果:
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]

3、安装yum源

[root@localhost ~]# yum install -y centos-release-scl-rh

4、安装指定版本的ruby

[root@localhost ~]# yum install -y rh-ruby24

5、使升级后的配置生效

scl enable rh-ruby24 bash

6、查看当前ruby版本

[root@localhost ~]# ruby -v

效果:
ruby 2.4.5p335 (2018-10-18 revision 65137) [x86_64-linux]

至此 ruby 升级至 v2.4 完毕
 

 

10、创建集群

记得在防火墙上面放行对应端口

进入cd /usr/local/bin 目录下,执行:

redis-trib.rb create --replicas 1 10.2.8.12:7000 10.2.8.12:7001 10.2.8.12:7002 10.2.8.42:7000 10.2.8.42:7001 10.2.8.42:7002
#调用 ruby 命令来进行创建集群,--replicas 1   表示主从复制比例为 1:1,即一个主节点对应一个从节点。

如果连接失败,检查防火墙等;再者,将logs和data文件先清空,重启redis。出现下图,表示集群创建成功!

一直提示  waiting for the cluster to join......

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

集群总线端口为redis客户端连接的端口 + 10000

如redis端口为6379

则集群总线端口为16379

故,所有服务器的点需要开通redis的客户端连接端口和集群总线端口

11、进行测试:

redis-cli -h 10.2.8.60 -c -p 7002  连接其中一个端点:set 数据

redis-cli -h 10.2.8.60 -c -p 7000  连接其中给一个节点:获取get 数据

 

redis 集群的重新启动

10.2.8.42   杀死全部的redis 进程

杀死10.8.7.32 所有redis集群

删除多余的文件:

删除完文件后,分别启动节点:

启动集群:报错:图中的报错信息,是因为ruby版本回到原来的版本了   由于机器重启,可能把之前的一些配置信息给冲掉了

出现上面的错误,重新升级ruby版本,安装redis即可解决。

 

 

卸载redis:

#查看进程

ps aux |grep redis

#杀掉进程

kill -9 进程号

#查看相关文件

find / -name redis

#删除文件

rm -rf 文件

====================================================================

引申阅读:

安装其中一台虚拟机时(make && make install),发现报错:怀疑是没有安装gcc

yum install gcc 安装完成后:执行 make && make install 又报错:

解决办法:

编辑src/.make-settings里的OPT,改为OPT=-O2 -march=x86-64

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值