本篇博客将演示还ubuntu下redis集群的搭建。
redis-cluster架构图:
架构细节:
(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 会根据节点数量大致均等的将哈希槽映射到不同的节点
至少3个节点,为了集群的高可用,为每一个节点增加一个备份机。(6台服务器)。
搭建伪分布式集群方案:在一台机器里面运行6个redis实例。端口需要不同(7001-7006)。分布式的搭建也可以参考。
1.先安装ruby:sudo apt-get install ruby, sudo apt-get install rubygems,gem install redis
2.创建目录,创建6个redis实例,每个实例运行在不同的端口(7001-7006)。
2.1 hl@ubuntu:/usr/local$ sudo mkdir redis-cluster
2.2 复制之前搭建好的redis 并改名为redis01:hl@ubuntu:/usr/local$ sudo cp redis redis-cluster/redis01 -r
2.3进入redis-cluster目录中cd到redis01的bin目录,删除数据文件,包括RDB和AOF文件:
hl@ubuntu:/usr/local$ sudo cd redis-cluster/redis01/bin
hl@ubuntu:/usr/local$ sudo rm -rf *.rdb *.aof
2.4修改redis.conf如图
vim redis.conf 可以查找cluster功能,直接定位到
注销密码登录
绑定到服务器节点
按ESC :wq
保存退出。
2.5创建6个redis实例
- cd到redis-cluster目录
- copy六份并分别命名为redis02,redis03,redis04,redis05,redis06
sudo cp -r redis01 redis02
sudo cp -r redis01 redis03
sudo cp -r redis01 redis04
sudo cp -r redis01 redis05
sudo cp -r redis01 redis06
2.6 cd到每一个实例的bin目录,修改每一个redis实例的端口分别改为7001-7006
sudo vim redis.conf 每个redis实例依次改成7001到7006
3.启动每个redis实例
sudo vim redis-cluster-start-all.sh
添加如下文字到文件中:
cd /usr/local/redis-cluster/redis01/bin ./redis-server redis.conf
cd /usr/local/redis-cluster/redis02/bin ./redis-server redis.conf
cd /usr/local/redis-cluster/redis03/bin ./redis-server redis.conf
cd /usr/local/redis-cluster/redis04/bin ./redis-server redis.conf
cd /usr/local/redis-cluster/redis05/bin ./redis-server redis.conf
cd /usr/local/redis-cluster/redis06/bin ./redis-server redis.conf |
修改文件:redis-cluster-start-all.sh 的权限,让其可执行。
chmod u+x redis-cluster-start-all.sh |
4.启动
sudo ./redis-cluster-start-all.sh
5.使用ruby脚本搭建集群。
到redis安装包的解压目录下(/redis-4.0.11/src),复制redis-trib.rb文件到redis-cluster目录中
、
6.执行创建
sudo ./redis-trib.rb create --replicas 1 192.168.37.129:7001 192.168.37.129:7002 192.168.37.129:7003 192.168.37.129:7004 192.168.37.129:7005 192.168.37.129:7006
创建关闭集群的脚本
cd /usr/local/redis-cluster/redis01/bin ./redis-cli -p 7001 shutdown
cd /usr/local/redis-cluster/redis02/bin ./redis-cli -p 7002 shutdown
cd /usr/local/redis-cluster/redis03/bin ./redis-cli -p 7003 shutdown
cd /usr/local/redis-cluster/redis04/bin ./redis-cli -p 7004 shutdown
cd /usr/local/redis-cluster/redis05/bin ./redis-cli -p 7005 shutdown
cd /usr/local/redis-cluster/redis06/bin ./redis-cli -p 7006 shutdown |
修改文件:redis-cluster-stop-all.sh 的权限,让其可执行。
chmod u+x redis-cluster-stop-all.sh