搭建redis集群-超详细的配置

搭建redis集群-超详细的配置1. 准备6台服务器 2. 下载redis(稳定版本:5.0.4) 3. 编辑redis.conf 4. 创建redis.conf里配置的dir路径 5. 分别启动六个节点的redis 6. 启动集群前linux的配置(可跳过) 7. 启动集群 1:表示内核允许超额分配所有的物…

关联文章:springboot搭建redis-cluster客户端,连接并使用我们这篇文章搭建好的redis集群

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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注