七,redis集群

来源:互联网 发布:不基于比较的排序算法 编辑:程序博客网 时间:2024/05/16 13:07

redis基本集群配置

整体示意图

配置方法

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

[jiang@localhost redis-3.2.6]$ ls00-RELEASENOTES  CONTRIBUTING  deps     Makefile   README.md   runtest          runtest-sentinel  src    utilsBUGS             COPYING       INSTALL  MANIFESTO  redis.conf  runtest-cluster  sentinel.conf     tests[jiang@localhost redis-3.2.6]$ cd utils[jiang@localhost utils]$ lsbuild-static-symbols.tcl  corrupt_rdb.c   generate-command-help.rb  hyperloglog        lru            redis_init_script      redis-sha1.rb  speed-regression.tclcluster_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]$ ls30001.log  30004.log  appendonly-30001.aof  appendonly-30004.aof  create-cluster  dump-30003.rdb  dump-30006.rdb    nodes-30003.conf  nodes-30006.conf30002.log  30005.log  appendonly-30002.aof  appendonly-30005.aof  dump-30001.rdb  dump-30004.rdb  nodes-30001.conf  nodes-30004.conf  README30003.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 30001Starting 30002Starting 30003Starting 30004Starting 30005Starting 30006

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

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

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

$ redis-cli -c -h localhost -p 30001localhost:30001> SET hello worldOKlocalhost:30001> SET foo bar-> Redirected to slot [12182] located at 127.0.0.1:30003OK127.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 yescluster-config-file nodes-[端口号].confcluster-node-timeout 2000cluster-slave-validity-factor 10cluster-migration-barrier 1cluster-require-full-coverage yes

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

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

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

cluster_state:failcluster_slots_assigned:0cluster_slots_ok:0cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:1cluster_size:0cluster_current_epoch:0cluster_my_epoch:0cluster_stats_messages_sent:0cluster_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 1redis-cli -c -p 6380 CLUSTER SET-CONFIG-EPOCH 2redis-cli -c -p 6381 CLUSTER SET-CONFIG-EPOCH 3

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

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

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

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

下面为6379添加slave(6382,6383)
要做的首先是启动6382和6383的服务器

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

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

redis-cli -c -p 6379 CLUSTER MEET 127.0.0.1 6382redis-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-10922ecd9fa56b7779cd1f444e2514a908674649abaad 127.0.0.1:6379 myself,master - 0 0 1 connected 0-5460119e2b238d4e2d2fe63a1a69a8de3308c7d03360 127.0.0.1:6381 master - 0 1484032464000 3 connected 10923-163834aac879e53426d58c2b762531af4ed548b7f08b4 127.0.0.1:6385 slave 119e2b238d4e2d2fe63a1a69a8de3308c7d03360 0 1484032464614 3 connected6a43e1bf3acc59c89dc33b728c4a5e5655186d69 127.0.0.1:6384 slave 6ab52dd9fcbdf88c4ed6363246608f6f4333c90f 0 1484032464000 2 connected1a92cb53d20a04f38207d339d36682dec9f0b1ac 127.0.0.1:6382 slave ecd9fa56b7779cd1f444e2514a908674649abaad 0 1484032464000 1 connected90695e8ff62455d97de9eacae4c171ff68d3532e 127.0.0.1:6383 slave ecd9fa56b7779cd1f444e2514a908674649abaad 0 1484032464000 1 connected

我的6379节点信息为ecd9fa56b7779cd1f444e2514a908674649abaad

为6379添加slave

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

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

slave服务器是不予许进行写操作的,如果想要让slave进行写操作,使用READWRITE命令,不建议slave进行写操作,READONLY就可以

0 0
原创粉丝点击