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

Redis集群搭建与简单使用

2018-02-28 00:00 197 查看
介绍安装环境与版本

用两台虚拟机模拟6个节点,一台机器3个节点,创建出3master、3salve环境。

redis采用redis-3.2.4版本。

两台虚拟机都是CentOS,一台CentOS6.5(IP:192.168.31.245),一台CentOS7(IP:192.168.31.210)。

安装过程

1.下载并解压


cd/root/software

wgethttp://download.redis.io/releases/redis-3.2.4.tar.gz

tar-zxvfredis-3.2.4.tar.gz 

2.编译安装

cdredis-3.2.4
make&&makeinstall
3.将redis-trib.rb复制到/usr/local/bin目录下

cdsrc
cpredis-trib.rb/usr/local/bin/  
4.创建Redis节点

首先在192.168.31.245机器上/root/software/redis-3.2.4目录下创建redis_cluster目录;

mkdirredis_cluster  
在redis_cluster目录下,创建名为7000、7001、7002的目录,并将redis.conf拷贝到这三个目录中

mkdir700070017002<br>cpredis.confredis_cluster/7000
cpredis.confredis_cluster/7001
cpredis.confredis_cluster/7002  
分别修改这三个配置文件,修改如下内容

port7000//端口7000,7002,7003
bind本机ip//默认ip为127.0.0.1需要改为其他节点机器可访问的ip否则创建集群时无法访问对应的端口,无法创建集群
daemonizeyes//redis后台运行
pidfile/var/run/redis_7000.pid//pidfile文件对应7000,7001,7002
cluster-enabledyes//开启集群把注释#去掉
cluster-config-filenodes_7000.conf//集群的配置配置文件首次启动自动生成7000,7001,7002
cluster-node-timeout15000//请求超时默认15秒,可自行设置
appendonlyyes//aof日志开启有需要就开启,它会每次写操作都记录一条日志 

接着在另外一台机器上(192.168.31.210),的操作重复以上三步,只是把目录改为7003、7004、7005,对应的配置文件也按照这个规则修改即可

5.启动各个节点

第一台机器上执行
redis-serverredis_cluster/7000/redis.conf
redis-serverredis_cluster/7001/redis.conf
redis-serverredis_cluster/7002/redis.conf

另外一台机器上执行
redis-serverredis_cluster/7003/redis.conf
redis-serverredis_cluster/7004/redis.conf
redis-serverredis_cluster/7005/redis.conf

6.检查redis启动情况

##一台机器<br>ps-ef|grepredis
root610201002:14?00:00:01redis-server127.0.0.1:7000[cluster]
root610241002:14?00:00:01redis-server127.0.0.1:7001[cluster]
root610291002:14?00:00:01redis-server127.0.0.1:7002[cluster]

netstat-tnlp|grepredis
tcp00127.0.0.1:170000.0.0.0:*LISTEN61020/redis-server
tcp00127.0.0.1:170010.0.0.0:*LISTEN61024/redis-server
tcp00127.0.0.1:170020.0.0.0:*LISTEN61029/redis-server
tcp00127.0.0.1:70000.0.0.0:*LISTEN61020/redis-server
tcp00127.0.0.1:70010.0.0.0:*LISTEN61024/redis-server
tcp00127.0.0.1:70020.0.0.0:*LISTEN61029/redis-server
1
2
3
4
5
6
7
8
9
10
11
12
13

##另外一台机器
ps-ef|grepredis
root99571002:32?00:00:01redis-server127.0.0.1:7003[cluster]
root99641002:32?00:00:01redis-server127.0.0.1:7004[cluster]
root99711002:32?00:00:01redis-server127.0.0.1:7005[cluster]
root100654744002:38pts/000:00:00grep--color=autoredis
netstat-tlnp|grepredis
tcp00127.0.0.1:170030.0.0.0:*LISTEN9957/redis-server1
tcp00127.0.0.1:170040.0.0.0:*LISTEN9964/redis-server1
tcp00127.0.0.1:170050.0.0.0:*LISTEN9971/redis-server1
tcp00127.0.0.1:70030.0.0.0:*LISTEN9957/redis-server1
tcp00127.0.0.1:70040.0.0.0:*LISTEN9964/redis-server1
tcp00127.0.0.1:70050.0.0.0:*LISTEN9971/redis-server1

7.创建集群

Redis官方提供了redis-trib.rb这个工具,就在解压目录的src目录中,第三步中已将它复制到/usr/local/bin目录中,可以直接在命令行中使用了。使用下面这个命令即可完成安装。

redis-trib.rbcreate--replicas1192.168.31.245:7000192.168.31.245:7001192.168.31.245:7002192.168.31.210:7003192.168.31.210:7004192.168.31.210:7005
其中,前三个ip:port为第一台机器的节点,剩下三个为第二台机器。

等等,出错了。这个工具是用ruby实现的,所以需要安装ruby。安装命令如下:

yum-yinstallrubyruby-develrubygemsrpm-build

geminstallredis

之后再运行redis-trib.rb命令,会出现如下提示:



输入yes即可,然后出现如下内容,说明安装成功。


  

8.集群验证

在第一台机器上连接集群的7002端口的节点,在另外一台连接7005节点,连接方式为redis-cli-h192.168.31.245-c-p7002,加参数-C可连接到集群,因为上面redis.conf将bind改为了ip地址,所以-h参数不可以省略。

在7005节点执行命令sethelloworld,执行结果如下:



然后在另外一台7002端口,查看key为hello的内容,gethello,执行结果如下:



说明集群运作正常。

简单说一下原理

rediscluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。

Redis集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽(hashslot)的方式来分配的。rediscluster默认分配了16384个slot,当我们set一个key时,会用CRC16算法来取模得到所属的slot,然后将这个key分到哈希槽区间的节点上,具体算法就是:CRC16(key)%16384。所以我们在测试的时候看到set和get的时候,直接跳转到了7000端口的节点。

Redis集群会把数据存在一个master节点,然后在这个master和其对应的salve之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的master节点获取数据。只有当一个master挂掉之后,才会启动一个对应的salve节点,充当master。

需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis