redis单机及其集群的搭建

 二、集群版redis搭建

1.1. 集群原理

1.1.1. redis-cluster架构图


架构细节:

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

1.1.2. redis-cluster投票:容错


(1)领着投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.

(2):什么时候整个集群不可用(cluster_state:fail)? 

    a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.

    b:如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.

   ps:当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误

2.安装ruby环境

redis集群管理工具redis-trib.rb依赖ruby环境,首先需要安装ruby环境:

安装ruby

yum install ruby
yum install rubygems

1.安装包下载

  http://download.redis.io/releases/ 下载redis的压缩包,并放在/usr/soft文件夹下

2.解压压缩包:

tar -zxvf redis-3.0.7.tar.gz 

3.把usr/soft下的redis-3.0.7文件夹移到usr,然后改名为redis
mv redis-3.0.7 /usr/
mv redis-3.0.7 redis

4.执行安装命令(使用PREFIX指定安装目录)

make PREFIX=/usr/redis/ install

这时候你就会发现redis下面会多出一个bin目标



3.集群节点的规划

这里在同一台服务器用不同的端口表示不同的redis服务器,如下:

主节点:192.168.198.130:7001 192.168.198.130:7002 192.168.198.130:7003

从节点:192.168.198.130:7004 192.168.198.130:7005 192.168.198.130:7006

在/usr/local下创建redis-cluster目录,其下创建7001、7002。。7006目录,然后再把/usr/redis/src下的redis-trib.rb复制到

/usr/redis/src/redis-trib.rb如下(我多建了两个7007,7008为了测试用)


然后把/usr/redis/bin/下的内容 拷贝到每个700*文件下:
比如cp /usr/redis/bin/* /usr/local/redis-cluster/7001/ 这样就把bin下的文件拷过去了
然后再把/usr/redis下的redis.conf(redis的重要配置文件拷贝到每个700*文件夹下)
cp /usr/redis/redis.conf /usr/local/redis-cluster/7001


这里(dump.rdb,nodes-7001.conf,是项目跑起来生成的读者那里应该暂时还没有这两文件)

操作到这步,读者应该每个700*文件都有以上文件夹内容了。

现在我们来修改配置


vi 打开每个7001文件夹下的 redis.conf

daemonize

yes

是否作为守护进程运行


pidfile

/var/run/redis-7001.pid

如以后台进程运行,则需指定一个 pid,默认为/var/run/redis.pid


port

7001

监听端口,默认为 6379


cluster-enabled

yes

打开 redis 集群


cluster-config-file

nodes-7001.conf

集群配置文件(启动自动生成),但我觉得要配置


dir

/usr/local/redis-cluster/7001

节点数据持久化存放目录(建议配置)


以上几个是我认为要修改的,其他要修改的地方,读者可以自行去根据文档进行实际需求配置

然后wq保存退出

配置好每个700*文件夹下的redis.conf

 gem 安装 redis ruby 接口:

 gem install redis

 Successfully installed redis-3.2.1

1 gem installed 

Installing ri documentation for redis-3.2.1... 

Installing RDoc documentation for redis-3.2.1...


现在  使用后台启动的方式启动每个redis

进入redis-cluster目录

然后再这个目录下启动每个文件夹下的redis

./7001/redis-server 7001/redis.conf
./7002/redis-server 7002/redis.conf
./7003/redis-server 7003/redis.conf
./7004/redis-server 7004/redis.conf
./7005/redis-server 7005/redis.conf
./7006/redis-server 7006/redis.conf



 
 
执行redis-trib.rb,此脚本是ruby脚本,它依赖ruby环境 

./redis-trib.rb create --replicas 1 192.168.198.130:7001 192.168.198.130:7002 192.168.198.130:7003 192.168.198.130:7004 192.168.198.130:7005  192.168.198.130:7006    //集群中redis的ip和脚本



现在我们进入redis客户端看下集群情况


就此redis的集群已经搭建好了

如果:读者是用不同服务器搭建的,再次先说一声,把启动的端口加入到防火墙当中

而且如果是不同服务器搭建集群,还要加上10000,意思是

如果你的端口是7001,那你要把7001加入防火墙可访问的端口,还要把17001也加入防火墙可访问的端口

ps:读者还碰到本机用redis客户端访问虚拟机的redis不能访问,因为你虚拟机开启的是127.0.0.1的本地ip

这个请修改redis.conf里的bind加上你虚拟机的ip 如下图:


这样你本地能访问此端口的redis,ip也能访问此端口的redis。


还有几篇我再学习redis集群中,有巨大帮助的几篇文也和大家分享下:

http://www.cnblogs.com/mouseIT/p/5288204.html

http://blog.csdn.net/hardworking0323/article/details/51213991

http://blog.csdn.net/truong/article/details/52531103(这个是讲端口要加上10000的)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值