redis-cluster集群搭建

来源:互联网 发布:旅游cms开源 编辑:程序博客网 时间:2024/04/28 00:26

原文地址,转载请注明出处:http://blog.csdn.net/qq_34021712/article/details/70244320    ©王赛超

前提条件
redis-3.2.8.tar.gz  下载地址:http://download.csdn.net/detail/qq_34021712/9819436
安装gcc

yum install gcc-c++

环境搭建过程
安装redis
①解压redis-3.2.8.tar.gz包
tar -zxvf redis-3.2.8.tar.gz
②进入压缩后目录
cd redis-3.2.8
③编译redis
make
④安装redis到/usr/local/redis路径下
make install PREFIX=/usr/local/redis


测试redis是否安装成功

两种启动redis方式
(一)前端启动
./redis-server
(二)后台启动
①将redis.conf从安装文件夹中拷贝到/usr/local/redis/bin路径下
cp /usr/local/software/redis-3.2.8/redis.conf /usr/local/redis/bin/
②编辑/usr/local/redis/bin/下的redis.conf
将 daemonize 后面的no改为yes
③后台启动redis
./redis-server redis.conf
④查看redis进程
ps -ef|grep redis

⑤给redis设置登录密码,修改redis.conf

requirepass 123456


测试Redis连接客户端

redis-cli -p 端口 -h ip地址 <-c>连接集群时使用此参数
默认端口:6379
Ip:localhost(127.0.0.1)
测试连接,放入一个值,并查看
./redis-cli


redis集群介绍

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 会根据节点数量大致均等的将哈希槽映射到不同的节点

redis集群搭建
集群中应该至少有三个节点,每个节点有一备份节点。需要6台服务器。在user/local路径下新建文件夹redis-cluster,复制六份redis 到这个路径下

修改每一个下面的redis.conf文件
port=7001(剩下5个分别为7002,,7003,7004,7005,7006)cluster-enabled yescluster-require-full-coverage no。默认是yes,只要有结点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为no
需要一个ruby脚本在redis源码文件夹下的src目录下。redis-trib.rb,将此文件拷贝到/usr/local/redis-cluster下
cp /usr/local/software/redis-3.2.8/src/redis-trib.rb /usr/local/redis-cluster/

执行ruby脚本需要安装ruby环境
yum install rubyyum install rubygems

安装redis需要依赖的gem包
redis-3.2.2.gem 下载地址:http://download.csdn.net/detail/qq_34021712/9819438
将redis-3.2.2.gem拷贝到linux的/usr/local/redis-cluster/下,然后执行安装
gem install redis-3.2.2.gem

启动所有的redis实例,上面创建的那6个,我们在/usr/local/redis-cluster/写一个脚本来启动所有的redis
vim start-all.sh内容为:cd redis01/bin./redis-server redis.confcd ../../cd redis02/bin./redis-server redis.confcd ../../cd redis03/bin./redis-server redis.confcd ../../cd redis04/bin./redis-server redis.confcd ../../cd redis05/bin./redis-server redis.confcd ../../cd redis06/bin./redis-server redis.confcd ../../给这个shell文件赋予执行权限chmod +x ./start-all.sh开启所有的实例./start-all.sh

使用redis-trib.rb创建集群

./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005  127.0.0.1:7006


输入yes回车,如果出现如下图,集群搭建成功



连接集群,依然使用redis-cli -p 端口 -h ip地址 <-c>连接集群时使用此参数,然后放入值,并取出
连接任一节点都可以,但一定要带上 -c参数
/usr/local/redis-cluster/redis01/bin/redis-cli -p 7001 -c
如果不带 -c 在set值时,会报(error) MOVED 15495 127.0.0.1:7003


集群故障转移
使用下面命令查看所有的主从节点信息
./redis-trib.rb check 127.0.0.1:7001


根据上图可以看到7001 7003 7005都是主节点,下面我们来模拟7005主节点宕机

使用ps -ef|grep redis查看7005主节点的pid,然后kill -9 杀掉

可能是从节点还没有检测到主节点宕机,过几秒钟,再次使用该命令查看



最后,再次启动7005的redis服务,再次查看集群信息,发现7005并没有变为主节点,而是成为了7002的从节点,证明集群可用了


1 0
原创粉丝点击