一、概述
Redis Cluster是Redis数据库的一种分布式解决方案,用于在多个节点上分布和
管理数据。它通过将数据分片存储在不同的节点上,实现数据的分布式存储和处理。
Redis Cluster采用主从复制的方式来保证数据的高可用性和容错性,每个主节点都会
有若干个从节点进行数据备份和故障转移。Redis Cluster还提供了自动数据迁移和故
障恢复的功能,当节点发生故障或新增节点时,集群会自动进行数据迁移和重新分配,
以保证数据的可用性和负载均衡。通过Redis Cluster,可以实现高性能、高可用性和
可扩展性的分布式数据存储和处理。
二、工作原理
1. 节点分布:Redis Cluster将数据分布在多个节点上,每个节点负责存储部分数据。数据的分布是
通过哈希槽(hash slot)来实现的,Redis Cluster将数据分为16384个哈希槽,每个节点负责一部
分哈希槽。
2. 节点通信:Redis Cluster中的节点通过互相通信来进行数据同步和协调工作。节点之间使用
Gossip协议进行通信,通过交换节点信息来了解集群的状态和拓扑结构。
3. 主从复制:每个节点都可以有多个从节点,主节点负责处理客户端的读写请求,从节点负责复制
主节点的数据。主从复制可以提高数据的可用性和读取性能。
4. 故障检测和故障转移:Redis Cluster通过心跳机制来检测节点的故障。当主节点故障时,Redis
Cluster会自动进行故障转移,将一个从节点提升为新的主节点,保证数据的可用性。
5. 客户端路由:客户端与Redis Cluster进行交互时,需要根据数据的哈希槽来确定数据所在的节
点。客户端通过计算数据的哈希槽来选择合适的节点进行读写操作。
6. 数据迁移和负载均衡:当集群的拓扑结构发生变化时,Redis Cluster会自动进行数据迁移和负载
均衡,将哈希槽重新分配给不同的节点,保持数据的均衡分布。
三、准备工作
1、关闭防火墙
2、两台服务器互相通联
3、安装wget gcc gcc-c++ make tar openssl openssl-devel cmake依赖包为编译环境作准备
四、部署
1、主从共同操作
tar xf redis-4.0.10.tar.gz -C /sur/src
cd /usr/src/redis-4.0.10/
make
make MALLOC=jemalloc 避免碎片和可伸缩的并发支持
mkdir -p /usr/local/redis/conf 创建redis配置文件目录
cp sentinel.conf /usr/local/redis/conf/ redis哨兵配置文件
cp src/redis-trib.rb /usr/local/redis/bin/ 优化命令
ln -s /usr/local/redis/bin/* /usr/local/bin/ 创建软连接
配置文件精简
cp redis.conf /usr/local/redis/conf/ 将配置文件复制到我创建的配置文件目录中
cd /usr/local/redis/ 进入配置文件目录
cp conf/redis.conf{,.bak} 创建备份
egrep -v "^$|^#" conf/redis.conf.bak > conf/redis.conf 删除配置文件中的#行和空行
优化系统配置
优化透明大页面压缩
echo never > /sys/kernel/mm/transparent_hugepage/enabled 临时
echo never > /sys/kernel/mm/transparent_hugepage/defrag 临时
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local 永久
echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local 永久
echo "* - nofile 10240" >> /etc/security/limits.conf 文件并发数
echo "net.core.somaxconn = 10240" >> /etc/sysctl.conf 监听队列
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf 0内存不够,就会拒绝申请
1物理内存都允许分配给你,只要有内存就给你用,这样可以避免申请内存失败的问题。
sysctl -p
从只需要把后面的端口号更改就可以了
mkdir -p /data/redis-cluster
cd /data/redis-cluster
mkdir 7000 7001 7002
cp /usr/local/redis/conf/redis.conf /data/redis-cluster/7000/
cp /usr/local/redis/conf/redis.conf /data/redis-cluster/7001/
cp /usr/local/redis/conf/redis.conf /data/redis-cluster/7002/
修改配置文件
daemonize yes
cluster-enabled yes
port 7000
pidfile /data/redis-cluster/7000/redis.pid
logfile "/data/redis-cluster/7000/redis.log"
dir /data/redis-cluster/7000/
tcp-backlog 1024
剩下的配置文件修改项和上面一样,只需要把端口号修改为7001、7002以此类推
启动主的服务
redis-server /data/redis-cluster/7001/redis.conf
redis-server /data/redis-cluster/7002/redis.conf
redis-server /data/redis-cluster/7000/redis.conf
查看端口(17000、17001、17002这是redis哨兵的端口号)
五、架构redis集群
安装redis集群工具ruby
编译安装高ruby版本,Ruby版本需要大于等于2.2.2(yum安装的不符合)
tar xf ruby-2.5.1.tar.gz -C /usr/src/
cd /usr/src/ruby-2.5.1/
./configure && make && make install
ruby --version
ruby --version ruby 2.5.1p57 '(2018-03-29 revision 63029) [x86_64-linux]'
安装ruby的拓展
/usr/local/bin/gem install redis
启动集群
redis-trib.rb create 192.168.77.111:7000 192.168.77.111:7001 192.168.77.111:7002
redis-cli -h 192.168.77.111 -c -p 7000 set name crushlinux 测试节点状态
开启从服务
redis-server /data/redis-cluster/8000/redis.conf
redis-server /data/redis-cluster/8001/redis.conf
redis-server /data/redis-cluster/8002/redis.conf
添加从服务
redis-trib.rb add-node --slave 192.168.77.112:8000 192.168.77.111:7000
查看集群状态
redis-cli -p 7000 cluster nodes
六、测试
读写测试
redis-cli -h 192.168.77.112 -c -p 8000
插入一条数据
set address henan
切换其他服务器查看
可以看到每个节点都可以查询到写入的数据
查看主从cluster集群key的分布情况
redis-cli -h 192.168.77.112 -c -p 8000 info Keyspace
redis-cli -h 192.168.77.112 -c -p 8001 info Keyspace
redis-cli -h 192.168.77.112 -c -p 8002 info Keyspace
redis-cli -h 192.168.77.111 -c -p 7000 info Keyspace
redis-cli -h 192.168.77.111 -c -p 7001 info Keyspace
redis-cli -h 192.168.77.111 -c -p 7002 info Keyspace
主从切换
redis-cli -h 192.168.77.111 -p 7000 shutdown
redis-cli -h 192.168.77.112 -p 8000 cluster nodes
可以看到8000端口的已经变为了主服务器
重新启动7000端口的服务
可以看到7000端口的服务变成8000端口的从服务器
以上就是redis生产集群的部署
如有错误欢迎各位大佬批评指正,我们共同进步