本来想一篇写完redis 部署,开发集成,在线调试。
写着写着发现内容很多,有些地方需要时间深入一下,于是就切分了三篇。
第一篇部署,第二篇,开发,第三篇,在线调试。
redis devops(二) springboot 2.4.2 集成r2dbc
后两篇如果自我感觉写地不好就存草稿不发了。
部署: 3主3从6台云主机
进入opt目录
cd /opt
根据官网下载安装。
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
tar xzf redis-6.2.6.tar.gz
cd redis-6.2.6
make
接着官网不讲了,在usr/local/bin 下加入快捷方式
make install
建立一个config目录,我的目录建在usr/local/bin 下,可任意
cd /usr/local/bin
mkdir config
测试是否可用
cp /opt/redis-6.2.6/redis.conf config
cd config
vim redis.conf #修改 daemonize yes
cd ..
redis-server config/redis.conf
redis-cli -p 6379 #测试是否运行成功
rm dump.rdb #删除测试文件
创建日志文件(我把日志,备份,集群节点都输出在这个目录)可任意
mkdir /log
替换usr/local/bin/config/redis.conf ,可先备份,也可以不备份,反正/opt/redis-6.2.6/redis.conf还在。
下面的配置,有些需要按需调整的
################################## INCLUDES ###################################
# include /path/to/local.conf
# include /path/to/other.conf
################################## MODULES #####################################
# loadmodule /path/to/my_module.so
# loadmodule /path/to/other_module.so
################################## NETWORK #####################################
# 指定 redis 只接收来自于该IP地址的请求(可以区分内外网网卡),如果不进行设置,那么将处理所有请求
bind 10.*.*.* #替换自身的局域网地址
# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码。
# 开启该参数后,redis只会本地进行访问
# 拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭,设置为no
protected-mode yes
#redis监听的端口号
port 10000 #示例端口号,推荐修改原生6379,后面开放集群端口需要这的端口+10000
# 此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义
# 的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端
# 速度缓慢的时候,可以将这二个参数一起参考设定。该内核参数默认值一般是128,对于负载很大的服务程序来说
# 大大的不够。一般会将它修改为2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,
# 然后在终端中执行sysctl -p
tcp-backlog 511
#此参数为设置客户端空闲超过timeout,服务端会断开连接,为0则服务端不会主动断开连接,不能小于0
timeout 0
# tcp keepalive参数。如果设置不为0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有两个好处:检测挂
# 掉的对端。降低中间设备出问题而导致网络看似连接却已经与对端端口的问题。在Linux内核中,设置了
# keepalive,redis会定时给对端发送ack。检测到对端关闭需要两倍的设置值
tcp-keepalive 300
################################# GENERAL #####################################
# 是否在后台执行,yes:后台运行;no:不是后台运行
daemonize yes
# redis的进程文件
pidfile /var/run/redis_**.pid #**自己替换一下
# 指定了服务端日志的级别。级别包括:debug(很多信息,方便开发、测试),verbose(许多有用的信息,
# 但是没有debug级别信息多),notice(适当的日志级别,适合生产环境),warn(只有非常重要的信息)
loglevel notice
# 指定了记录日志的文件。空字符串的话,日志会打印到标准输出设备。后台运行的redis标准输出是/dev/null
logfile /log/redis.log #可以自定义配置
# 设置为yes会把日志输出到系统日志
# syslog-enabled no
# 指定syslog的标示符,如果'syslog-enabled'是no,则这个选项无效
# syslog-ident redis
# 指定syslog 设备(facility), 必须是USER或者LOCAL0到LOCAL7.
# syslog-facility local0
# crash-log-enabled no
# crash-memcheck-enabled no
# 数据库的数量,默认使用的数据库是0。可以通过”SELECT 【数据库序号】“命令选择一个数据库,序号从0开始
databases 16
always-show-logo no
set-proc-title yes
################################ SNAPSHOTTING ################################
# RDB 自己选择RDB或者AOF
# save 3600 1
# save 300 100
# save 60 10000
#持久化出错继续工作
stop-writes-on-bgsave-error yes
#是否压缩rdb文件
rdbcompression yes
#保存rdb文件时,是否校验
rdbchecksum yes
dbfilename redis.rdb
#rdb文件是否删除同步锁
rdb-del-sync-files no
# The working directory.
dir /log/
################################# REPLICATION #################################
# replicaof <masterip> <masterport>
# 如果master设置了requirepass,那么slave要连上master,需要有master的密码才行。masterauth就是用来
# 配置master的密码,这样可以在连上master后进行认证
masterauth #推荐32位及以上 这里我6台机子使用了相同的密码,不同密码没研究
# masteruser <username>
# master using the new AUTH form: AUTH <username> <password>.
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-diskless-load disabled
# repl-ping-replica-period 10
# repl-timeout 60
repl-disable-tcp-nodelay no
# repl-backlog-ttl 3600
replica-priority 100
# replica-announced yes
# min-replicas-max-lag is set to 10.
############################### KEYS TRACKING #################################
# tracking-table-max-keys 1000000
################################## SECURITY ###################################
acllog-max-len 128
# aclfile /etc/redis/users.acl
#以Redis 6开始 requirepass 只是一个兼容性
# requirepass不兼容aclfile选项和ACL LOAD
requirepass #推荐32位及以上 这里我6台机子使用了相同的密码,不同密码没研究 没有使用acl,因为比较复杂
# acl-pubsub-default resetchannels
################################### CLIENTS ####################################
# 最大客户端数
# maxclients 10000
############################## MEMORY MANAGEMENT ################################
# 最大内存
# maxmemory <bytes>
# 内存达到上限的处理策略,默认volatile-lru
# maxmemory-policy noeviction
# maxmemory-samples 5
# maxmemory-eviction-tenacity 10
# replica-ignore-maxmemory yes
# active-expire-effort 1
############################# LAZY FREEING ####################################
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
################################ THREADED I/O #################################
# io-threads 4
# io-threads-do-reads no
############################ KERNEL OOM CONTROL ##############################
# Don't make changes to oom-score-adj (default).
oom-score-adj no
oom-score-adj-values 0 200 800
#################### KERNEL transparent hugepage CONTROL ######################
disable-thp yes
############################## APPEND ONLY MODE ###############################
# AOF 模式,默认关闭
appendonly no
appendfilename "appendonly.aof"
# If unsure, use "everysec".
# appendfsync always
# 每秒
appendfsync everysec
# 由操作系统决定
# appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
################################ LUA SCRIPTING ###############################
lua-time-limit 5000
################################ REDIS CLUSTER ###############################
# 开启集群
cluster-enabled yes
# 节点的配置文件
cluster-config-file nodes-20199.conf
# 节点的失联时间毫秒
cluster-node-timeout 15000
#
# cluster-replica-validity-factor 10
#
# cluster-migration-barrier 1
#
# cluster-allow-replica-migration yes
#
# cluster-require-full-coverage yes
#
# cluster-replica-no-failover no
#
# cluster-allow-reads-when-down no
# In order to setup your cluster make sure to read the documentation
# available at https://redis.io web site.
########################## CLUSTER DOCKER/NAT support ########################
#
# * cluster-announce-ip
# * cluster-announce-port
# * cluster-announce-tls-port
# * cluster-announce-bus-port
#
# Example:
#
# cluster-announce-ip 10.1.1.5
# cluster-announce-tls-port 6379
# cluster-announce-port 0
# cluster-announce-bus-port 6380
################################## SLOW LOG ###################################
#
slowlog-log-slower-than 10000
#
slowlog-max-len 128
################################ LATENCY MONITOR ##############################
#
latency-monitor-threshold 0
############################# EVENT NOTIFICATION ##############################
notify-keyspace-events ""
############################### GOPHER SERVER #################################
# gopher-enabled no
############################### ADVANCED CONFIG ###############################
#
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
#
list-max-ziplist-size -2
#
list-compress-depth 0
#
set-max-intset-entries 512
#
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
#
hll-sparse-max-bytes 3000
#
stream-node-max-bytes 4096
stream-node-max-entries 100
#
activerehashing yes
#
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
#
# client-query-buffer-limit 1gb
#
# proto-max-bulk-len 512mb
#
hz 10
#
dynamic-hz yes
#
aof-rewrite-incremental-fsync yes
#
rdb-save-incremental-fsync yes
# lfu-log-factor 10
# lfu-decay-time 1
########################### ACTIVE DEFRAGMENTATION #######################
#
jemalloc-bg-thread yes
# ignore-warnings ARM64-COW-BUG
其中的bind ip每一台机子都需要修改为局域网地址(为什么不能公网,请自行了解)
6台机子以此config 启动redis。
6台合体命令、3主3从
命令中请使用实际的ip,端口和密码
cd /opt/redis-6.2.6/src
redis-cli --cluster create --cluster-replicas 1 10.*.*.1:{port} 10.*.*.2:{port} 10.*.*.3:{port} 10.*.*.4:{port} 10.*.*.5:{port} 10.*.*.6:{port} -a {requirepass }
需要是否按照推荐地方式主从分配,输入yes,等待节点联通就成功了。
附:
1、安装前,可以更新一下系统,最好查找一下redis,看是否已经安装过。
2、开放防火墙,开放安全组 (2个端口,一个配置端口,一个配置端口+10000的端口)
3、(ubuntu20.04 解决一个警告)vim /etc/sysctl.conf -> vm.overcommit_memory = 1 然后sysctl vm.overcommit_memory=1