redis集群搭建 linux版(RedisCluster集群搭建步骤)

  1. 了解(前言)

    今天来搭建一个Redis-Cluster, redis是在3.0.0版本后支持了Redis-Cluster集群, 它是Redis官方提 出的解决方案, Redis-Cluster采用无中心结构, 每个节点保存数据和整个集群状态, 每个节点都和其他所有节点连接.

    我们为什么需要用到redis集群?
    一、单击版redis内存容量有限的问题
    二、高并发场景下, 单击版redis性能不高
    三、单击版redis不具有高可用性, 不能应用于生产环境

  2. 先在linux上安装 redis

      1.0关闭防火墙命令service iptables stop
    
       1.1卸载redis命令  ——>rm -rf redis
       
       安装redis命令  wget http://download.redis.io/releases/redis-3.0.0.tar.gz
       
       1.2安装redis命令  ——>先解压redis压缩包  tar xf redis-3.0.0.tar.gz        
       
       1.3为解压好的文档重命名redis-3.0.0
       
       1.4重命名命令 ——>  mv redis-3.0.0 redis6379
       
       1.5编译redis源码,cd到redis6379路径下  ——>cd redis6379
       
       1.6编译源码命令 ——>make
       
       1.7安装redis命令 ——> make install
        俩个命令也可以同时进行  ——>make && make install
        
        1.8创建存放多个实例的目录我是在 cd /usr下创建的
       	命令如下——>
       	mkdir 7000 7001 7002 7003 7004 7005 0000
       	
       	1.9修改配置文件先拷贝一个redis.conf
       	命令如下——>cp redis6379/redis.conf  /usr/7000
       	
       	修改配置文件中下面选项
       	
       	
       	port 7000
       	daemonize yes
       	cluster-enabled yes
       	cluster-config-file nodes.conf
       	cluster-node-timeout 5000
       	appendonly yes
       	文件中的 cluster-enabled 选项用于开实例的集群模式, 而 cluster-conf-file 选项则设定了保存节点配置文件的路径, 默认值为nodes.conf 。其他参数相信童鞋们都知道。节点配置文件无须人为修改, 它由 Redis 集群在启动时创建, 并在有需要时自动进行更新。
       	
       	补充虚拟机查询文件关键字:
       	如果是用vi打开文件后,在命令行下输入“/关键字”
       	如果是在没有打开文件的前提就用"cat 文件名 | grep "关键字""
       	修改完成后,把修改完成的redis.conf复制到7001-7005目录下,并且端口修改成和文件夹对应。
       	
       	命令如下:    必须在   cd /usr/7000  文件下操作
       	cp  redis.conf  /usr/7003
       	
       	cp  redis.conf  /usr/7002
       	
       	cp  redis.conf  /usr/7001
       	
       	cp  redis.conf  /usr/7004
       	
       	cp  redis.conf  /usr/7005
       	
       	并且端口修改成和文件夹对应。
       	
       	
       	2.0分别启动6个redis实例
       	cd /usr/7000
       	redis-server redis.conf
       	cd /usr/7001
       	redis-server redis.conf
       	cd /usr/7002
       	redis-server redis.conf
       	cd /usr/7003
       	redis-server redis.conf
       	cd /usr/7004
       	redis-server redis.conf
       	cd /usr/7005
       	redis-server redis.conf
       	
       查看进程否存在。 ps -ef | grep redis
    
2.1.执行命令创建集群,首先安装依赖,否则创建集群失败。

yum install ruby rubygems -y

安装gem-redis
下载地址:https://rubygems.org/gems/redis/versions/3.0.0

下载好的文件

安装文件命令

gem install redis -v 3.0.0

复制集群管理程序到/usr/0000

cp redis6379/src/redis-trib.rb /usr/0000

创建集群:

cd到/usr/0000文件下执行以下命令

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


命令的意义如下:
给定 redis-trib.rb 程序的命令是 create , 这表示我们希望创建一个新的集群。
选项 --replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
之后跟着的其他参数则是实例的地址列表, 我们希望程序使用这些地址所指示的实例来创建新集群。
简单来说, 以上命令的意思就是让 redis-trib 程序创建一个包含三个主节点和三个从节点的集群。
接着, redis-trib 会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes , 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 并按下回车确认之后, 集群就会将配置应用到各个节点, 并连接起(join)各个节点 —— 也即是, 让各个节点开始互相通讯:
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.
一切正常输出以下信息:
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
测试 Redis 集群比较简单的办法就是使用 redis-rb-cluster 或者 redis-cli , 接下来我们将使用 redis-cli 为例来进行演示:
[root@redis-server ~]# redis-cli -c -p 7001
127.0.0.1:7001> set name yayun
OK
127.0.0.1:7001> get name
"yayun"
127.0.0.1:7001> 
我们可以看看还有哪些命令可以用:
[root@redis-server ~]# redis-trib help
Usage: redis-trib <command> <options> <arguments ...>

  set-timeout     host:port milliseconds
  add-node        new_host:new_port existing_host:existing_port
                  --master-id <arg>
                  --slave
  fix             host:port
  help            (show this help)
  del-node        host:port node_id
  import          host:port
                  --from <arg>
  check           host:port
  call            host:port command arg arg .. arg
  create          host1:port1 ... hostN:portN
                  --replicas <arg>
  reshard         host:port
                  --yes
                  --to <arg>
                  --from <arg>
                  --slots <arg>

For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
[root@redis-server ~]# 
可以看见有add-node,不用想了,肯定是添加节点。那么del-node就是删除节点。还有check肯定就是检查状态了。
[root@redis-server ~]#  redis-cli -p 7000 cluster nodes 
2d03b862083ee1b1785dba5db2987739cf3a80eb 127.0.0.1:7001 master - 0 1428293673322 2 connected 5461-10922
37b251500385929d5c54a005809377681b95ca90 127.0.0.1:7003 slave 2774f156af482b4f76a5c0bda8ec561a8a1719c2 0 1428293672305 4 connected
e2e2e692c40fc34f700762d1fe3a8df94816a062 127.0.0.1:7004 slave 2d03b862083ee1b1785dba5db2987739cf3a80eb 0 1428293674340 5 connected
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
9923235f8f2b2587407350b1d8b887a7a59de8db 127.0.0.1:7005 slave 0456869a2c2359c3e06e065a09de86df2e3135ac 0 1428293675362 6 connected
[root@redis-server ~]# 
可以看到7000-7002是master,7003-7005是slave。
故障转移测试:
127.0.0.1:7001> KEYS *
1) "name"
127.0.0.1:7001> get name
"yayun"
127.0.0.1:7001> 
可以看见7001是正常的,并且获取到了key,value,现在kill掉7000实例,再进行查询。
[root@redis-server ~]# ps -ef | grep 7000
root      4168     1  0 11:49 ?        00:00:03 redis-server *:7000 [cluster]
root      4385  4361  0 12:39 pts/3    00:00:00 grep 7000
[root@redis-server ~]# kill 4168
[root@redis-server ~]# ps -ef | grep 7000
root      4387  4361  0 12:39 pts/3    00:00:00 grep 7000
[root@redis-server ~]# redis-cli -c -p 7001
127.0.0.1:7001> get name
"yayun"
127.0.0.1:7001> 
可以正常获取到value,现在看看状态。
[root@redis-server ~]# redis-cli -c -p 7001 cluster nodes
2d03b862083ee1b1785dba5db2987739cf3a80eb 127.0.0.1:7001 myself,master - 0 0 2 connected 5461-10922
0456869a2c2359c3e06e065a09de86df2e3135ac 127.0.0.1:7002 master - 0 1428295271619 3 connected 10923-16383
37b251500385929d5c54a005809377681b95ca90 127.0.0.1:7003 master - 0 1428295270603 7 connected 0-5460
e2e2e692c40fc34f700762d1fe3a8df94816a062 127.0.0.1:7004 slave 2d03b862083ee1b1785dba5db2987739cf3a80eb 0 1428295272642 5 connected
2774f156af482b4f76a5c0bda8ec561a8a1719c2 127.0.0.1:7000 master,fail - 1428295159553 1428295157205 1 disconnected
9923235f8f2b2587407350b1d8b887a7a59de8db 127.0.0.1:7005 slave 0456869a2c2359c3e06e065a09de86df2e3135ac 0 1428295269587 6 connected
[root@redis-server ~]# 
原来的7000端口实例已经显示fail,原来的7003是slave,现在自动提升为master。
关于更多的在线添加节点,删除节点,以及对集群进行重新分片请参考官方文档。

猜你喜欢

转载自blog.csdn.net/cxy_chh/article/details/91466203
今日推荐