赞
踩
redis集群化部署主要用于大型缓存架构,一般的小型架构,使用redis主从配置就行。
使用redis集群可以方便快捷地对集群进行动态扩容,动态的添加、删除节点,reshard、并带有自动故障恢复功能。
一般redis集群使用3主3从,并且尽量保证主服务器与从服务器不在同一台机器上,防止机器故障导致的集群瘫痪,每个主 服务器搭配一个从服务器,保证集群的高可用性。
官方地址:
Scaling with Redis Cluster | Redis
三台服务器各部署一个主节点、一个从节点,同一台服务器上不是直接主从关系。
Redis-cluster | |||
编号 | 主从 1 | 主从 2 | 主从 3 |
1 | 192.168.2.211 | 192.168.2.212 | 192.168.2.213 |
2 | 192.168.2.214 | 192.168.2.152 | 192.168.2.153 |
软件版本:
编译依赖安装
- yum -y install gcc tcl
- yum -y install centos-release-scl
- yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
下载编译安装
- cd /opt
- wget http://download.redis.io/releases/redis-6.2.6.tar.gz
- tar -xvf redis-6.2.6.tar.gz
- cd redis-6.2.6
- make MALLOC=libc
- make install PREFIX=/app/software/redis-6.2.6 -j 4
创建文件夹
- mkdir -p /app/software/redis-6.2.6/conf
- mkdir -p /app/software/redis-6.2.6/log
- mkdir -p /app/software/redis-6.2.6/data/
- mkdir -p /app/software/redis-6.2.6/run/
- cp redis.conf /app/software/redis-6.2.6/conf/
打开redis.conf文件,修改成以下内容:
其他服务器也是同样的配置文件,修改本机IP即可。
- #添加本机的ip
- bind 192.168.2.211
- #端口
- port 26379
-
- #守护进程
- daemonize yes
-
- #pid存储目录
- pidfile /app/software/redis-6.2.6/run/redis_26379.pid
- #日志存储目录
- logfile /app/software/redis-6.2.6/log/redis_26379.log
- #数据存储目录,目录要提前创建好
- dir /app/software/redis-6.2.6/data/
-
- #开启集群
- cluster-enabled yes
- #集群节点的超时时间,单位:ms,超时后集群会认为该节点失败
- cluster-node-timeout 15000
- #集群节点配置文件,这个文件是不能手动编辑的。确保每一个集群节点的配置文件不同
- cluster-config-file nodes_26379.conf
-
- #->@wjw_note: 一下是根据实际情况来填写
- # Close the connection after a client is idle for N seconds (0 to disable)
- timeout 0
- loglevel warning
- databases 16
- # 设置Redis占用内存的大小
- maxmemory 4gb
-
- # 如果内存满了就需要按照如相应算法进行删除过期的/最老的
- # volatile-lru (Redis3.0之前,默认的内存淘汰策略): 淘汰所有设置了过期时间的键值中,最久未使用的键值
- # volatile-lfu (Redis4.0后新增的内存淘汰策略): 淘汰所有设置了过期时间的键值中,最少使用的键值
- # allkeys-lru 淘汰整个键值中最久未使用的键值(包含那些未设置过期时间的key)
- # allkeys-lfu (Redis4.0后新增的内存淘汰策略): 淘汰整个键值中最少使用的键值
- # volatile-random/allkeys-random 随机淘汰设置了过期时间的任意键值/随机淘汰任意键值
- # volatile-ttl 根据Time-To-Live移除即将过期的key
- # noeviction 永不过期,而是报错
- maxmemory-policy volatile-lru
-
- # Redis并不是真正的LRU/TTL,而是基于采样进行移除的,即如采样10个数据移除其中最老的/即将过期的
- maxmemory-samples 10
-
- # AOF持久化
- appendonly yes
-
- appendfilename appendonly.aof
- # 持久化策略,默认每秒fsync一次,也可以选择always即每次操作都进行持久化,或者no表示不进行持久化而是借助操作系统的同步将缓存区数据写到磁盘
- appendfsync everysec
-
- # AOF重写策略(同时满足如下两个策略进行重写)
- # 当AOF文件大小占到初始文件大小的多少百分比时进行重写
- auto-aof-rewrite-percentage 100
- # 触发重写的最小文件大小
- auto-aof-rewrite-min-size 1gb
-
- # 为减少磁盘操作,暂缓重写阶段的磁盘同步
- no-appendfsync-on-rewrite yes
-
- # 慢查
- # 下面的时间单位是微秒,所以1000000就是1秒.注意,负数时间会禁用慢查询日志,而0则会强制记录所有命令.
- slowlog-log-slower-than 10000
- # 这个长度没有限制.只要有足够的内存就行.你可以通过 SLOWLOG RESET 来释放内存.(注:慢查日志是在内存里)
- slowlog-max-len 128
-
- masterauth 123456
- requirepass 123456
启动
/app/software/redis-6.2.6/bin/redis-server /app/software/redis-6.2.6/conf/redis.conf
集群创建
使用cluster nodes命令查看节点状态。
使用cluster info命令查看集群状态。
使用客户端redis-cli二进制随便访问某个服务器的实例,执行set和get的测试。
注意事项
1、如果某一个主节点和他所有的从节点都下线的话,redis集群就会停止工作了。redis集群不保证数据的强一致性,在特定的情况下,redis集群会丢失已经被执行过的写命令
2、使用异步复制(asynchronous replication)是redis 集群可能会丢失写命令的其中一个原因,有时候由于网络原因,如果网络断开时间太长,redis集群就会启用新的主节点,之前发给主节点的数据就会丢失。
Redis Cluster 内部使用的是P2P中的Gossip协议,每个节点既可以从其他节点得到服务,也可以向其他节点提供服务,没有中心的概念,通过一个节点可以获取到整个集群的所有信息。所以如果应用连接Redis Cluster可以配置一个节点地址,也可以配置多个节点地址。但需要注意如果集群进行了上下节点的的操作,其应用也需要进行修改,这样会导致需要重启应用,非常的不友好。从Redis 6.0开始支持了Prxoy,可以直接用Proxy来管理各个集群节点。本文来介绍下如何使用官方自带的proxy:redis-cluster-proxy
通过使用 redis-cluster-proxy 可以与组成Redis集群的一组实例进行通讯,就像是单个实例一样。Redis群集代理是多线程的,使用多路复用通信模型,因此每个线程都有自己的与群集的连接,该连接由属于该线程本身的所有客户端共享。
在某些特殊情况下(例如MULTI事务或阻塞命令),多路复用将被禁用;并且客户端将拥有自己的集群连接。这样客户端仅发送诸如GET和SET之类的简单命令就不需要Redis集群的专有连接。
redis-cluster-proxy的主要功能:
1. centos 7.x,需要手动安装 gcc+ 8 来支持 redis-cluster-proxy
2. 参考,如果是centos 8.0 版本,已经预安装了 gcc 8 的版本,可以通过 gcc -v 查看
- yum install centos-release-scl -y
- yum install devtoolset-8-gcc devtoolset-8-gcc-c++ -y
- scl enable devtoolset-8 -- bash
- git clone https://github.com/RedisLabs/redis-cluster-proxy.git
-
- cd redis-cluster-proxy
- make && make install PREFIX=/opt/redis-cluster-proxy -j 4
启动
/app/software/redis-cluster-proxy/bin/redis-cluster-proxy -c /app/software/redis-cluster-proxy/conf/proxy.conf
客户端连接验证
官网:该项目目前是alpha代码,由社区进行缩进评估,以获得建议和贡献。我们不鼓励在任何生产环境中使用它。
GitHub - RedisLabs/redis-cluster-proxy: A proxy for Redis clusters.
Current status
This project is currently alpha code that is indented to be evaluated by the community in order to get suggestions and contributions. We discourage its usage in any production environment.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。