生产环境下redis基本上都是用的集群,毕竟单机版随时都可能挂掉,风险太大。这里我就来搭建一个基本的redis集群,功能够用但是还需要完善,当然如果有钱可以去阿里云买云数据库Redis版的,那个还是很不错的。
一、redis概述
1.1、目前redis支持的cluster特性:
1):节点自动发现。
2):slave->master 选举,集群容错。
3):Hot resharding:在线分片。
4):进群管理:cluster xxx。
5):基于配置(nodes-port.conf)的集群管理。
6):ASK 转向/MOVED 转向机制。
1.2、redis cluster 架构
1)redis-cluster架构图
架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效。
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value。
2) redis-cluster选举:容错
(1)领着选举过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉。
(2):什么时候整个集群不可用(cluster_state:fail),当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误
a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成进群的slot映射[0-16383]不完成时进入fail状态。
b:如果进群超过半数以上master挂掉,无论是否有slave集群进入fail状态。
这里概述的可以学习下,也是从别处看到的,写下来以后自己也可以看看。
二、redis集群搭建
2.1、下载和解压redis,这里安装redis-3.2.1版本的,3.0以下版本不支持集群。
[root@localhost ~]# cd /usr/local [root@localhost local]# mkdir redis-cluster [root@localhost local]# cd redis-cluster/ [root@localhost redis-cluster]# wget http://download.redis.io/releases/redis-3.2.1.tar.gz [root@localhost redis-cluster]# tar -zxvf redis-3.2.1.tar.gz
2.2、编译安装
[root@localhost redis-cluster]# cd redis-3.2.1 [root@localhost redis-3.2.1]# make && make install
2.3、创建6个节点文件夹,每个文件夹我们就以每个端口号命名,方便管理
[root@localhost redis-3.2.1]# cd .. [root@localhost redis-cluster]# mkdir 6379 6380 6381 6382 6383 6384
2.4、这里不需要复制整个redis,只复制redis.conf到对应文件夹
[root@localhost redis-cluster]# cp redis-3.2.1/redis.conf 6379/ [root@localhost redis-cluster]# cp redis-3.2.1/redis.conf 6380/ [root@localhost redis-cluster]# cp redis-3.2.1/redis.conf 6381/ [root@localhost redis-cluster]# cp redis-3.2.1/redis.conf 6382/ [root@localhost redis-cluster]# cp redis-3.2.1/redis.conf 6383/ [root@localhost redis-cluster]# cp redis-3.2.1/redis.conf 6384/
2.5、修改每个redis.conf,这里我就拿6379的来做演示,其他的一样操作就好了
[root@localhost redis-cluster]# vi 6379/redis.conf
修改的内容和下面一样:
daemonize yes //设置yes,redis可以后台运行 pidfile /var/run/redis_6379.pid bind 0.0.0.0 //原本绑定127.0.0.1,测试版本可以改成* cluster-enabled yes //开启集群,把注释#去掉 port 6379 //端口号 cluster-config-file nodes_6379.conf //集群的配置,配置文件首次启动自动生成 cluster-node-timeout 5000 //请求超时,设置5秒够了 dir ./6379/ //方便管理 protected-mode no //改为no,可以外界远程访问,redis 3.2 才追加的一个功能
2.6、开启6个redis节点
[root@localhost redis-cluster]# redis-server 6379/redis.conf [root@localhost redis-cluster]# redis-server 6380/redis.conf [root@localhost redis-cluster]# redis-server 6381/redis.conf [root@localhost redis-cluster]# redis-server 6382/redis.conf [root@localhost redis-cluster]# redis-server 6383/redis.conf [root@localhost redis-cluster]# redis-server 6384/redis.conf
可以查看是否开启成功,
[root@localhost redis-cluster]# ps -ef | grep redis
和下图所示一样就成功开启
三、开启集群模式
3.1、安装redis集群工具和环境
[root@localhost redis-cluster]# yum install ruby [root@localhost redis-cluster]# yum install -y rubygems
还有一个,用gem这个命令来安装redis接口,gem是ruby的一个工具包
gem install redis
3.2、启动redis集群,服务器IP填自己的服务器地址
[root@localhost redis-cluster]# redis-3.2.1/src/redis-trib.rb create --replicas 1 服务器IP:6379 服务器IP:6380 服务器IP:6381 服务器IP:6382 服务器IP:6383 服务器IP:6384
安装过程中,会出现红色框内提示,不用管,直接yes就好了,然后安装ok。
四、开启防火墙(如果防火墙关闭的请忽略)
4.1、开放6个节点端口,这里是centos7.0版本的防火墙开启方法,7.0以下的自己解决下下,也简单的
[root@localhost ~]firewall-cmd --zone=public --add-port=6379/tcp --permanent [root@localhost ~]firewall-cmd --zone=public --add-port=6380/tcp --permanent [root@localhost ~]firewall-cmd --zone=public --add-port=6381/tcp --permanent [root@localhost ~]firewall-cmd --zone=public --add-port=6382/tcp --permanent [root@localhost ~]firewall-cmd --zone=public --add-port=6383/tcp --permanent [root@localhost ~]firewall-cmd --zone=public --add-port=6384/tcp --permanent
4.2、重启防火墙
[root@localhost ~]firewall-cmd --reload
4.3、查看是否开放成功
[root@localhost ~]# iptables -L -n
这是开启成功的,还有如果firewall-cmd这个命令找不到就要自己先安装防火墙,安装的可以自己网上找下。
五、测试
我这边是在windows下测试的,连接时候注意,连接命令后面要加 -c
结果上图,我在6380节点下设置数据,可以通过6379这个节点获取。(PS:白色地方是服务器IP,这个自己知道就好了,嘿嘿!)
OK,到这里基本搞定了,但是还是需要完善,比如开机自启动啥的,这里我就不弄了,有兴趣的可以自己去捯饬下。