Redis集群搭建与简单使用

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

redis采用 redis-3.2.9.tar.gz 版本。

虚拟机环境:CentOS release 6.8 (Final)

部署目录及文件目录

软件安装存放目录:/opt/install

软件日志存放目录:/opt/logs

软件数据存放目录:/opt/data

安装过程:

1、下载并解压

cd /root/software

wget http://download.redis.io/releases/redis-3.2.9.tar.gz

tar zxvf redis-3.2.9.tar.gz -C /opt/install/

2、编译安装,并创建bin,conf目录

cd /opt/install/redis-3.2.9/
make && make install
mkdir bin conf

3、将src下的一些文件拷贝到/opt/install/redis-3.2.9/bin目录下,并软链接到/usr/bin/

cd src

cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server redis-trib.rb ../bin/

ln -s /opt/install/redis-3.2.9/bin/redis-* /usr/bin/

4、在conf目录下创建redis-6382.conf,redis-6383.conf,redis-6384.conf文件,并将redis.conf拷贝这三个配置文件进行修改

cd /opt/install/redis-3.2.9/
cp redis.con conf/redis-6382.conf
cp redis.con conf/redis-6383.conf
cp redis.con conf/redis-6384.conf

分别修改这三个配置文件,修改如下内容(端口6282、6283、6284对应做相应的更改)

# START CONFIG
daemonize  yes
pidfile /var/run/redis-6382.pid
port 6382
bind 0.0.0.0
protected-mode no
unixsocket /var/lib/redis/redis-6382.sock
unixsocketperm 700
timeout 300
loglevel notice
logfile /opt/logs/redis/redis-6382.log
databases 16
dbfilename dump-6382.rdb
dir /opt/data/redis

# AOF STAND ALONG
appendonly yes
appendfilename appendonly-6382.aof
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 80-100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
 
# CLUSTER CONFIG
cluster-enabled yes
cluster-config-file /opt/install/redis-3.2.9/conf/nodes-6382.conf 
cluster-node-timeout 5000

创建配置文件中对应的一些目录

mkdir -p /opt/logs/redis /var/lib/redis /opt/data/redis

5、启动各节点,可以在bin目录下写个简单启动脚本start.sh

第一台上
vim start.sh

#!/bin/bash

/opt/install/redis-3.2.9/bin/redis-server /opt/install/redis-3.2.9/conf/redis-6379.conf
sleep 1
/opt/install/redis-3.2.9/bin/redis-server /opt/install/redis-3.2.9/conf/redis-6380.conf
sleep 1
/opt/install/redis-3.2.9/bin/redis-server /opt/install/redis-3.2.9/conf/redis-6381.conf
sleep 1

第二台上
vim start.sh

#!/bin/bash

/opt/install/redis-3.2.9/bin/redis-server /opt/install/redis-3.2.9/conf/redis-6382.conf
sleep 1
/opt/install/redis-3.2.9/bin/redis-server /opt/install/redis-3.2.9/conf/redis-6383.conf
sleep 1
/opt/install/redis-3.2.9/bin/redis-server /opt/install/redis-3.2.9/conf/redis-6384.conf
sleep 1

6.检查redis启动情况(这里列举其中一台)

ps -ef |grep redis
root       6048      1  0 11:40 ?        00:00:08 /opt/install/redis-3.2.9/bin/redis-server 0.0.0.0:6379 [cluster]                       
root       6053      1  0 11:40 ?        00:00:07 /opt/install/redis-3.2.9/bin/redis-server 0.0.0.0:6380 [cluster]                       
root       6058      1  0 11:40 ?        00:00:09 /opt/install/redis-3.2.9/bin/redis-server 0.0.0.0:6381 [cluster]                       
root      41921   2791  0 14:05 pts/3    00:00:00 grep redis

netstat -ntlp|grep redis
tcp        0      0 0.0.0.0:16381               0.0.0.0:*                   LISTEN      6058/redis-server 0 
tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      6048/redis-server 0 
tcp        0      0 0.0.0.0:6380                0.0.0.0:*                   LISTEN      6053/redis-server 0 
tcp        0      0 0.0.0.0:6381                0.0.0.0:*                   LISTEN      6058/redis-server 0 
tcp        0      0 0.0.0.0:16379               0.0.0.0:*                   LISTEN      6048/redis-server 0 
tcp        0      0 0.0.0.0:16380               0.0.0.0:*                   LISTEN      6053/redis-server 0 

7、创建集群

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

./redis-trib.rb create --replicas 1 192.168.190.111:6379 192.168.190.111:6380 192.168.190.111:6381 192.168.190.112:6382 192.168.190.112:6383 192.168.190.112:6384

其中,前三个ip:pront 为第一台机器的节点,剩下三个为第二台机器

出错了,这个工具是用 ruby 实现的,所以需要安装 ruby,centos6系列ruby版本太低,需要源码安装ruby,然后按照上述步骤创建集群。

源码安装ruby详见:https://www.cnblogs.com/zhong-11/articles/9884883.html

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

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

8、集群验证

在第一台机器上连接集群的6380端口的节点,在另外一台连接6382节点,连接方式为

redis-cli -h 192.168.190.111 -c -p 6380  ,加参数 -C 可连接到集群,因为上面 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略。

在6382节点执行命令:set hello world,执行结果如下:

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

说明集群运作正常,至此Redis集群搭建完成,对应访问(ip:pront):

192.168.190.111:6379 192.168.190.111:6380 192.168.190.111:6381 192.168.190.112:6382 192.168.190.112:6383 192.168.190.112:6384

简单说一下原理

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

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

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

需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。

posted @ 2018-11-01 15:01  灬龍灬  阅读(191)  评论(0)    收藏  举报