目录
reids集群模式介绍
开始安装
主机规划
前期准备
配置文件-6379端口
配置文件-6380端口
补充
Redis占用内存大小配置
Redis的内存淘汰
reids集群模式介绍
1. 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
2. 节点的fail是通过集群中超过半数的节点检测失效时才生效。
3. 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
4. redis cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点
提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个
来充当主节点,从而保证集群不会挂掉。
5.redis-cluster把所有的物理节点映射到[0-16384]slot上(不一定是平均分配),cluster 负责维护 node<->slot<->value。
6.Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key)
mod 16384的值,决定将一个key放到哪个桶中
开始安装
主机规划
此教程是redis集群模式,使用了三台机器进行部署,如下是主机规划。
主机数量: 3台
配合: 1核1G
系统: centos:7
版本: CentOS Linux release 7.8.2003 (Core)
内核版本: 3.10.0-1127.el7.x86_64
防火墙: 关闭
selinux:关闭(setenforce 0)
IP规划
序号 服务类型 规划IP 备注(端口)1 redis-1 192.168.241.5 6379
2 redis-1 192.168.241.5 6380
3 redis-2 192.168.241.6 6379
4 redis-2 192.168.241.6 6380
5 redis-3 192.168.241.123 6379
6 redis-3 192.168.241.123 6380
前期准备
ps ( #为注释 $为操作命令)
#做的三主三从 把三台机都按照这个步骤做一遍
#安装所需插件
$ yum -y install wget gcc gcc-c++ make tar openssl openssl-devel cmake
#使用6.2.4的版本 直接从网上拉取
$wget http://download.redis.io/releases/redis-6.2.4.tar.gz
#解压安装
$tar zxf redis-6.2.4.tar.gz
#放置执行文件
$cd redis-6.2.4/src/
$cp redis-trib.rb /usr/local/bin
#安装
$cd /root/redis-6.2.4#部署第一个redis 安装路径可以自己定义
$make PREFIX=/usr/local/redis1 install#部署第二个redis
$make MALLOC=libc PREFIX=/usr/local/redis2 install
#安装redis2的时候可能会出现一个错误 再次执行下就可以
$make MALLOC=libc PREFIX=/usr/local/redis2 install#拷贝reids-cli到/usr/local/bin下
$cp /redis-6.2.4/src/redis-cli /usr/local/bin/
配置文件-6379端口
配置文件-6379
从安装包里面的redis.conf模板修改 如下是行数 挨个修改即可
$cp /root/redis-6.2.4/redis.conf /usr/local/redis1
$vim /usr/local/redis1/redis.conf
bind 0.0.0.0 // 测试环节,任何地址都可连接 75行
port 6379 // 修改成对应的端口号 98行
daemonize yes // 后台运行 257行
pidfile /var/run/redis_6379.pid // pid文件 289行
logfile "/usr/local/redis1/logs/redis.log" // 日志 302行
requirepass 123456 //483行加入 连接到节点密码
masterauth 123456 //484行 节点之间的互访访问的密码
appendonly yes // 开启 aop 备份 1252行
appendfsync always // 每写一条 备份 一次 1282行
cluster-enabled yes // 开启 Redis Cluster 1385行
cluster-config-file nodes-6379.conf // 记录集群信息,不用手动维护,Redis Cluster 会自动维护 1393行
cluster-node-timeout 15000 // Cluster 超时时间 1399行
cluster-require-full-coverage no // 只要有结点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为no 1485行
#日志路径得手动创建否则会启动失败
$ mkdir /usr/local/redis1/logs
$touch /usr/local/redis1/logs/redis.log
#启动
$cd /usr/local/redis1/
$nohup ./bin/redis-server redis.conf &
配置文件-6380端口
配置文件-6380
直接复制redis1的配置文件 修改下即可
$cp /usr/local/redis1/redis.conf /usr/local/redis2/redis.conf
$vim /usr/local/redis2/redis.conf
bind 0.0.0.0 // 测试环节,任何地址都可连接 75
port 6380 // 修改成对应的端口号 98
daemonize yes // 后台运行 257
pidfile /usr/local/redis2/redis_6380.pid // pid文件 289
logfile "/usr/local/redis2/logs/redis.log" // 日志 302
requirepass 123456 //483行加入 连接到节点密码
masterauth 123456 //484行 节点之间的互访访问的密码
appendonly yes // 开启 aop 备份 1252
appendfsync always // 每写一条 备份 一次 1281
cluster-enabled yes // 开启 Redis Cluster 1358
cluster-config-file nodes-6380.conf // 记录集群信息,不用手动维护,Redis Cluster 会自动维护 1393
cluster-node-timeout 15000 // Cluster 超时时间 1399
cluster-require-full-coverage no // 只要有结点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为no 1458
#日志路径得手动创建否则会启动失败
$ mkdir /usr/local/redis1/logs
$touch /usr/local/redis1/logs/redis.log
#启动
$cd /usr/local/redis2/
$./bin/redis-server redis.conf
查看进程是否存在
$ ps -ef | grep redis
查看端口是否存在
$ ss -ntlp | grep 6379
$ ss -ntlp | grep 6380
#开始使用 Redis 自带集群管理工具创建集群
#创建集群,--cluster-replicas 1指定从库数量1,创建顺序三主-三从。即主-主-主-从-从-从。
#如果redis设置了密码,则创建集群时需要添加密码信息 -a 密码:redis-cli --cluster create ip+端口 ip+端口 ip+端口 ip+端口 ip+端口 ip+端口 --cluster-replicas 1 -a 123456
#看到如 [OK] All 16384 slots covered. 的提示说明集群创建成功。
#可以进入redis里面查看 随便进入一个都可以查看到集群信息
至此集群安装完毕...
补充
Redis占用内存大小配置
我们知道Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小。
1、通过配置文件配置
通过在Redis安装目录下面的redis.conf配置文件中添加以下配置设置内存大小 //设置Redis最大占用内存大小为100M maxmemory 100mb redis的配置文件不一定使用的是安装目录下面的redis.conf文件,启动redis服务的时候是可以传一个参数指定redis的配置文件的
2、通过命令修改
#Redis支持运行时通过命令动态修改内存大小 //设置Redis最大占用内存大小为100M 127.0.0.1:6379> config set maxmemory 100mb //获取设置的Redis能使用的最大内存大小 127.0.0.1:6379> config get maxmemory 1) "maxmemory" 2) "0" #如果不设置最大内存大小或者设置最大内存大小为0,在64位操作系统下不限制内存大小,在32位操作系统下最多使用3GB内存
Redis的内存淘汰
既然可以设置Redis最大占用内存大小,那么配置的内存就有用完的时候。那在内存用完的时候,还继续往Redis里面添加数据不就没内存可用了吗?
实际上Redis定义了几种策略用来处理这种情况:
noeviction(默认策略):对于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外)
allkeys-lru:从所有key中使用LRU算法进行淘汰
volatile-lru:从设置了过期时间的key中使用LRU算法进行淘汰
allkeys-random:从所有key中随机淘汰数据
volatile-random:从设置了过期时间的key中随机淘汰
volatile-ttl:在设置了过期时间的key中,根据key的过期时间进行淘汰,越早过期的越优先被淘汰
当使用volatile-lru、volatile-random、volatile-ttl这三种策略时,如果没有key可以被淘汰,则和noeviction一样返回错误
#获取当前内存淘汰策略:
127.0.0.1:6379> config get maxmemory-policy
1) "maxmemory-policy"
2) "noeviction" #1.通过配置文件设置淘汰策略(修改redis.conf文件):
maxmemory-policy allkeys-lru
#2.通过命令修改淘汰策略:
127.0.0.1:6379> config set maxmemory-policy allkeys-lru