1 安装redis
1.1 下载redis
cd /opt
sudo wget http://download.redis.io/releases/redis-5.0.10.tar.gz
sudo tar -xzvf redis-5.0.10.tar.gz
1.2 编译安装
sudo yum install gcc -y
cd redis-5.0.10
sudo make
sudo make install
Note:
- 安装
gcc报错No more mirrors to try,执行yum clean all make报错zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory && make,执行make distclean,参考 www.cnblogs.com/operationho…
1.3 验证
redis-cli -v
redis-server -v
2 配置服务
2.1 新建工作目录
sudo mkdir redis-cluster
sudo chown -R <user>:<user> redis-cluster
2.2 新建config文件
vi redis.conf
- redis.conf
###################### General #########################
#端口
port <port>
#默认ip为127.0.0.1,需要改为其他节点机器可访问的ip,否则创建集群时无法访问对应的端口,无法创建集群
bind <ip>
#redis后台运行
daemonize yes
#pidfile文件
pidfile "/var/run/redis/redis-26379.pid"
#指定了服务端日志的级别。级别包括:
##debug(很多信息,方便开发、测试),
##verbose(许多有用的信息,但是没有debug级别信息多),
##notice(适当的日志级别,适合生产环境),
##warn(只有非常重要的信息)
loglevel notice
#指定了记录日志的文件。空字符串的话,日志会打印到标准输出设备。后台运行的redis标准输出是/dev/null。
logfile "/var/log/redis/redis-26379.log"
#数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录
dir "/opt/redis-cluster"
###################### Client #########################
#设置同时连接客户端的最大数量,默认情况下这个限制设置为10000个客户,一旦达到限制,Redis将关闭所有新的连接,发送错误的最大客户数。
maxclients 10000
###################### Memory #########################
#redis配置的最大内存容量。当内存满了,需要配合maxmemory-policy策略进行处理。
#注意slave的输出缓冲区是不计算在maxmemory内的。
#所以为了防止主机内存使用完,建议设置的maxmemory需要更小一些。
maxmemory 10G
#内存容量超过maxmemory后的处理策略。
##volatile-lru:利用LRU算法移除设置过过期时间的key。
##volatile-random:随机移除设置过过期时间的key。
##volatile-ttl:移除即将过期的key,根据最近过期时间来删除(辅以TTL)
##allkeys-lru:利用LRU算法移除任何key。
##allkeys-random:随机移除任何key。
##noeviction:不移除任何key,只是返回一个写错误。
#上面的这些驱逐策略,如果redis没有合适的key驱逐,对于写命令,还是会返回错误。redis将不再接收写请求,只接收get请求。
maxmemory-policy volatile-lru
#LRU、LFU和最小TTL算法不是精确的算法,而是近似算法(为了节省内存),所以你可以对它进行调优,以达到速度或精度。
#默认的5产生足够好的结果,十分接近真实的LRU,但成本更大。3更快,但不太准确。
maxmemory-samples 5
###################### REDIS CLUSTER #####################
#开启集群
cluster-enabled yes
#集群的配置,配置文件首次启动自动生成
cluster-config-file node-26379.conf
#请求超时,默认15秒,可自行设置,ms
cluster-node-timeout 15000
#每个从节点都要检查最后与主节点断线时间,判断其是否有资格替换故障的主节点。
#如果从节点与主节点断线时间超过cluster-node-time*cluster-slave-validity-factor,则当前从节点不具备故障转移资格。
cluster-slave-validity-factor 10
#主节点需要的最小从节点数,只有达到这个数,才会将多余的从节点迁移给其它孤立的主节点使用。
cluster-migration-barrier 1
#默认情况下,Redis集群节点如果检测到至少有一个散列槽(没有可用的节点正在服务),就会停止接受查询。
#这样,如果集群部分宕机(例如,不再覆盖散列槽的范围),那么所有集群最终都将不可用。当所有的插槽再次被覆盖时,它会自动返回。
#但是,有时您希望集群的子集继续工作,继续接受仍然覆盖的关键空间部分的查询。
#为了做到这一点,只需将cluster-require-full-coverage选项设置为no。
cluster-require-full-coverage no
#################### Append Only Mode #####################
#开启AOF持久化
appendonly yes
#AOF文件名
appendfilename "appendonly_26379.aof"
#AOF同步策略
##always,每次操作记录都同步到文件中,最低效最安全
##everysec,每秒执行一次把操作记录同步到硬盘上,为默认选项
##no,不执行 fysnc 调用,让操作系统自动操作把缓存数据写到硬盘上,不可靠但最快
appendfsync everysec
#当RDB持久化出现错误后,是否依然进行继续进行工作,
##yes:不能进行工作,
##no:可以继续进行工作,
#可以通过info中的rdb_last_bgsave_status了解RDB持久化是否有错误
stop-writes-on-bgsave-error yes
#复制缓冲区大小,这是一个环形复制缓冲区,用来保存最新复制的命令。这样在slave离线的时候,不需要完全复制master的数据,如果可以执行部分同步,只需要把缓冲区的部分数据复制给slave,就能恢复正常复制状态。缓冲区的大小越大,slave离线的时间可以更长,复制缓冲区只有在有slave连接的时候才分配内存。没有slave的一段时间,内存会被释放出来,默认1m。
repl-backlog-size 10mb
#master没有slave一段时间会释放复制缓冲区的内存,repl-backlog-ttl用来设置该时间长度。单位为秒。
repl-backlog-ttl 7200
#################### RDB Snapshotting #####################
##rdb文件的名称
dbfilename "dump_26379.rdb"
####################### Slow Log ########################
#slog log是用来记录redis运行中执行比较慢的命令耗时。
#当命令的执行超过了指定时间,就记录在slow log中,slog log保存在内存中,所以没有IO操作。
#执行时间比slowlog-log-slower-than大的请求记录到slowlog里面,单位是微秒,所以1000000就是1秒。
#注意,负数时间会禁用慢查询日志,而0则会强制记录所有命令。
slowlog-log-slower-than 1000000
#慢查询日志长度。当一个新的命令被写进日志的时候,最老的那个记录会被删掉。
#这个长度没有限制。只要有足够的内存就行。你可以通过 SLOWLOG RESET 来释放内存。
slowlog-max-len 1024
####################### Auth #######################
#主节点的连接密码
#masterauth 123456
#当前节点连接密码
#requirepass 123456
2.3 创建日志目录
sudo mkdir /var/log/redis
sudo chown -R <user>:<user> /var/log/redis
2.4 启动服务
cd /opt/redis-cluster
redis-server redis.conf
3 创建集群
3.1 连接redis cluster服务
redis-cli -h <ip> -p <port> -c
3.2 添加主节点
cluster meet <ip> <port>
3.3 将当前节点设置为目标节点的从节点
cluster replicate <nodeId>
3.4 分配slot
redis-cli -h <ip> -p <port> cluster addslots {0..5461}
redis-cli -h <ip> -p <port> cluster addslots {5462..10922}
redis-cli -h <ip> -p <port> cluster addslots {10923..16383}
Note
服务内命令 CLUSTER ADDSLOTS {0,5460} 不可用
3.5 删除节点
cluster forget <nodeId>
4 创建系统服务
4.1 创建启动、停止脚本
cd /opt/redis-cluster
vi start.sh
sudo chmod +x start.sh
vi stop.sh
sudo chmod +x stop.sh
- start.sh
#!/bin/bash
redis-server /opt/redis-cluster/redis.conf
- stop.sh
#!/bin/bash
pid=$(lsof -i:26379 -t)
if [ -n "$pid" ]; then kill -9 $pid; fi
4.2 创建系统配置文件
sudo vi /usr/lib/systemd/system/redis-cluster.service
- redis-cluster.service
[Unit]
Description=redis-cluster
[Service]
Type=forking
User=<user>
ExecStart=/opt/redis-cluster/start.sh
ExecStop=/opt/redis-cluster/stop.sh
[Install]
WantedBy=multi-user.target
4.3 重新加载命令
sudo systemctl daemon-reload