redis 集群搭建过程及搭建问题处理

文章目录

1、Redis 简介
2、Redis 集群搭建
3、Redis 集群搭建问题记录

1、Redis 简介

    Redis 的主从复制技术,当实现了多节点的 master-slave 后,我们也可以把它叫做集群,它主要是利用切片技术来组建的集群。集群要实现的目的是要将不同的 key 分散放置到不同的 redis 节点,这里我们需要一个规则或者算法,通常的做法是获取 key 的哈希值,然后根据节点数来求模,但这种做法有其明显的弊端,当我们需要增加或减少一个节点时,会造成大量的 key 无法命中,这种比例是相当高的,所以就有人提出了一致性哈希的概念。

整体设计包含如下几点:
1. 数据Hash分布在不同的Redis Instatnce上;
2. M/S的切换采用Sentinel;
3. 写:只会写master Instance,从sentinel获取当前的master Instane;
4. 读:从Redis Node中基于权重选取一个Redis Instance读取,失败/超时则轮询其他Instance;
5. 通过RPC服务访问,RPC server端封装了Redis客户端,客户端基于jedis开发;
6. 批量写/删除:不保证事务;

参考:
http://blog.csdn.net/yfkiss/article/details/38944179
http://www.cnblogs.com/zhaoguihua/p/redis-005.html

Redis集群搭建准备工作:

* 准备3台机器,IP地址分别为:192.168.1.184、192.168.1.203、192.168.1.208;其中有两台物理机一台虚拟机,192.168.1.208为虚拟机Centos系统,192.168.1.184、192.168.1.203为物理机ubuntu系统;
* 下载Redis,当前版本为:Redis-3.2.1.tar.gz,将该文件拷贝到以上三台机器的安装目录,然后解压安装到 /srv/redis/ 下,安装过程参考网上安装方式。

2、Redis集群搭建

2.1、集群的逻辑结构

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

192.168.1.184:7000
192.168.1.184:7001
192.168.1.208:7002
192.168.1.208:7003
192.168.1.203:7004
192.168.1.203:7005

这样,设计正好每个机器上两个节点,每个节点对应一个redis.conf文件,启动时每个节点对应自己的配置文件。

2.2、环境搭建

在192.168.1.184节点上开始做如下工作:

(1)创建集群文件夹及配置文件redis.conf (带密码认证方式)

创建集群文件夹 /srv/redis_cluster;
创建2个节点配置文件夹 /srv/redis_cluster/7000和 /srv/redis_cluster/7001;
创建节点pidfile配置路径 /srv/run/
拷贝安装路径下的redis.conf到这2个节点配置文件夹;
然后修改配置文件redis.conf,内容如下:

port 7000
daemonize yes
masterauth 自己的密码
requirepass 自己的密码
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly no
pidfile /srv/run/redis_7000.pid
logfile /data/logs/redis.log
dir /srv/redis_cluster/7000
maxmemory 6gb

(2)启动Redis集群:

启动方式与正常启动单节点的命令相似,启动时进入 /opt/redis_cluster/7000的配置文件路径下,下面方式启动一个节点:
/opt/redis-3.2.1/bin/redis-server  redis.conf
启动后 /opt/redis_cluster/7000 文件夹下会产生appendonly.aof、nodes.conf,注意这两个文件的产生在启动路径下,所以为了集群的管理,最近进入配置文件夹启动。 
其他节点的启动方式与上相同,这里不重复了。

当此时,集群的各节点已经启动完成,但当前各节点尚未建立联系,需要命令将他们联合起来作为一个集群工作,进入某一个节点的终端,进入Redis安装路径 redis-3.2.1/src,使用下面命令建立集群:

./redis-trib.rb create --replicas 1 192.168.1.184:7000 192.168.1.184:7001 192.168.1.208:7002 192.168.1.208:7003 192.168.1.203:7004 192.168.1.203:7005

开始执行:
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.1.184:7000
192.168.1.208:7002
192.168.1.203:7004
Adding replica 192.168.1.208:7003 to 192.168.1.184:7000
Adding replica 192.168.1.184:7001 to 192.168.1.208:7002
Adding replica 192.168.1.203:7005 to 192.168.1.203:7004
M: a87b0bd7d01184260ebb79f01ebc8c60108c3786 192.168.1.184:7000
   slots:0-5460 (5461 slots) master
S: 9623c893341929d1693674ae74c1c76d5d4e58c5 192.168.1.184:7001
   replicates 8b8c315d4cf7a1ba3d68586c9fdbefac6e58d755
M: 8b8c315d4cf7a1ba3d68586c9fdbefac6e58d755 192.168.1.208:7002
   slots:5461-10922 (5462 slots) master
S: 0ed40b206f5da1a1caf0c8e90917efeba4074594 192.168.1.208:7003
   replicates a87b0bd7d01184260ebb79f01ebc8c60108c3786
M: f16d03c9afa777c0aca78867f81c0da155c21ffa 192.168.1.203:7004
   slots:10923-16383 (5461 slots) master
S: 57f9d16a2d50c55440d47202a2fbfe2901c9f044 192.168.1.203:7005
   replicates f16d03c9afa777c0aca78867f81c0da155c21ffa

提示设置配置信息,选yes回车:
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join...
>>> Performing Cluster Check (using node 192.168.1.184:7000)
M: a87b0bd7d01184260ebb79f01ebc8c60108c3786 192.168.1.184:7000
   slots:0-5460 (5461 slots) master
M: 9623c893341929d1693674ae74c1c76d5d4e58c5 192.168.1.184:7001
   slots: (0 slots) master
   replicates 8b8c315d4cf7a1ba3d68586c9fdbefac6e58d755
M: 8b8c315d4cf7a1ba3d68586c9fdbefac6e58d755 192.168.1.208:7002
   slots:5461-10922 (5462 slots) master
M: 0ed40b206f5da1a1caf0c8e90917efeba4074594 192.168.1.208:7003
   slots: (0 slots) master
   replicates a87b0bd7d01184260ebb79f01ebc8c60108c3786
M: f16d03c9afa777c0aca78867f81c0da155c21ffa 192.168.1.203:7004
   slots:10923-16383 (5461 slots) master
M: 57f9d16a2d50c55440d47202a2fbfe2901c9f044 192.168.1.203:7005
   slots: (0 slots) master
   replicates f16d03c9afa777c0aca78867f81c0da155c21ffa
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

到此Redis集群配置完毕,从上面的日志信息,我们可以看出,集群中每个机器上2个节点,一主一从。
也可以使用如下命令查看当前Redis集群的状态:

./redis-trib.rb check  192.168.1.184:7000 

该命令后面接的ip:端口,可以是集群中的任意节点。

参考文档:
http://www.linuxidc.com/Linux/2015-08/121845.htm

2.3、集群应用

可以使用客户端连接集群,进行相关的应用测试,连接方式与单节点的连接方式类似,使用redis-cli客户端工具进行连接,进入redis-cli所在路径,命令如下:

./redis-cli -c -h 192.168.1.184 -p 7000

其中,-c 代表集群参数,然后进入提示符:
192.168.1.184:7000>set a b
-> Redirected to slot [15495] located at 192.168.1.203:7004
OK
192.168.1.203:7004> get a
"b"

当set一个key-value时,会占用集群的一个slot,这个slot是在另一个节点192.168.1.203:7004上建立的,同时提示符切入该节点状态,使用get获取a的value为b;到此说明集群已经开始正常工作了。

参考文档:
http://blog.csdn.net/hackerwin7/article/details/43559991


3、Redis 集群搭建问题记录

(1)使用redis-trib.rb建立集群关系时问题:

shuzilm@shuzilm:~/Downloads/redis-3.2.1/src$ ./redis-trib.rb create --replicas 1 192.168.1.184:7000 192.168.1.184:7001 192.168.1.203:7002 192.168.1.203:7003 192.168.1.208:7004 192.168.1.208:7005
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- redis (LoadError)

解决:
sudo gem install redis

shuzilm@shuzilm:~/Downloads/redis-3.2.1/src$ ./redis-trib.rb create --replicas 1 192.168.1.184:7000 192.168.1.184:7001 192.168.1.203:7002 192.168.1.203:7003 192.168.1.208:7004 192.168.1.208:7005
>>> Creating cluster
[ERR] Sorry, can't connect to node 192.168.1.184:7000

解决:
注意端口对应关系要正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值