您的位置:首页 > 数据库 > Redis

七,redis集群

2017-01-10 15:23 337 查看

redis基本集群配置

整体示意图



配置方法

进入redis的安装目录,我的路径是
/opt/redis-3.2.6/
,使用文件目录中的utils文件夹

[jiang@localhost redis-3.2.6]$ ls
00-RELEASENOTES  CONTRIBUTING  deps     Makefile   README.md   runtest          runtest-sentinel  src    utils
BUGS             COPYING       INSTALL  MANIFESTO  redis.conf  runtest-cluster  sentinel.conf     tests
[jiang@localhost redis-3.2.6]$ cd utils
[jiang@localhost utils]$ ls
build-static-symbols.tcl  corrupt_rdb.c   generate-command-help.rb  hyperloglog        lru            redis_init_script      redis-sha1.rb  speed-regression.tcl
cluster_fail_time.tcl     create-cluster  hashtable                 install_server.sh  redis-copy.rb  redis_init_script.tpl  releasetools   whatisdoing.sh
[jiang@localhost utils]$ cd reate-cluster
-bash: cd: reate-cluster: No such file or directory
[jiang@localhost utils]$ cd create-cluster
[jiang@localhost create-cluster]$ ls
30001.log  30004.log  appendonly-30001.aof  appendonly-30004.aof  create-cluster  dump-30003.rdb  dump-30006.rdb    nodes-30003.conf  nodes-30006.conf
30002.log  30005.log  appendonly-30002.aof  appendonly-30005.aof  dump-30001.rdb  dump-30004.rdb  nodes-30001.conf  nodes-30004.conf  README
30003.log  30006.log  appendonly-30003.aof  appendonly-30006.aof  dump-30002.rdb  dump-30005.rdb  nodes-30002.conf  nodes-30005.conf
[jiang@localhost create-cluster]$ ./create-cluster start


使用以上操作命令,出现以下信息说明cluster已经启动

Starting 30001
Starting 30002
Starting 30003
Starting 30004
Starting 30005
Starting 30006


然后在当前目录中使用
./create-cluster create
命令,会让你输入是否采用默认的配置,输入yes即可。

... # output omitted
M: bfe5766a6c75729fba842add9fa05f9fddda128c 127.0.0.1:30001
slots:0-5460 (5461 slots) master
M: 0d4ae9e8d6e3150920030774e3a3fa4584578cd3 127.0.0.1:30002
slots:5461-10922 (5462 slots) master
M: da73d3f09aa544f154e48854a3cf8372822134e1 127.0.0.1:30003
slots:10923-16383 (5461 slots) master
... # output omitted
[OK] All 16384 slots covered.


然后可以对配置好的集群进行测试

$ redis-cli -c -h localhost -p 30001
localhost:30001> SET hello world
OK
localhost:30001> SET foo bar
-> Redirected to slot [12182] located at 127.0.0.1:30003
OK
127.0.0.1:30003> GET foo
"bar"
127.0.0.1:30003> GET hello
-> Redirected to slot [866] located at 127.0.0.1:30001
"world"
127.0.0.1:30001>


如果在上面使用命令,出现有关ruby的错误的话,请使用一下命令安装有关ruby软件包

yum install ruby


gem install redis


这样的基本配置集群,是不能够满足业务的需要的,如果其中的一个master出现问题,就会导致整个集群不能够使用。





所以下面的主从配置就是要改变这样的情况

redis主从架构集群配置

主从配置的示意图



这样的一种配置是每个master都有一个slave,当其中的一个master failover,而其下的slave将会变成master,但是此时的master将是没有salve的。



这样的话我们可以让一个master拥有多个的slave来连接,但是过多的slave会影响到系统的性能,所以我们采用的是让第一个拥有多个slave,当其中的一个master出现问题,出现问题的master下的slave成为master,而让第一个下面的slave成为刚刚成为master的slave。



当出现问题后,整体架构的演变



配置方法

我在根目录下新建了redis-cluster目录,在目录中又新建了7个文件夹,分别是6379,6380,6381,6382,6383,6384,6385分别对应的是redis的服务端口,同时在这些目录中copy了redis.conf文件,同时将redis-server这个文件copy到redis-cluster文件夹中。

将redis.conf文件中添加如下信息,并且将port改成你需要的端口号。

cluster-enabled yes
cluster-config-file nodes-[端口号].conf
cluster-node-timeout 2000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes


首先启动6379,6380,6381端口号服务器

redis-server /redis-cluster/6379/redis.conf
redis-server /redis-cluster/6380/redis.conf
redis-server /redis-cluster/6381/redis.conf


刚启动好的服务器,集群是没有成功的,可以先进入到redis的交互模式
redis-cli -c -p 6379
中输入
CLUSTER INFO
命令查看

cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:1
cluster_size:0
cluster_current_epoch:0
cluster_my_epoch:0
cluster_stats_messages_sent:0
cluster_stats_messages_received:0


下面为3个master分配slots

redis-cli -c -p 6379 CLUSTER ADDSLOTS {0..5460}
redis-cli -c -p 6380 CLUSTER ADDSLOTS {5461..10922}
redis-cli -c -p 6381 CLUSTER ADDSLOTS {10923..16383}


配置epoch

redis-cli -c -p 6379 CLUSTER SET-CONFIG-EPOCH 1
redis-cli -c -p 6380 CLUSTER SET-CONFIG-EPOCH 2
redis-cli -c -p 6381 CLUSTER SET-CONFIG-EPOCH 3


使用
CLUSTER MEET
让彼此节点能够互相识别

redis-cli -c -p 6379 CLUSTER MEET 127.0.0.1 6380
redis-cli -c -p 6379 CLUSTER MEET 127.0.0.1 6381


此时可以使用
CLUSTER INFO
查看cluster信息

cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:3
cluster_size:3
cluster_current_epoch:3
cluster_my_epoch:1
cluster_stats_messages_sent:164
cluster_stats_messages_received:144


下面为6379添加slave(6382,6383)

要做的首先是启动6382和6383的服务器

redis-server /redis-cluster/6382/redis.conf
redis-server /redis-cluster/6383/redis.conf


然后让6382和6383的服务器可以与6379服务器能够互相识别

redis-cli -c -p 6379 CLUSTER MEET 127.0.0.1 6382
redis-cli -c -p 6379 CLUSTER MEET 127.0.0.1 6383


查看节点信息,复制6379的节点信息

redis-cli -c -p 6379 CLUSTER NODES


出现信息为,该信息是我整个配置之后的信息,之前刚开始配的被清屏了

6ab52dd9fcbdf88c4ed6363246608f6f4333c90f 127.0.0.1:6380 master - 0 1484032464000 2 connected 5461-10922
ecd9fa56b7779cd1f444e2514a908674649abaad 127.0.0.1:6379 myself,master - 0 0 1 connected 0-5460
119e2b238d4e2d2fe63a1a69a8de3308c7d03360 127.0.0.1:6381 master - 0 1484032464000 3 connected 10923-16383
4aac879e53426d58c2b762531af4ed548b7f08b4 127.0.0.1:6385 slave 119e2b238d4e2d2fe63a1a69a8de3308c7d03360 0 1484032464614 3 connected
6a43e1bf3acc59c89dc33b728c4a5e5655186d69 127.0.0.1:6384 slave 6ab52dd9fcbdf88c4ed6363246608f6f4333c90f 0 1484032464000 2 connected
1a92cb53d20a04f38207d339d36682dec9f0b1ac 127.0.0.1:6382 slave ecd9fa56b7779cd1f444e2514a908674649abaad 0 1484032464000 1 connected
90695e8ff62455d97de9eacae4c171ff68d3532e 127.0.0.1:6383 slave ecd9fa56b7779cd1f444e2514a908674649abaad 0 1484032464000 1 connected


我的6379节点信息为ecd9fa56b7779cd1f444e2514a908674649abaad

为6379添加slave

redis-cli -c -p 6382 CLUSTER REPLICATE ecd9fa56b7779cd1f444e2514a908674649abaad
redis-cli -c -p 6383 CLUSTER REPLICATE ecd9fa56b7779cd1f444e2514a908674649abaad


下面就是为master[6380]配置slave[6384],为master[6381]配置slave[6385],配置步骤如上所述。

slave服务器是不予许进行写操作的,如果想要让slave进行写操作,使用READWRITE命令,不建议slave进行写操作,READONLY就可以
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis 集群