Redis cluster 3.0搭建(ubuntu, 单机模拟)
引用:http://www.cnblogs.com/gomysql/p/4395504.html
http://xiaorui.cc/2015/05/16/
http://xiezefan.me/2015/12/03/redis_cluster_research_1/
http://blog.csdn.net/dc_726/article/details/48552531 //非常详细
本篇文章意在Redis Cluster环境的搭建
Redis集群的基本知识、原理以及使用等内容,不在本篇文章中介绍,请移步到我的相关篇目中。
前置准备:
1. redis 3.0及以上版本,我是用的3.0.7版本。
2. ruby 环境和gem环境
3. gcc等编译c语言的工具和工具包
4. redis基础知识(我的篇目)
搭建步骤
1. 安装3.0以上版本redis
wget http://download.redis.io/releases/redis-3.0.7.tar.gz
tar -xvf redis-3.0.7.tar.gz
cd redis-3.0.7
make // make install
2. 安装ruby和gem
apt-get install ruby
apt-get install gem
gem install redis
3. 创建存放多个redis实例的目录
mkdir redis_cluster/ -p
cd redis_cluster
mkdir 7000 7001 7002 7003 7004 7005 // 以端口号作为实例目录的名称
4. redis实例的配置文件---redis.conf创建redis.conf文件,在里面添加如下内容作为redis实例的配置
port 7000
#daemonize yes #是否作为守护进程。对于新手来说,不设置的话,可以通过输出查看一些redis服务器的输出内容。
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
将该redis.conf文件分别放置到各个实例目录中,并修改相应的端口号。
5. 分别启动6个redis实例
cd 7000/
redis-server redis.conf
查看进程是否存在
[root@redis-server 7005]# ps -ef | grep redis
root 4168 1 0 11:49 ? 00:00:00 redis-server *:7000 [cluster]
root 4176 1 0 11:49 ? 00:00:00 redis-server *:7001 [cluster]
root 4186 1 0 11:50 ? 00:00:00 redis-server *:7002 [cluster]
root 4194 1 0 11:50 ? 00:00:00 redis-server *:7003 [cluster]
root 4202 1 0 11:50 ? 00:00:00 redis-server *:7004 [cluster]
root 4210 1 0 11:50 ? 00:00:00 redis-server *:7005 [cluster]
root 4219 4075 0 11:50 pts/2 00:00:00 grep redis
6. 创建集群
使用redis-3.0.7/src 目录下的 redis-trib 集群管理程序创建集群
redis-trib create --replicas 1 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
参数:
create 是redis-trib程序的参数,表示创建一个新的集群
--replicas 1 表示为集群中的每个主节点创建一个从节点,随后是实例的地址列表。目前只支持 IP:PORT 的形式添加。目前命令里有6个地址参数,前三个是master,后三个是slave。
这条命令,让redis-trib程序创建一个包含三个主节点和三个从节点的集群。
随后,redis-trib会输出预想的配置给你,并询问是否按照该配置进行创建。
>>> Creating cluster
Connecting to node 127.0.0.1:7000: OK
Connecting to node 127.0.0.1:7001: OK
Connecting to node 127.0.0.1:7002: OK
Connecting to node 127.0.0.1:7003: OK
Connecting to node 127.0.0.1:7004: OK
Connecting to node 127.0.0.1:7005: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
Adding replica 127.0.0.1:7003 to 127.0.0.1:7000
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
M: 2774f156af482b4f76a5c0bda8ec561a8a1719c2 127.0.0.1:7000
slots:0-5460 (5461 slots) master
M: 2d03b862083ee1b1785dba5db2987739cf3a80eb 127.0.0.1:7001
slots:5461-10922 (5462 slots) master
M: 0456869a2c2359c3e06e065a09de86df2e3135ac 127.0.0.1:7002
slots:10923-16383 (5461 slots) master
S: 37b251500385929d5c54a005809377681b95ca90 127.0.0.1:7003
replicates 2774f156af482b4f76a5c0bda8ec561a8a1719c2
S: e2e2e692c40fc34f700762d1fe3a8df94816a062 127.0.0.1:7004
replicates 2d03b862083ee1b1785dba5db2987739cf3a80eb
S: 9923235f8f2b2587407350b1d8b887a7a59de8db 127.0.0.1:7005
replicates 0456869a2c2359c3e06e065a09de86df2e3135ac
Can I set the above configuration? (type 'yes' to accept):
输入 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 127.0.0.1:7000)
M: 2774f156af482b4f76a5c0bda8ec561a8a1719c2 127.0.0.1:7000
slots:0-5460 (5461 slots) master
M: 2d03b862083ee1b1785dba5db2987739cf3a80eb 127.0.0.1:7001
slots:5461-10922 (5462 slots) master
M: 0456869a2c2359c3e06e065a09de86df2e3135ac 127.0.0.1:7002
slots:10923-16383 (5461 slots) master
M: 37b251500385929d5c54a005809377681b95ca90 127.0.0.1:7003
slots: (0 slots) master
replicates 2774f156af482b4f76a5c0bda8ec561a8a1719c2
M: e2e2e692c40fc34f700762d1fe3a8df94816a062 127.0.0.1:7004
slots: (0 slots) master
replicates 2d03b862083ee1b1785dba5db2987739cf3a80eb
M: 9923235f8f2b2587407350b1d8b887a7a59de8db 127.0.0.1:7005
slots: (0 slots) master
replicates 0456869a2c2359c3e06e065a09de86df2e3135ac
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
7. 集群客户端,查看信息
目前集群的客户端很少,但是redis自带的客户端(redis-cli)支持集群模式(-c 参数)。 redis-cli -h查看详细参数说明
redis-cli -p xxxx -c cluster nodes 或登陆后,通过cluster nodes来查看该节点所在的集群的信息。
2d03b862083ee1b1785dba5db2987739cf3a80eb 127.0.0.1:7001 master - 0 1428293673322 2 connected 5461-10922
0456869a2c2359c3e06e065a09de86df2e3135ac 127.0.0.1:7002 master - 0 1428293670262 3 connected 10923-16383
2774f156af482b4f76a5c0bda8ec561a8a1719c2 127.0.0.1:7000 myself,master - 0 0 1 connected 0-5460
37b251500385929d5c54a005809377681b95ca90 127.0.0.1:7003 slave 2774f156af482b4f76a5c0bda8ec561a8a1719c2 0 1428293672305 4 connected
e2e2e692c40fc34f700762d1fe3a8df94816a062 127.0.0.1:7004 slave 2d03b862083ee1b1785dba5db2987739cf3a80eb 0 1428293674340 5 connected
9923235f8f2b2587407350b1d8b887a7a59de8db 127.0.0.1:7005 slave 0456869a2c2359c3e06e065a09de86df2e3135ac 0 1428293675362 6 connected
从左到右的各个域分别是: 节点 ID , IP 地址和端口号, 标志(flag), 最后发送 PING 的时间, 最后接收 PONG 的时间, 连接状态, 节点负责处理的槽。
[节点id] [ip:端口] [标志(master、myself、salve)] [(- 或者主节id)] [ping发送的毫秒UNIX时间,0表示没有ping] [pong接收的unix毫秒时间戳] [配置-epoch] [连接状态] [槽点]
集群节点属性
每个节点在集群中都有一个独一无二的 ID , 该 ID 是一个十六进制表示的 160 位随机数, 在节点第一次启动时由 /dev/urandom 生成。
节点会将它的 ID 保存到配置文件, 只要这个配置文件不被删除, 节点就会一直沿用这个 ID 。
节点 ID 用于标识集群中的每个节点。 一个节点可以改变它的 IP 和端口号, 而不改变节点 ID 。 集群可以自动识别出 IP/端口号的变化, 并将这一信息通过 Gossip 协议广播给其他节点知道。
===================================
关注如下的配置:
pidfile /home/work/redis/redis_6380/tmp/redis.pid
logfile "/home/work/redis/redis_6380/log/redis.log"
dir /home/work/redis/redis_6380/
daemonize yes