单节点redis服务器带来的问题
单点故障,服务不可用
无法处理大量的并发数据请求
数据丢失一大灾难
解决方法
搭建Redis集群
Redis集群
redis集群是一个提供在多个Redis间节点间共享数据的程序集
Redis集群并不支持处理多个keys的命令因为这需要在不同节点移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误
Redis集群通过分区来提供一定程度的可用性,在实际环境中当某个节点不可用时,可使用群集中别的服务器,来保证稳定
集群的优势
自动分割数据到不同的节点上
整个集群的部分节点失败或者不可达的情况下能够继续处理命令
实现的方法
有客户端分片
代理分片
服务器端分片
Redis-Cluster数据分片
Redis集群没有使用一致性hash,而是引入了哈希槽的概念
redis集群有16384个哈希槽
每个key通过CRC16效验后对16384取模来决定放置槽
集群的每个节点负责一部分哈希槽
部署
1.准备六台机器,修改主机名,方便辨识
2.在六台机器上部署Redis
yum -y install gcc gcc-*
tar zxvf redis-4.0.9.tar.gz
cd redis-4.0.9
make
make PREFIX=/usr/local/redis install
ln -s /usr/local/redis/bin/* /usr/local/bin/
cd utils/
./install_server.sh
3.在master1节点,调整配置文件
vi /etc/redis/6379.conf
1.重启配置文件,过滤端口,回显效果
/etc/init.d/redis_6379 restart
ss -nlpt | grep 6379
4.另外五台都是如此操作
5.配置redis集群(配置集群有脚本,但是需要安装ruby来运行脚本)
1.在master1节点上安装ruby软件
2.上传ruby软件包(ruby-2.6.9.tar.gz)
sudo yum install -y gcc make openssl-devel readline-devel zlib-devel
cd
# 编译安装
tar zxf ruby-2.6.9.tar.gz -C /usr/src/
cd /usr/src/ruby-2.6.9/
./configure --prefix=/usr/local/ruby-2.6.9
make && make install
# 优化执行路径
ln -s /usr/local/ruby-2.6.9/bin/ruby /usr/bin/ruby
ln -s /usr/local/ruby-2.6.9/bin/gem /usr/bin/gem
3.用gem安装redis(安装时间较久,耐心等待)
gem install redis
cd
/root/redis-4.0.9/src/redis-trib.rb create --replicas 1 192.168.27.143:6379 192.168.27.129:6379 192.168.27.130:6379 192.168.27.132:6379 192.168.27.133:6379 192.168.27.134:6379
4.执行完后yes确认,等待一段时间
6.调整主从节点
1.删除节点
#删除从节点,/root/redis-4.0.9/src/redis-trib.rb del-node 要删除的从节点IP 要删除从节点的编码ip
/root/redis-4.0.9/src/redis-trib.rb del-node 192.168.27.133:6379 e7855d319f0a6af1bf39e24adfcf75659e15f79a
/root/redis-4.0.9/src/redis-trib.rb del-node 192.168.27.132:6379 dd1d7fc0704a55c34f3b6e15afe3a1152775ca34
/root/redis-4.0.9/src/redis-trib.rb del-node 192.168.27.134:6379 bd000de9af75eb02642dad52279da4c7574c5bed
/root/redis-4.0.9/src/redis-trib.rb check 192.168.27.142:6379
2.加入节点到集群
#清理三台slave节点
rm -rf /var/lib/redis/6379/*
pkill redis
/etc/init.d/redis_6379 start
3.加入节点
#/root/redis-4.0.9/src/redis-trib.rb add-node --slave --master-id master1的id slave1的ip:6379 master1的ip:6379
4.测试
# 启动时使用 -c 参数来启动集群模式
redis-cli -c -h 192.168.27.142