Redis分布式集群部署安装及细节(一台主机搭建多个服务--伪集群)

Redis分布式集群部署安装及细节

 一: redis cluster介绍篇

1:redis cluster的现状

目前redis支持的cluster特性(已亲测):

1):节点自动发现

2):slave->master选举,集群容错

3):Hotresharding:在线分片

4):进群管理:cluster xxx

5):基于配置(nodes-port.conf)的集群管理

6):ASK转向/MOVED 转向机制.

2:redis cluster 架构

redis-cluster架构图

Redis分布式集群部署安装及细节(一台主机搭建多个服务--伪集群)_第1张图片

 

 

架构细节:

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

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

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

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

 

选举:容错

Redis分布式集群部署安装及细节(一台主机搭建多个服务--伪集群)_第2张图片

 

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

(2):什么时候整个集群不可用(cluster_state:fail),当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN Thecluster is down)错误 a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成进群的slot映射[0-16383]不完成时进入fail状态. b:如果进群超过半数以上master挂掉,无论是否有slave集群进入fail状态.

二:.Redis集群安装篇

虚拟机环境:

要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下

127.0.0.1:7000

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

 

1:上传redis

下载地址:http://download.redis.io/releases/redis-3.2.1.tar.gz

必须为3.0以上版本(支持rediscluser)

文件位置: caches/redis3.0/redis-3.2.1.tar.gz

2:上传服务器,解压,编译

或者直接下载,如果下载失败,请按第一步上传后下载

$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz

$ tar xzf redis-3.2.1.tar.gz

$ cd redis-3.2.1

$ make

$ make install

以下提示:则服务安装成功

 

 Redis分布式集群部署安装及细节(一台主机搭建多个服务--伪集群)_第3张图片

3:创建集群需要的目录

 

[/]表示根目录

以下操作命令在根目录下(否则路径会出问题)

mkdir-p root/caches/cluster

cdroot/caches/cluster

mkdir7000

mkdir7001

mkdir7002

mkdir7003

mkdir7004

mkdir7005

4:修改配置文件redis.conf

cpredis.conf /usr.local/cluster

viredis.conf

 

##修改配置文件中的下面选项

 

port7000

daemonizeyes

cluster-enabledyes

cluster-config-filenodes.conf

cluster-node-timeout5000

appendonlyyes

dir//usr/local/cluster/  设置快照dump.rdb在集群中

 

其他配置项

TCP listen()10000

TCP监听的最大容纳数量,在高并发的环境下,你需要把这个值调高以避免客户端连接缓慢的问题。Linux 内核会把这个值缩小成/proc/sys/net/core/somaxconn对应的值,要提升并发量需要修改这两个值才能达到目的

 

bind 127.0.0.1

bind 192.168.1.100

绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址。这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接。如果bind选项为空的话,那会接受所有来自于可用网络接口的连接。如上配置,绑定一个127.0.0.1的本机地址和192.168.1.100的外网地址。

protected-mode yes

保护模式,默认是开启状态,只允许本地客户端连接, 可以设置密码或添加bind来连接

tcp-keepalive 300

单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,官方给出的建议值是300s,如果设置为0,则不会周期性的检测

maxclients 10000

  设置客户端最大并发连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件

  描述符数-32(redis server自身会使用一些),如果设置 maxclients为0

  表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clientsreached错误信息

 

 

 

首先按ESC键回到命令模式,输入: 进入末行,然后输入:w保存即可,也可以输入:wq!保存文件并退出。

 

##修改完redis.conf配置文件中的这些配置项之后把这个配置文件分别拷贝到7000/7001/7002/7003/7004/7005目录下面

 

cp/caches/cluster/redis.conf /caches/cluster/7000

cp/caches/cluster/redis.conf /caches/cluster/7001

cp/caches/cluster/redis.conf /caches/cluster/7002

cp/caches/cluster/redis.conf /caches/cluster/7003

cp/caches/cluster/redis.conf /caches/cluster/7004

cp/caches/cluster/redis.conf /caches/cluster/7005

##注意:拷贝完成之后要修改7001/7002/7003/7004/7005目录下面redis.conf文件中的port参数,分别改为对应的文件夹的名称

 

[root@SZD-L0073672 7003]# cd ../7004

[root@SZD-L0073672 7004]#

[root@SZD-L0073672 7004]# vi redis.conf

找到对应的 port 7004 按i 进入到插入状态  

修改后按ESC退出到命令模式

按 : 跳到文档末行  输入 wq! (保存并退出 到系统路径里)

5:分别启动这6个redis实例

cd/usr/local/cluster/7000 redis-server redis.conf

cd/usr/local/cluster/7001 redis-server redis.conf

cd/usr/local/cluster/7002 redis-server redis.conf

cd/usr/local/cluster/7003 redis-server redis.conf

cd/usr/local/cluster/7004 redis-server redis.conf

cd/usr/local/cluster/7005 redis-server redis.conf

##启动之后使用命令查看redis的启动情况

ps-ef|grep redis

如下显示则说明启动成功

 

6.升级ruby 安装gem

检查ruby 版本:

#ruby -v

ruby 1.8.7(2013-06-27 patchlevel 374) [x86_64-linux]

 

是否安装rubygems:

# rpm -qa|grep ruby

ruby-rdoc-1.8.7.374-2.el5

ruby-1.8.7.374-2.el5

ruby-devel-1.8.7.374-2.el5

ruby-devel-1.8.7.374-2.el5

ruby-mode-1.8.5-24.el5

ruby-irb-1.8.7.374-2.el5

ruby-libs-1.8.7.374-2.el5

ruby-libs-1.8.7.374-2.el5

rubygems-1.3.7-1.el5

 

如果没有

安装gem 需要ruby的版本在1.8.7 以上,默认的centos5 上都是1.8.5 版本,所以首先你的升级你的ruby ,rpm -ivh

http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-6.noarch.rpm

 

yum install ruby ruby-devel rubygems rpm-build

 

7.gem 安装redis ruby 接口

gem install redis

 

此时巨坑,会报巨多的错误 

比如

Redis分布式集群部署安装及细节(一台主机搭建多个服务--伪集群)_第4张图片

再比如:

Redis分布式集群部署安装及细节(一台主机搭建多个服务--伪集群)_第5张图片

 

纠结良久之后   参考网址:https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem

再次执行第步的命令,还会报错,提示不能加载redis,是因为缺少redis的接口
错误内容:
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in`gem_original_require': no such file to load -- redis (LoadError)
from/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from ./redis-trib.rb:25


gem install redis

这里可能无法安装,因为无法连接gem服务器:
[@zw_22_90 src]# gem install redis --version3.0.0
ERROR: Could not find a valid gem 'redis' (=3.0.0) in any repository
ERROR: While executing gem ...(Gem::RemoteFetcher::FetchError)



需要手工下载并安装:
wgethttps://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem
gem install -l ./redis-3.2.1.gem

 

因为种种原因,此时gem文件仍旧无法下载,至于原因就不深究了

解决方案:

1.    网址请求头:https更换为http

2.   在windows本地下载redis-3.2.1.gem  上传到主机环境中再安装

gem install -1 ./redis-3.2.1.gem

 

Redis分布式集群部署安装及细节(一台主机搭建多个服务--伪集群)_第6张图片

 

8:执行redis的创建集群命令创建集群

#redis-trib.rb的create子命令构建 #--replicas 则指定了为Redis Cluster中的每个Master节点配备几个Slave节点#节点角色由顺序决定,先master之后是slave

创建方式:

cd/usr/local/redis3.0/src ./redis-trib.rb create --replicas 1 127.0.0.1:7000127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

错误笔记备注

8.1执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境

错误内容:/usr/bin/env:ruby: No such file or directory 所以需要安装ruby的环境,这里推荐使用yum install ruby安装

 

yum installruby

 

8.2然后再执行第6步的创建集群命令,还会报错,提示缺少rubygems组件,使用yum安装 错误内容: ./redis-trib.rb:24:in `require':no such file to load -- rubygems (LoadError) from ./redis-trib.rb:24

 

yum installrubygems

 

8.3再次执行第8步的命令,还会报错,提示不能加载redis,是因为缺少redis和ruby的接口,使用gem 安装错误内容:

/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in

`gem_original_require':no such file to load -- redis (LoadError) from/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' from./redis-trib.rb:25

 

 gem install redis

 

8.4 再次执行第8步的命令,正常执行 输入yes,然后配置完成。

注意观察 主从的配置: 默认是前三个节点 7000 7001 7002 是主, 后3个节点 7003 7004 7005 是从 如果是部署在不同的服务器,请根据主从分部规则,分开在不同的服务器

 

至此,集群搭建成功

 

9: 使用redis-cli命令进入集群环境

redis-cli -c -p 7000

 

结果: 127.0.0.1:7000> ping

PONG

三:测试篇

 

1.检查集群的状态

 

#redis-trib.rb的check子命令构建 #ip:port可以是集群的任意节点

./redis-trib.rb check 1 127.0.0.1:7000 最后输出如下信息,没有任何警告或错误,表示集群启动成功并处于ok状态

Redis分布式集群部署安装及细节(一台主机搭建多个服务--伪集群)_第7张图片

你可能感兴趣的:(Redis集群部署)