码迷,mamicode.com
首页 > 其他好文 > 详细

redis集群

时间:2018-07-10 12:50:06      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:版本   false   prefix   time   direct   自动跳转   启动   ati   2.4.1   

说明:本实验是在2台服务器上搭建启动6个redis实例做的伪集群

环境:

服务器1:10.129.24.16   redis实例5001、5002、5003

服务器2:10.129.24.7     redis实例5004、5005、5006

一、准备工作

1.1、安装redis

[root@Redis-RS01 src]# tar -zxvf redis-3.0.7.tar.gz 
[root@Redis-RS01 src]# cd redis-3.0.7
[root@Redis-RS01 redis-3.0.7]# make && make PREFIX=/usr/local/redis install



1.2、配置文件

daemonize yes
pidfile /var/run/redis_5001.pid
port 5001
bind 10.129.24.16
logfile "/usr/local/redis-cluster/5001/log/redis.log"
dir /usr/local/redis-cluster/5001/data
cluster-enabled yes
cluster-config-file nodes5001.conf
cluster-node-timeout 15000
appendonly yes



1.3、创建集群目录(多个redis实例)

[root@Redis-RS01 redis-3.0.7]# mkdir -p /usr/local/redis-cluster/{5001/{data,log},5002/{data,log},5003/{data,log}}
[root@Redis-RS01 redis-3.0.7]# cp redis.conf /usr/local/redis-cluster/5001/
[root@Redis-RS01 redis-3.0.7]# cp redis.conf /usr/local/redis-cluster/5002/
[root@Redis-RS01 redis-3.0.7]# sed -i 's/5001/5002/g' /usr/local/redis-cluster/5002/redis.conf
[root@Redis-RS01 redis-3.0.7]# cp redis.conf /usr/local/redis-cluster/5003/
[root@Redis-RS01 redis-3.0.7]# sed -i 's/5001/5003/g' /usr/local/redis-cluster/5002/redis.conf



二、配置redis集群

2.1、redis3.0以后集群的创建命令是ruby实现的,所以要先安装ruby环境

[root@Redis-RS01 redis-3.0.7]# yum -y install ruby
[root@Redis-RS01 redis-3.0.7]# yum -y install rubygems
[root@Redis-RS01 redis-3.0.7]# gem install redis


这里安装redis可能会报错:

gem install redis

    ERROR:  Error installing redis:

     redis requires Ruby version >= 2.2.2.

解决办法,安装大于2.2.2的ruby版本

[root@Redis-RS01 redis-3.0.7]# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

[root@Redis-RS01 redis-3.0.7]# curl -sSL https://get.rvm.io | bash -s stable
[root@Redis-RS01 redis-3.0.7]# source /usr/local/rvm/scripts/rvm
[root@Redis-RS01 redis-3.0.7]# rvm install 2.4.1
[root@Redis-RS01 redis-3.0.7]# rvm use 2.4.1
[root@Redis-RS01 redis-3.0.7]# rvm use 2.4.1 --default
[root@Redis-RS01 redis-3.0.7]# gem install redis
Fetching: redis-4.0.1.gem (100%)
    Successfully installed redis-4.0.1
    Parsing documentation for redis-4.0.1
    Installing ri documentation for redis-4.0.1
    Done installing documentation for redis after 3 seconds
    1 gem installed



另一台服务器的配置和上面相同,就不在重复写了,注意配置文件中的端口和目录要配置正确



2.2、启动所有redis实例

[root@Redis-RS01 redis-3.0.7]# /usr/local/redis/bin/redis-server /usr/local/redis-cluster/5001/redis.conf
[root@Redis-RS01 redis-3.0.7]# /usr/local/redis/bin/redis-server /usr/local/redis-cluster/5002/redis.conf
[root@Redis-RS01 redis-3.0.7]# /usr/local/redis/bin/redis-server /usr/local/redis-cluster/5003/redis.conf



三、启动redis集群

3.1、redis-trib.rb命令的参数

1、 create :创建集群

2、 check :检查集群

3、 info :查看集群信息

4、 fix :修复集群

5、 reshard :在线迁移slot

6、 rebalance :平衡集群节点slot数量

7、 add-node :将新节点加入集群

8、 del-node :从集群中删除节点

9、 set-timeout :设置集群节点间心跳连接的超时时间

10、 call :在集群全部节点上执行命令

11、 import :将外部redis数据导入集群

[root@Redis-RS01 5001]# /usr/local/redis-cluster/bin/redis-trib.rb create --replicas 1 10.129.24.16:5001 10.129.24.16:5002 10.129.24.16:5003  10.129.24.7:5004 10.129.24.7:5005 10.129.24.7:5006
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
10.129.24.16:5001
10.129.24.7:5004
10.129.24.16:5002
Adding replica 10.129.24.7:5005 to 10.129.24.16:5001
Adding replica 10.129.24.16:5003 to 10.129.24.7:5004
Adding replica 10.129.24.7:5006 to 10.129.24.16:5002
M: 5cf7204523d806c7cf1bac7eb0b2fd4fcbf2a94b 10.129.24.16:5001
   slots:0-5460 (5461 slots) master
M: 85b7d3393161eef4b5faebc75b5f3be6c3cca2d9 10.129.24.16:5002
   slots:10923-16383 (5461 slots) master
S: 51d0615f10b6912e1e88bbca6cd4e8d843541f3a 10.129.24.16:5003
   replicates bdf828d85ecb97612d16dc20803d25ade427e7e6
M: bdf828d85ecb97612d16dc20803d25ade427e7e6 10.129.24.7:5004
   slots:5461-10922 (5462 slots) master
S: 4a06022c8d4354cecbce3dc769173be0b100a939 10.129.24.7:5005
   replicates 5cf7204523d806c7cf1bac7eb0b2fd4fcbf2a94b
S: 958e79522a2eb81134a2e62d9fc991fe14320af4 10.129.24.7:5006
   replicates 85b7d3393161eef4b5faebc75b5f3be6c3cca2d9
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 10.129.24.16:5001)
M: 5cf7204523d806c7cf1bac7eb0b2fd4fcbf2a94b 10.129.24.16:5001
   slots:0-5460 (5461 slots) master
M: 85b7d3393161eef4b5faebc75b5f3be6c3cca2d9 10.129.24.16:5002
   slots:10923-16383 (5461 slots) master
M: 51d0615f10b6912e1e88bbca6cd4e8d843541f3a 10.129.24.16:5003
   slots: (0 slots) master
   replicates bdf828d85ecb97612d16dc20803d25ade427e7e6
M: bdf828d85ecb97612d16dc20803d25ade427e7e6 10.129.24.7:5004
   slots:5461-10922 (5462 slots) master
M: 4a06022c8d4354cecbce3dc769173be0b100a939 10.129.24.7:5005
   slots: (0 slots) master
   replicates 5cf7204523d806c7cf1bac7eb0b2fd4fcbf2a94b
M: 958e79522a2eb81134a2e62d9fc991fe14320af4 10.129.24.7:5006
   slots: (0 slots) master
   replicates 85b7d3393161eef4b5faebc75b5f3be6c3cca2d9
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@Redis-RS01 5001]#

--replicas 1 表示为每个主节点创建一个从节点


至此,redis集群创建完成,下面进行验证



四、验证

4.1、连接redis

[root@Redis-RS01 5001]# /usr/local/redis/bin/redis-cli  -c -h 10.129.24.16 -p 5001
10.129.24.16:5001> keys *
(empty list or set)
10.129.24.16:5001>



4.2、设置一个key

10.129.24.16:5001> set name "john.gou"
-> Redirected to slot [5798] located at 10.129.24.7:5004
OK
10.129.24.7:5004>

我们看到已经成功写入,并且集群将数据自动分配到了5789槽中,5004的主redis实例上



4.3、连接其他实例尝试读取刚才设置的key

[root@Redis-RS01 5001]# /usr/local/redis/bin/redis-cli -c -h 10.129.24.16 -p 5002
10.129.24.16:5002> get name
-> Redirected to slot [5798] located at 10.129.24.7:5004
"john.gou"

[root@Redis-RS01 5001]# /usr/local/redis/bin/redis-cli -c -h 10.129.24.7 -p 5005
10.129.24.7:5005> get name
-> Redirected to slot [5798] located at 10.129.24.7:5004
"john.gou"

[root@Redis-RS01 5001]# /usr/local/redis/bin/redis-cli -c -h 10.129.24.16 -p 5003
10.129.24.16:5003> get name
-> Redirected to slot [5798] located at 10.129.24.7:5004
"john.gou"

其他主实例也可以读取到



4.4、查看当前集群主从状态

[root@iZ28tqwgn5qZ redis-cluster]# /usr/local/redis-cluster/bin/redis-trib.rb check 10.129.24.16:5001
>>> Performing Cluster Check (using node 10.129.24.16:5001)
M: 5cf7204523d806c7cf1bac7eb0b2fd4fcbf2a94b 10.129.24.16:5001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 85b7d3393161eef4b5faebc75b5f3be6c3cca2d9 10.129.24.16:5002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: 958e79522a2eb81134a2e62d9fc991fe14320af4 10.129.24.7:5006
   slots: (0 slots) slave
   replicates 85b7d3393161eef4b5faebc75b5f3be6c3cca2d9
M: bdf828d85ecb97612d16dc20803d25ade427e7e6 10.129.24.7:5004
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 4a06022c8d4354cecbce3dc769173be0b100a939 10.129.24.7:5005
   slots: (0 slots) slave
   replicates 5cf7204523d806c7cf1bac7eb0b2fd4fcbf2a94b
S: 51d0615f10b6912e1e88bbca6cd4e8d843541f3a 10.129.24.16:5003
   slots: (0 slots) slave
   replicates bdf828d85ecb97612d16dc20803d25ade427e7e6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

5001、5004、5002都是主实例,从实例分别是5005、5003、5006,下面我们关闭5004主实例,验证5003是否会升级为主接替5004实例



4.5、关掉5004实例验证数据可用性

[root@iZ28tqwgn5qZ redis-cluster]# ps -ef |grep redis
root      2550     1  0 15:32 ?        00:00:01 /usr/local/redis/bin/redis-server 10.129.24.7:5004 [cluster]              
root      2558     1  0 15:32 ?        00:00:01 /usr/local/redis/bin/redis-server 10.129.24.7:5005 [cluster]              
root      2566     1  0 15:32 ?        00:00:01 /usr/local/redis/bin/redis-server 10.129.24.7:5006 [cluster]              
root      3876 12717  0 15:58 pts/7    00:00:00 grep redis
[root@iZ28tqwgn5qZ redis-cluster]# kill -9 2550

[root@iZ28tqwgn5qZ redis-cluster]# /usr/local/redis/bin/redis-cli -c -h 10.129.24.16 -p 5001
10.129.24.16:5001> 
10.129.24.16:5001> get name
-> Redirected to slot [5798] located at 10.129.24.16:5003
"john.gou"
10.129.24.16:5003>

可以看到已经自动跳转到了5003实例上,刚才是5004



4.6、再次查看集群状态

[root@iZ28tqwgn5qZ redis-cluster]# /usr/local/redis-cluster/bin/redis-trib.rb check 10.129.24.16:5001
>>> Performing Cluster Check (using node 10.129.24.16:5001)
M: 5cf7204523d806c7cf1bac7eb0b2fd4fcbf2a94b 10.129.24.16:5001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 85b7d3393161eef4b5faebc75b5f3be6c3cca2d9 10.129.24.16:5002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: 958e79522a2eb81134a2e62d9fc991fe14320af4 10.129.24.7:5006
   slots: (0 slots) slave
   replicates 85b7d3393161eef4b5faebc75b5f3be6c3cca2d9
S: 4a06022c8d4354cecbce3dc769173be0b100a939 10.129.24.7:5005
   slots: (0 slots) slave
   replicates 5cf7204523d806c7cf1bac7eb0b2fd4fcbf2a94b
M: 51d0615f10b6912e1e88bbca6cd4e8d843541f3a 10.129.24.16:5003
   slots:5461-10922 (5462 slots) master
   0 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

5003实例已经接替5004变成主了



4.7、恢复5004实例验证是否会自动加入集群并接替5004变为主实例

[root@iZ28tqwgn5qZ redis-cluster]# /usr/local/redis/bin/redis-server ./5004/redis.conf 

[root@Redis-RS01 redis-cluster]# ./bin/redis-trib.rb check 10.129.24.16:5001
>>> Performing Cluster Check (using node 10.129.24.16:5001)
M: 5cf7204523d806c7cf1bac7eb0b2fd4fcbf2a94b 10.129.24.16:5001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 85b7d3393161eef4b5faebc75b5f3be6c3cca2d9 10.129.24.16:5002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: 958e79522a2eb81134a2e62d9fc991fe14320af4 10.129.24.7:5006
   slots: (0 slots) slave
   replicates 85b7d3393161eef4b5faebc75b5f3be6c3cca2d9
S: bdf828d85ecb97612d16dc20803d25ade427e7e6 10.129.24.7:5004
   slots: (0 slots) slave
   replicates 51d0615f10b6912e1e88bbca6cd4e8d843541f3a
S: 4a06022c8d4354cecbce3dc769173be0b100a939 10.129.24.7:5005
   slots: (0 slots) slave
   replicates 5cf7204523d806c7cf1bac7eb0b2fd4fcbf2a94b
M: 51d0615f10b6912e1e88bbca6cd4e8d843541f3a 10.129.24.16:5003
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

可以看到,主恢复后不会接替现有的5003实例变为主,直到5003实例故障后从才会接替主

redis集群

标签:版本   false   prefix   time   direct   自动跳转   启动   ati   2.4.1   

原文地址:http://blog.51cto.com/gouyc/2139668

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!