- 多个redis节点网络互联,数据共享
- 全部的节点都是一主一从(能够是多个从),其中从不提供服务,仅做为备用
- 不支持同时处理多个键(如mset/mget),由于redis须要把键均匀分布在各个节点上,并发量很高的状况下同时建立键值会下降性能并致使不可预测的行为。
- 支持在线增长、删除节点
- 客户端能够连任何一个主节点进行读写
唉过年过崩了node
大白话:linux
数据量很大,多台机器组成大集群,解决存储空间、查询速度负载高的瓶颈问题,Redis 上面的数据是共享式的,也就是A server有的B server不必定有。相似于Raid 5,写入数据多是A磁盘 多是B磁盘。你能够正常读取,但真正的存储位置须要查询nginx
master(IP:192.168.8.131)启动三个端口:git
[root@root ~]# vim /etc/redis_7000.conf port 7000 bind 192.168.8.131 daemonize yes pidfile /var/run/redis_7000.pid dir /data/redis_data/7000 cluster-enabled yes ##开启cluster功能 cluster-config-file nodes_7000.conf ##该配置文件能够在dir目录下自动生成 cluster-node-timeout 10100 appendonly yes [root@root ~]# vim /etc/redis_7002.conf port 7002 bind 192.168.8.131 daemonize yes pidfile /var/run/redis_7002.pid dir /data/redis_data/7002 cluster-enabled yes cluster-config-file nodes_7002.conf cluster-node-timeout 10100 appendonly yes [root@root ~]# vim /etc/redis_7004.conf port 7004 bind 192.168.8.131 daemonize yes pidfile /var/run/redis_7004.pid dir /data/redis_data/7004 cluster-enabled yes cluster-config-file nodes_7004.conf cluster-node-timeout 10100 appendonly yes 建立各配置文件对应的数据库目录: [root@root ~]# mkdir /data/redis_data [root@root ~]# mkdir /data/redis_data/{7000,7002,7004} 依次启动Redis服务7000,7002,7004: [root@root ~]# redis-server /etc/redis_7000.conf 启动完成后,结果以下: [root@root ~]# ps aux |grep redis root 14423 0.6 0.5 145248 2640 ? Ssl 19:35 0:00 redis-server 192.168.8.131:7000 [cluster] root 14438 3.5 0.5 145248 2636 ? Ssl 19:37 0:00 redis-server 192.168.8.131:7002 [cluster] root 14443 13.8 0.5 145248 2636 ? Ssl 19:37 0:01 redis-server 192.168.8.131:7004 [cluster]
slave(IP:192.168.8.132)启动三个端口:github
[root@root ~]# vim /etc/redis_7001.conf port 7001 bind 192.168.8.132 daemonize yes pidfile /var/run/redis_7001.pid dir /data/redis_data/7001 cluster-enabled yes cluster-config-file nodes_7001.conf cluster-node-timeout 10100 appendonly yes [root@root ~]# vim /etc/redis_7003.conf port 7003 bind 192.168.8.132 daemonize yes pidfile /var/run/redis_7003.pid dir /data/redis_data/7003 cluster-enabled yes cluster-config-file nodes_7003.conf cluster-node-timeout 10100 appendonly yes [root@root ~]# vim /etc/redis_7005.conf port 7005 bind 192.168.8.132 daemonize yes pidfile /var/run/redis_7005.pid dir /data/redis_data/7005 cluster-enabled yes cluster-config-file nodes_7005.conf cluster-node-timeout 10100 appendonly yes 建立各配置文件对应的数据库目录: [root@root ~]# mkdir /data/redis_data [root@root ~]# mkdir /data/redis_data/{7001,7003,7005} 依次启动Redis服务7001,7003,7005: [root@root ~]# redis-server /etc/redis_7001.conf 启动完成后结果以下: [root@root ~]# ps aux |grep redis root 5971 0.2 0.5 145248 2632 ? Ssl 19:41 0:00 redis-server 192.168.8.132:7001 [cluster] root 5976 0.1 0.5 145248 2636 ? Ssl 19:41 0:00 redis-server 192.168.8.132:7003 [cluster] root 5981 0.1 0.5 145248 2632 ? Ssl 19:41 0:00 redis-server 192.168.8.132:7005 [cluster]
安装ruby2.2 (只须要一台机器上运行就是master):redis
Redis集群须要ruby的支持,须要先安装ruby(Ruby只需在一台机器上运行)。Redis4.0须要使用Ruby2.2,安装方法以下(由于本机自带的是2.0版本的ruby,因此须要使用以下方法把源码包包制做成yum安装包,而后借助yum工具安装ruby2.2———升级ruby版本)数据库
安装yum开发工具组: [root@root ~]# yum -y groupinstall "Development Tools" 升级库文件: [root@root ~]# yum -y install gdbm-devel libdb4-devel libffi-devel libyaml libyaml-devel ncurses-devel openssl-devel readline-devel tcl-devel [root@root ~]# cd /root/ 建立制做rpm包的目录: [root@root ~]# mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} 下载Ruby的源码包: [root@root ~]# wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz -P rpmbuild/SOURCES 下载specs文件,用于制做rpm包: [root@root ~]# wget https://raw.githubusercontent.com/tjinjin/automate-ruby-rpm/master/ruby22x.spec -P rpmbuild/SPECS 制做rpm包: [root@root ~]# rpmbuild -bb rpmbuild/SPECS/ruby22x.spec ##此处须要耐心等待… 安装Ruby2.2: [root@root ~]# yum -y localinstall rpmbuild/RPMS/x86_64/ruby-2.2.3-1.el7.centos.x86_64.rpm [root@root ~]# ruby -v ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]
配置集群就一步:vim
安装Redis配置集群的工具: [root@root ~]# gem install redis 将命令redis-trib.rb加入环境变量目录下:(注意本身的redis版本) [root@root ~]# cp /usr/local/src/redis-4.0.2/src/redis-trib.rb /usr/bin/ [root@root ~]# redis-trib.rb create --replicas 1 192.168.8.131:7000 192.168.8.131:7002 192.168.8.131:7004 192.168.8.132:7001 192.168.8.132:7003 192.168.8.132:7005 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. ##注意:redis-trib.rb create --replicas 1 表示一个master对应几个slave,此处的参数“1”表示master和slave一一对应 ##而后yes就把主从分好了,双OK表明成功 ##这里集群配置完成,后面就能够开始操做了
由于Redis集群是分布式结构,登陆任何一个端口均可新建等操做centos
链接: [root@root ~]# redis-cli -c -h 192.168.8.131 -p 7000 ##-c:=cluster,表示以集群方式链接 建立数据: 192.168.8.131:7000> set cluster1 adaitest -> Redirected to slot [8483] located at 192.168.8.132:7001 OK ##该操做会被重定向到192.168.8.132:7001 192.168.8.132:7001> set cluster2 adai222 -> Redirected to slot [4416] located at 192.168.8.131:7000 OK 192.168.8.131:7000> set cluster3 adaitest333 OK 192.168.8.131:7000> set cluster4 adai2323 -> Redirected to slot [12678] located at 192.168.8.131:7002 OK 查看数据: 192.168.8.131:7002> get cluster1 -> Redirected to slot [8483] located at 192.168.8.132:7001 "adaitest" 192.168.8.132:7001> get cluster2 -> Redirected to slot [4416] located at 192.168.8.131:7000 "adai222" 192.168.8.131:7000> get cluster3 "adaitest333" 192.168.8.131:7000> get cluster4 -> Redirected to slot [12678] located at 192.168.8.131:7002 "adai2323"
集群相关操做ruby
检测集群状态,任意一个节点均可以: [root@root ~]# redis-trib.rb check 192.168.8.131:7000 列出节点:(其中是主是从一目了然) [root@root ~]# redis-cli -c -h 192.168.8.131 -p 7000 192.168.8.131:7000> cluster nodes ☆☆☆☆☆☆ 查看集群信息:☆☆☆☆☆☆ 192.168.8.131:7000> cluster info 添加节点(执行该操做前先在slave建立redis_7007.conf并启动): 192.168.8.131:7000> cluster meet 192.168.8.132 7007 OK 192.168.8.131:7000> cluster nodes 52e4b3484838be21fcf53b84198e362efd54bd39 192.168.8.132:7007@17007 master - 0 1507035952000 0 connected ##此时7007以master身份存在 再添加一个节点: 192.168.8.131:7000> cluster meet 192.168.8.131 7006 OK 192.168.8.131:7000> cluster nodes 677f27fb209ce45c823126fe38dbcf0b9fc43d93 192.168.8.131:7006@17006 master - 0 1507036137147 0 connected ##一样是以master身份存在 ##即,使用以上方式添加的新节点都是以master身份存在!
把当前的节点设置为指定节点的从
先更换到要设置的节点: [root@root ~]# redis-cli -c -h 192.168.8.131 -p 7006 设定为7007的从: 192.168.8.131:7006> cluster replicate 52e4b3484838be21fcf53b84198e362efd54bd39(7007的inode) OK 查看: 192.168.8.131:7006> cluster nodes 52e4b3484838be21fcf53b84198e362efd54bd39 192.168.8.132:7007@17007 master - 0 1507036429244 7 connected 677f27fb209ce45c823126fe38dbcf0b9fc43d93 192.168.8.131:7006@17006 myself,slave 52e4b3484838be21fcf53b84198e362efd54bd39 0 1507036429000 0 connected #对比node号,即7006为7007的从 移除某节点: 192.168.8.131:7006> cluster forget 52e4b3484838be21fcf53b84198e362efd54bd39 (error) ERR Can't forget my master! 192.168.8.131:7006> cluster forget 677f27fb209ce45c823126fe38dbcf0b9fc43d93 (error) ERR I tried hard but I can't forget myself... ## 即,不能移除master节点和当前所在节点 [root@adailinux ~]# redis-cli -c -h 192.168.8.131 -p 7000 192.168.8.131:7000> cluster forget 677f27fb209ce45c823126fe38dbcf0b9fc43d93 OK 查看: 192.168.8.131:7000> cluster nodes #此时7006已经不存在了。 保存当前配置: 192.168.8.131:7000> CLUSTER SAVECONFIG OK