原文地址,转载请注明出处:http://blog.youkuaiyun.com/qq_34021712/article/details/70244320 ©王赛超
redis-3.2.8.tar.gz 下载地址:http://download.youkuaiyun.com/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 yes
cluster-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 ruby
yum install rubygems
④安装redis需要依赖的gem包
redis-3.2.2.gem 下载地址: http://download.youkuaiyun.com/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.conf
cd ../../
cd redis02/bin
./redis-server redis.conf
cd ../../
cd redis03/bin
./redis-server redis.conf
cd ../../
cd redis04/bin
./redis-server redis.conf
cd ../../
cd redis05/bin
./redis-server redis.conf
cd ../../
cd redis06/bin
./redis-server redis.conf
cd ../../
给这个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的从节点,证明集群可用了