Time : 20181019,经过这篇文章掌握 centos7 下redis的集群搭建 node
经过一台服务器进行Redis集群搭建,方式是经过不一样的TCP端口启动实例,组成集群
1. redis-3.2.8 2. CentOS7 3. redis3 以上版本才支持集群搭建,须要使用Rube
1. 将 redis 上传到服务器的目录 cd /home/softwares/redis tar -zxvf redis-3.2.8 : 解压到当前目录 执行 make;make install 2. 建立 redis-cluster,并将 redis安装目录下的redis.conf 复制到 redis-cluster下 3. 建立 redis-7000.conf...redis-7006.conf 4. 修改redis-xxx.conf # 配置端口 7001-7006 port 7006 # ip 默认为127.0.0.1,须要改成其余机器能够访问的节点ip,不然建立的时候没法访问对应的端口,致使建立集群失败 bind 172.16.1.131 # redis 后台运行 daemonize yes # 开启集群 cluster-enabled yes # pidfile pid对应 7001-7006 pidfile ./redis-7006.pid # 集群的配置,首次启动会建立 cluster-config-file nodes_7006.conf # 集群失效时间默认为15S可自行配置 cluster-node-timeout 15000 # aof 日志,有须要就开启它会每次写操做会记录一条日志 appendonly yes 5. 启动 redis-server ../redis-cluster/redis-7001.conf redis-server ../redis-cluster/redis-7002.conf redis-server ../redis-cluster/redis-7003.conf redis-server ../redis-cluster/redis-7004.conf redis-server ../redis-cluster/redis-7005.conf redis-server ../redis-cluster/redis-7006.conf 6. 检查 ps -ef|grep redis 此IP的六个redis启动成功;
1. Redis3以上的集群是经过Redis安装目录下的bin/redis-trib.rb脚本搭建。 2. 这个脚本是ruby 写的,尝试运行 Ruby redis-trib.rb 3. 打印 Usage: redis-trib <command> <options> <arguments ...> 说明执行成功能够跳过 Ruby安装
1. yum安装ruby和依赖的包。 yum -y install ruby ruby-devel rubygems rpm-build 2. 使用 gem 这个命令安装redis接口 : gem是Ruby的二进制工具包 gem install redis 3. ERROR error installing redis; 须要升级Ruby版本 4. 升级 Ruby 安装 rvm :# curl -L get.rvm.io | bash -s stable 若安装失败 提示 : gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 须要先运行 gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 再安装 rvm 5. source环境,让rvm可用。 source /usr/local/rvm/scripts/rvm 6. 查看 Ruby 版本 # rvm list known # MRI Rubies [ruby-]1.8.6[-p420] [ruby-]1.8.7[-head] # security released on head [ruby-]1.9.1[-p431] [ruby-]1.9.2[-p330] [ruby-]1.9.3[-p551] [ruby-]2.0.0[-p648] [ruby-]2.1[.10] [ruby-]2.2[.7] [ruby-]2.3[.4] [ruby-]2.4[.1] 7. 升级Ruby rvm install 最新版本(2.4.1) 8. 安装gem redis接口,成功! gem install redis 9. 安装rubygems,成功! yum install -y rubygems
1. 有了Ruby执行环境,能够开始将以前的6个实例组建成集群了。 ruby ./redis-trib.rb create --replicas 1 172.16.1.131:7001 172.16.1.131:7002 172.16.1.131:7003 172.16.1.131:7004 172.16.1.131:7005 172.16.1.131:7006 --replicas 1表示为集群的master节点建立1个副本。那么6个实例里,有三个master,有三个是slave,后面跟上6个实例就行了,形式就是ip:port 2. 能够看到3个master和对应的replica已经创建起来
1. 登陆集群客户端,-c标识以集群方式登陆 : ./bin/redis-cli -h 10.93.84.53 -p 7000 -c 2. 查看集群状态 : cluster info
redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每一个节点都是平等的关系,都是对等的,每一个节点都保存各自的数据和整个集群的状态。每一个节点都和其余全部节点链接,并且这些链接保持活跃,这样就保证了咱们只须要链接集群中的任意一个节点,就能够获取到其余节点的数据。 Redis集群没有并使用传统的一致性哈希来分配数据,而是采用另一种叫作哈希槽(hash slot)的方式来分配的,一致性哈希对向集群中新增和删除实例的支持很好,可是哈希槽对向集群新增实例或者删除实例的话,须要额外的操做,须要手动的将slot从新平均的分配到新集群的实例中。 redis cluster 默认分配了 16384 个slot,当咱们set一个key时,会用CRC16算法来取模获得所属的slot,而后将这个key分到哈希槽区间的节点上,具体算法就是:CRC16(key)%16384。 Redis 集群会把数据存在一个master节点,而后在这个master和其对应的salve之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的master节点获取数据。只有当一个master 挂掉以后,才会启动一个对应的salve节点,充当master。 须要注意的是:必需要3个或以上的主节点,不然在建立集群时会失败,而且当存活的主节点数小于总节点数的一半时,整个集群就没法提供服务了。
前几回都是一个一个 redis 服务的启动 : 每次都是 redis-server ../redis-7001.conf .... 忽然想到编写一个简单的 Shell 脚本 touch redis.sh #! /bin/bash # 启动 redis ./../redis-3.2.8/src/redis-server redis-7001.conf ./../redis-3.2.8/src/redis-server redis-7002.conf ./../redis-3.2.8/src/redis-server redis-7003.conf ./../redis-3.2.8/src/redis-server redis-7004.conf ./../redis-3.2.8/src/redis-server redis-7005.conf ./../redis-3.2.8/src/redis-server redis-7006.conf # 启动 集群 ruby ./../redis-3.2.8/src/redis-trib.rb create --replicas 1 172.16.1.131:7001 172.16.1.131:7002 172.16.1.131:7003 172.16.1.131:7004 172.16.1.131:7005 172.16.1.131:7006 赋予执行权限 : chmod u+x redis.sh 进行执行 ./redis.sh 启动集群