淘淘商城20_redis的使用02_redis集群的搭建

1. 集群原理

淘淘商城20_redis的使用02_redis集群的搭建_第1张图片

架构细节:

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

 Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

淘淘商城20_redis的使用02_redis集群的搭建_第2张图片

Key:a

计算a的hash值,例如值为100,100这个槽在server1上,所以a应该放到server1.

Key:hello

计算hello的Hash值:10032,此槽在server2上。Hell可以应该存在server2.

 

2. redis-cluster投票:容错

淘淘商城20_redis的使用02_redis集群的搭建_第3张图片

当半数以上的节点挂掉后,从节点就会接手主节点工作,等主节点修好后,从节点继续作为备用

(1)领着投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.

(2):什么时候整个集群不可用(cluster_state:fail)? 

    a:如果集群任意master挂掉,且当前master(主)没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.

    b:如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.

  ps:当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误

 

3. 创建集群

创建有三个节点的集群:有两个节点挂掉才算是超过半数,这三个节点每个节点得有一主一备。需要6台虚拟机。

搭建一个伪分布式的集群,使用6个redis实例来模拟


3.1 ruby环境

搭建集群环境需要使用到官方提供的ruby脚本。需要安装ruby环境

安装ruby:

yum install ruby

yum install rubygems(包管理工具)

 

3.2 redis集群管理工具redis-trib.rb依赖ruby环境

找到redis-trib.rb,这个文件在redis的源码包里,通过下面命令找到

[root@localhost local]# cd redis-3.0.0

[root@localhost redis-3.0.0]# cd src

[root@localhost src]# ll *.rb

[root@localhost src]#

淘淘商城20_redis的使用02_redis集群的搭建_第4张图片

3.3 安装ruby和redis的接口程序

拷贝redis-3.0.0.gem至/usr/local下,这个文件是运行redis-trib.rb文件的ruby包​​​​​​​

淘淘商城20_redis的使用02_redis集群的搭建_第5张图片

执行:在该目录下执行

gem install redis-3.0.0.gem

淘淘商城20_redis的使用02_redis集群的搭建_第6张图片

成功后显示

淘淘商城20_redis的使用02_redis集群的搭建_第7张图片

4、集群搭建准备工作

先创建6个redis实例

4.1 在local下创建一个目录redis-cluster

[root@localhost local]# mkdir redis-cluster

淘淘商城20_redis的使用02_redis集群的搭建_第8张图片

4.2 复制上面安装好的redis内容

[root@localhostlocal]#cp redis/bin -r redis-cluster/redis01 -p​​​​​​​

淘淘商城20_redis的使用02_redis集群的搭建_第9张图片

4.3 ​​​​​​​进入到redis01这个文件夹里

[root@localhost redis-cluster]# cd redis01/​​​​​​​

4.4 查看目录

Rdb是redis默认的存储数据的方式,这里的dump.rdb里存放的就是redis的数据.

淘淘商城20_redis的使用02_redis集群的搭建_第10张图片

4.5 aof和rdb的区别

redis默认的保存数据的方式有两种:

第一种:是rdb形式,快照的形式,redis默认开启的也是这种方式,这种保存方式是每隔一段时间就会保存一下key值,性能上会高一些。

第二种:是aof方式,这种方式是每隔一秒钟就会保存一次数据,但是这种保存数据的方式性能上会差一些,不推荐使用这种。

4.6 删除dump.rdb

因为我们要搭建集群,要清空里面的所有数据,所以我们要把数据删除了

rm -f dump.rdb

 

5. 集群的搭建规划

5.1 ​​​​​​​6个redis实例,端口号从7001~7006

5.2 修改redis.conf文件

[root@localhost redis01]# vim redis.conf​​​​​​​

5.3 修改端口号

文件比较大,搜索文字,使用 /  后面要搜索的内容

淘淘商城20_redis的使用02_redis集群的搭建_第11张图片

5.4 ​​​​​​​去掉cluster前的注释,指定要做集群

 淘淘商城20_redis的使用02_redis集群的搭建_第12张图片

5.5 保存修改后配置,退出

Esc  ----->:wq 

5.6 在这个文件夹下复制5个文件

执行命令:

淘淘商城20_redis的使用02_redis集群的搭建_第13张图片

5.7 ​​​​​​​改每个实例下的端口号

[root@localhost redis-cluster]# vim redis02/redis.conf​​​​​​​

分别改为 7002,7003.....7006,改完以后保存,进入后按 i 就可以修改了

淘淘商城20_redis的使用02_redis集群的搭建_第14张图片

5.8 复制ruby集群脚本到这个文件夹下

进入redis3.3.0文件夹下的src目录下,复制文件

[root@localhost local]# cd redis-3.0.0

[root@localhost redis-3.0.0]# cd src

[root@localhost src]# cp *.rb /usr/local/redis-cluster

淘淘商城20_redis的使用02_redis集群的搭建_第15张图片

查看结果:

淘淘商城20_redis的使用02_redis集群的搭建_第16张图片

6、 启动每个节点redis服务

6.1 第一种启动方式

分别进入7001、7002、...7006的目录,执行:

./redis-server  redis.conf

6.2 第二种启动方式

因为每次都得进入到文件夹中启动服务比较麻烦,可以创建linux脚本来启动服务,创建方式

6.3 执行命令创建脚本

vim startall.sh

6.4 写脚本

cd redis01

./redis-server redis.conf

cd ..

cd redis02

./redis-server redis.conf

cd ..

cd redis03

./redis-server redis.conf

cd ..

cd redis04

./redis-server redis.conf

cd ..​​​​​​​

cd redis05

./redis-server redis.conf

cd ..

cd redis06

./redis-server redis.conf

cd ..

淘淘商城20_redis的使用02_redis集群的搭建_第17张图片

:wq  保存退出

6.5 变为可执行脚本命令

chmod +x startall.sh

6.6 执行脚本命令

./startall.sh

6.7 查看redis进程命令

ps aux|grep redis

 

7、创建集群

7.1 执行命令

./redis-trib.rb create --replicas 1 192.168.1.105:7001 192.168.1.105:7002 192.168.1.105:7003 192.168.1.105:7004 192.168.1.105:7005  192.168.1.105:7006

淘淘商城20_redis的使用02_redis集群的搭建_第18张图片

注意:

如果执行时报如下错误:

[ERR] Node XXXXXX is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0

解决方法是删除生成的配置文件nodes.conf,如果不行则说明现在创建的结点包括了旧集群的结点信息,需要删除redis的持久化文件后再重启redis,比如:appendonly.aof、dump.rdb

7.2 哈希槽说明

淘淘商城20_redis的使用02_redis集群的搭建_第19张图片

7.3 集群测试

输入连接命令:

连接集群里的任意端口号都可以,但是必须得指定ip地址

[root@localhost redis-cluster]# redis01/redis-cli -h 192.168.1.105 -p 7002 -c

淘淘商城20_redis的使用02_redis集群的搭建_第20张图片

注意:

redis01/redis-cli -h 192.168.1.105 -p 7002 -c ,其中-c表示以集群方式连接redis,-h指定ip地址,-p指定端口号

 

每次往集群里放数据的时候就会根据key值计算出一个对应的槽,放到对应的节点上,get的时候,会根据key值计算出一个hash值从对应的槽里取出数据。

淘淘商城20_redis的使用02_redis集群的搭建_第21张图片

8、关闭redis服务

不能直接关电脑进行关闭,因为redis的数据都是保存到内存中的,有可能丢失数据,所以我们要写一个脚本关闭redis服务

8.1 单机版关闭方式

进入到redis目录

[root@localhost local]# cd redis

[root@localhost redis]# ll

total 4

drwxr-xr-x. 2 root root 4096 Sep 19 15:40 bin

[root@localhost redis]# bin/redis-cli

127.0.0.1:6379> shutdown

not connected> quit

淘淘商城20_redis的使用02_redis集群的搭建_第22张图片

查看6379单机版redis的进程

淘淘商城20_redis的使用02_redis集群的搭建_第23张图片

8.2 集群redis关闭方式

第一种:直接在命令行里执行

[root@localhost redis]# bin/redis-cli -p 7001 shutdown

淘淘商城20_redis的使用02_redis集群的搭建_第24张图片

第二种:写脚本关闭

执行命令,进入到redis-cluster目录下

[root@localhost redis-cluster]# vim shutdown.sh

[root@localhost redis-cluster]# vim shutdown.sh

淘淘商城20_redis的使用02_redis集群的搭建_第25张图片

:wq  保存退出

执行

chmod +x shutdown.sh

[root@localhost redis-cluster]# chmod +x shutdown.sh

执行脚本

./shutdown.sh  -------->全部开启

[root@localhost redis-cluster]# ./shutdown.sh  -------->全部关闭

淘淘商城20_redis的使用02_redis集群的搭建_第26张图片

 

9、 redis客户端

自带的图形化客户端,这个客户端有个局限性,只可以连接单机版的redis,不能连接集群版的,我们可以开发的时候用单机版开发,上线以后可以搭建集群的。

使用方法:傻瓜式安装

淘淘商城20_redis的使用02_redis集群的搭建_第27张图片

9.1 ​​​​​​​连接linux系统:首先的关闭linux上的防火墙

淘淘商城20_redis的使用02_redis集群的搭建_第28张图片

9.2 ​​​​​​​连接服务器上的redis单机版

淘淘商城20_redis的使用02_redis集群的搭建_第29张图片

9.3 redis单机版默认有16个库

淘淘商城20_redis的使用02_redis集群的搭建_第30张图片

我们可以在redis的配置文件里看到库,也可以修改库的数量,开发时候建议不要改

可以输入命令查看库,单机版才有16个库,集群版本只有一个库

淘淘商城20_redis的使用02_redis集群的搭建_第31张图片

输入  /  查找文件名

淘淘商城20_redis的使用02_redis集群的搭建_第32张图片

9.4 常用命令

淘淘商城20_redis的使用02_redis集群的搭建_第33张图片

Select  1 命令:  进入1号库

Set   a  100:  可以设置参数

淘淘商城20_redis的使用02_redis集群的搭建_第34张图片

 

你可能感兴趣的:(redis集群,Linux)