1. 准备6台服务器
服 务 器 地 址 | 服 务 器 角 色 |
---|---|
192.168.1.1 | master |
192.168.1.2 | master |
192.168.1.3 | master |
192.168.1.4 | slave |
192.168.1.5 | slave |
192.168.1.6 | slave |
redis cluster至少6个节点(三主三从)。如果只启动4个节点的话,它会提示说:redis cluster至少需要3个master,4台机器是不可能满足每个master都有一个replica(副本、从节点)
2. 下载redis(稳定版本:5.0.4)
wget http://download.redis.io/releases/redis-5.0.4.tar.gz
tar xzf redis-5.0.4.tar.gz
cd redis-5.0.4
make
如果make时提示cc: command not found的话,是因为虚拟机没有安装gcc,安装下即可:yum install -y gcc
3. 编辑redis.conf
port 6379
daemonize yes # 以后台模式运行
protected-mode no # 集群模式下要设置成no,设置为yes的时候需要配合bind参数,只有被bind的ip能访问我们的redis
dir /data/redis # 日记、aof、rdb文件都会保存到这里 所以这个路径要是机器磁盘空间最大的(可通过df –h来获取磁盘信息)
logfile redis-6379.log # 产生的日记名
loglevel notice #日记级别(用于生产环境)
timeout 1800 # 在客户端空闲多久后关闭连接,单位为秒。0表示永不关闭,这里的值必须大于客户端设置的连接池的最小空闲时间
tcp-keepalive 0 # 0表示在没有通信的情况下,不会向客户端发送TCP ACK来检测客户端是否被关闭,因为在客户端有空闲检测,所以服务端没必要去检测客户端的状态
maxmemory 4gb # redis最多能用多少内存,如果不设置的话,redis会一直消耗完系统所有的内存
maxmemory-policy volatile-lfu # redis达到maxmemory后的内存回收策略,lfu比lru性能更好
lfu-log-factor 10
lfu-decay-time 1
dbfilename redis-6379.rdb # 产生的rdb文件名
rdbcompression yes # 开启rdb文件压缩
stop-writes-on-bgsave-error yes # bgsave错误的时候停止写操作来保证bgsave成功
rdbchecksum yes # 检测rdb文件的完整性
appendonly yes # 开启aof,建议主节点关闭,从节点开启
appendfsync everysec # aof刷盘策略
auto-aof-rewrite-min-size 64mb # 当aof文件多大的时候才进行重写
auto-aof-rewrite-percentage 100 # aof增长率
no-appendfsync-on-rewrite yes # 在aof重写的时候时候不进行正常的aof
appendfilename redis-6379.aof # 产生的aof文件名
# 当hash的大小小于512个,并且每个值都小于64byte时,就使用ziplist存储
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2 # redis的list结构是quickList,每个quickList由多个quicklistNode组成,每个quicklistNode有个指针指向实际存储的zipList。这里的-2是指zipList的长度8kb,超出了这个字节数,就会新起一个ziplist
list-compress-depth 0 # 压缩深度为0,表示zipList不压缩,不压缩的话,push/pop会快;深度为1时,表示quicklist首尾两个ziplist不压缩,其他的都压缩;如果深度为2,就表示quicklist的首尾第一个ziplist 以及首尾第二个ziplist都不压缩,其他的都压缩;以此类推
set-max-intset-entries 512 # 当intset的元素个数达到512个后,intset升级成dict
zset-max-ziplist-entries 128 # 与hash同理,因为set是hash的特殊情况,set的value都是null
zset-max-ziplist-value 64
# hll-sparse-max-bytes 3000
slowlog-max-len 1000 # 慢查询队列的长度
slowlog-log-slower-than 1000 # 多少时间定义为慢查询 单位微秒
cluster-enabled yes # 是否以集群的形式启动
cluster-config-file redis-nodes.conf
cluster-require-full-coverage no # 集群中是否16384个槽都可用或所有master节点都没有问题才对外提供服务,保证集群的完整性
cluster-node-timeout 15000 # 各个节点相互发送消息的频率,单位为毫秒。某节点发现与其他节点最后通信时间超过cluster-node-timeout/2时会发送ping命令,同时带上slots槽数组(2KB)和整个集群1/10的状态数据(10个节点的状态数据约1KB),该参数也会影响故障转移时间
client-output-buffer-limit normal 0 0 0 # 不限制普通客户端缓冲区
client-output-buffer-limit replica 512mb 128mb 60 # slave同步主节点的数据,当slave缓冲区超过512m或者缓冲区在60s秒一直处于128m以上,slave节点会被挂掉
client-output-buffer-limit pubsub 32mb 8mb 60
replica-lazy-flush yes # 从库接收完rdb文件后的 flush操作
lazyfree-lazy-eviction yes # 内存达到 maxmemory时进行淘汰
lazyfree-lazy-expire yes # key过期删除
lazyfree-lazy-server-del yes # rename指令删除destKey
4. 创建redis.conf里配置的dir路径
mkdir -p /data/redis
5. 分别启动六个节点的redis
src/redis-server redis.conf
6. 启动集群前linux的配置(可跳过)
sudo sysctl vm.overcommit_memory=1
sudo sysctl vm.swappiness=0
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo 511 > /proc/sys/net/core/somaxconn
7. 启动集群
src/redis-cli --cluster create 192.168.1.1:6379 192.168.1.2:6379 192.168.1.3:6379 192.168.1.4:6379 192.168.1.5:6379 192.168.1.6:6379 --cluster-replicas 1
# 查看集群命令
src/redis-cli --cluster help
src/redis-cli cluster nodes
src/redis-cli cluster info
启动集群前linux的配置参数说明
overcommit_memory
0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程
1:表示内核允许超额分配所有的物理内存,而不管当前的内存状态如何。
cat /proc/sys/vm/overcommit_memory
sudo sysctl vm.overcommit_memory=1
我们需要将该值设置成1,然后对redis设置合理的maxmemory 保证机器有20%-30%的闲置内存,保证fork,bgsave,aof重写不会阻塞主线程
swappiness
0:宁愿被OOM kill也不swap。物理内存不足的时候,避免redis死掉(如果当前redis为高可用,死掉比被调用swap导致的阻塞更好)
cat /proc/sys/vm/swappiness
立即生效:echo 0 > /proc/sys/vm/swappiness
永久生效:echo vm.swappiness=0 >> /etc/sysctl.conf
或者:sysctl vm.swappiness=0
THP
加速fork;建议禁用,否则可能会造成更大的内存开销
echo never > /sys/kernel/mm/transparent_hugepage/enabled
TCP backlog
redis默认的 tcp backlog值为511,可以通过修改配置tcp-backlog进行调整,如果linux的tcp-backlog小于redis设置的tcp-backlog,需要做如下修改
echo 511 > /proc/sys/net/core/somaxconn
今天的文章搭建redis集群-超详细的配置分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/21597.html