普通安装
1.拉取镜像,redis:4.0
docker pull redis:4.0
2.创建redis容器名"redistest1",并开启持久化
docker run -d -p 6379:6379 --name redistest1 redis:4.0 redis-server --appendonly yes
参数说明:
--appendonly yes:开启持久化
挂载外部配置和数据安装
1.创建目录和配置文件redis.conf
mkdir /docker
mkdir /docker/redis
mkdir /docker/redis/conf
mkdir /docker/redis/data
创建redis.conf配置文件
touch /docker/redis/conf/redis.conf
redis.conf文件内容自行添加:
切记注释掉:#daemonize yes 否则无法启动容器
重要话说三遍:注释掉#daemonize yes,注释掉#daemonize yes,注释掉#daemonize yes
2.创建启动容器,加载配置文件并持久化数据
docker run -d --privileged=true -p 6379:6379 -v /docker/redis/conf/redis.conf:/etc/redis/redis.conf -v /docker/redis/data:/data --name redistest2 redis:6.0 redis-server /etc/redis/redis.conf --appendonly yes
参数说明:
--privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
-v /docker/redis/conf/redis.conf:/etc/redis/redis.conf:映射配置文件
-v /docker/redis/data:/data:映射数据目录
redis-server /etc/redis/redis.conf:指定配置文件启动redis-server进程
--appendonly yes:开启数据持久化
appendfsync always
每次有数据修改发⽣时都会写⼊ AOF ⽂件,消耗性
能多
appendfsync everysec 每秒钟同步⼀次,该策略为 AOF 的缺省策略。
appendfsync no
不主从同步,由操作系统⾃动调度刷磁盘,性能是
最好的,但是最不安全
配置文件
#任何ip可以访问
bind 0.0.0.0
#守护进程
#daemonize yes
#密码
requirepass 123456
#持久化⽂件名称
dbfilename xdclass.rdb
#持久化⽂件存储路径
dir /data/
#持久化策略, 10秒内有个1个key改动,执⾏快照
save 10 1
######之前配置######
#导出rdb数据库⽂件压缩字符串和对象,默认是yes,会浪费CPU但是节省空间
rdbcompression yes
# 导⼊时是否检查
rdbchecksum yes
#aof持久化配置
#appendonly yes
#appendfilename "appendonly.aof"
#appendfsync everysec
# aof重写期间是否同步
no-appendfsync-on-rewrite no
# 重写触发配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 加载aof时如果有错如何处理
# yes表示如果aof尾部⽂件出问题,写log记录并继续执⾏。
no表示提示写⼊等待修复后写⼊
aof-load-truncated yes
更多配置
#bind 127.0.0.1 #指定redis只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求
protected-mode no #不启用保护模式
port 6379 #指定redis运行的端口
tcp-backlog 511
timeout 0 #指定在一个 client 空闲多少秒之后关闭连接(0表示永不关闭)
tcp-keepalive 300 #单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,官方给出的建议值是300s,如果设置为0,则不会周期性的检测
daemonize no #默认情况下,redis 不是在后台运行的,如果需要在后台运行,把该项的值更改为yes
supervised no #没有监督互动
pidfile /var/run/redis_6379.pid #当Redis 在后台运行的时候,Redis 默认会把pid 文件放在/var/run/redis.pid,你可以配置到其他地址。当运行多个redis 服务时,需要指定不同的pid 文件和端口
loglevel notice #log 等级分为4 级,debug, verbose, notice, 和warning。生产环境下一般开启notice
logfile "" #配置log 文件地址,默认使用标准输出,即打印在命令行终端的窗口上
databases 16 #设置数据库的个数,可以使用SELECT <dbid>命令来切换数据库。默认使用的数据库是0
#redis数据RDB持久化配置,根据给定的时间间隔和写入次数将数据保存到磁盘
save 900 1 # 900 秒内如果至少有 1 个 key 的值变化,则保存
save 300 10 # 300 秒内如果至少有 10 个 key 的值变化,则保存
save 60 10000 # 60 秒内如果至少有 10000 个 key 的值变化,则保存
stop-writes-on-bgsave-error yes #如果用户开启了RDB快照功能,那么在redis持久化数据到磁盘时如果出现失败,默认情况下,redis会停止接受所有的写请求。此配置可以让用户很明确的知道内存中的数据和磁盘上的数据已经存在不一致了。
rdbcompression yes #存储至本地数据库时(持久化到rdb文件)是否压缩数据,默认为yes
rdbchecksum yes # 在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。
dbfilename dump.rdb
dir ./ # 数据库镜像备份的文件放置的路径,AOF文件也会存放在这个目录下面
slave-serve-stale-data yes # 当从库同主机失去连接或者复制正在进行,如果slave-serve-stale-data设置为yes(默认设置),从库会继续相应客户端的请求
slave-read-only yes # 你可以配置一个 slave 实体是否接受写入操作。从 redis 2.6 版起,默认 slaves 都是只读的。
repl-diskless-sync no #主从数据复制是否使用无硬盘复制功能。
repl-diskless-sync-delay 5 #当启用无硬盘备份,服务器等待一段时间后才会通过套接字向从站传送RDB文件,这个等待时间是可配置的。延迟时间以秒为单位,默认为5秒。要关掉这一功能,只需将它设置为0秒,传送会立即启动。
repl-disable-tcp-nodelay no #同步之后是否禁用从站上的TCP_NODELAY,如果选择no,从站的数据延时不会那么多,但备份需要的带宽相对较多。
slave-priority 100 # 从站优先级是可以从redis的INFO命令输出中查到的一个整数。当主站不能正常工作时,redis sentinel使用它来选择一个从站并将它提升为主站。 默认优先级是100
appendonly yes
#默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,
#会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,
#可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入appendonly.aof文件,
#每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
appendfilename "appendonly.aof" #aof文件名
appendfsync everysec
#aof持久化策略的配置
# no表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快。
# always表示每次写入都执行fsync,以保证数据同步到磁盘。
# everysec表示每秒执行一次fsync,可能会导致丢失这1s数据
no-appendfsync-on-rewrite no
#在aof重写或者写入rdb文件的时候,会执行大量IO,此时对于everysec和always的aof模式来说,执行fsync会造成阻塞过长时间,no-appendfsync-on-rewrite字段设置为默认设置为no。
#如果对延迟要求很高的应用,这个字段可以设置为yes,否则还是设置为no,这样对持久化特性来说这是更安全的选择。
#设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes。
auto-aof-rewrite-percentage 100 #aof自动重写配置,当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件增长到一定大小的时候,Redis能够调用bgrewriteaof对日志文件进行重写。
#当前AOF文件大小是上次日志重写得到AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程。
auto-aof-rewrite-min-size 64mb # 设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写
aof-load-truncated yes
#aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存。
#重启可能发生在redis所在的主机操作系统宕机后,尤其在ext4文件系统没有加上data=ordered选项,出现这种现象redis宕机或者异常终止不会造成尾部不完整现象,可以选择让redis退出,或者导入尽可能多的数据。
#如果选择的是yes,当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。
#如果是no,用户必须手动redis-check-aof修复AOF文件才可以。
lua-time-limit 5000
#如果达到最大时间限制(毫秒),redis会记个log,然后返回error。
#当一个脚本超过了最大时限。只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一个可以杀没有调write命令的东西。要是已经调用了write,只能用第二个命令杀
slowlog-log-slower-than 10000
# slog log是用来记录redis运行中执行比较慢的命令耗时。
#当命令的执行超过了指定时间,就记录在slow log中,slog log保存在内存中,所以没有IO操作。
#执行时间比slowlog-log-slower-than大的请求记录到slowlog里面,单位是微秒,所以1000000就是1秒。
#注意,负数时间会禁用慢查询日志,而0则会强制记录所有命令。
slowlog-max-len 128
#慢查询日志长度。当一个新的命令被写进日志的时候,最老的那个记录会被删掉,这个长度没有限制。只要有足够的内存就行,你可以通过 SLOWLOG RESET 来释放内存
latency-monitor-threshold 0
#迟监控功能是用来监控redis中执行比较缓慢的一些操作,用LATENCY打印redis实例在跑命令时的耗时图表。
#只记录大于等于下边设置的值的操作,0的话,就是关闭监视。
# 默认延迟监控功能是关闭的,如果你需要打开,也可以通过CONFIG SET命令动态设置。
notify-keyspace-events ""
#键空间通知使得客户端可以通过订阅频道或模式,来接收那些以某种方式改动了 Redis 数据集的事件。因为开启键空间通知功能需要消耗一些 CPU ,所以在默认配置下,该功能处于关闭状态。
hash-max-ziplist-entries 512
#这个参数指的是ziplist中允许存储的最大条目个数,,默认为512,建议为128
hash-max-ziplist-value 64
# ziplist中允许条目value值最大字节数,默认为64,建议为1024
list-max-ziplist-size -2
#当取正值的时候,表示按照数据项个数来限定每个quicklist节点上的ziplist长度。比如,当这个参数配置成5的时候,表示每个quicklist节点的ziplist最多包含5个数据项。
#当取负值的时候,表示按照占用字节数来限定每个quicklist节点上的ziplist长度。这时,它只能取-1到-5这五个值,每个值含义如下:
#2: 每个quicklist节点上的ziplist大小不能超过8 Kb。(-2是Redis给出的默认值)
list-compress-depth 0
#这个参数表示一个quicklist两端不被压缩的节点个数
set-max-intset-entries 512
# 数据量小于等于set-max-intset-entries用intset,大于set-max-intset-entries用set
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
#数据量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset
hll-sparse-max-bytes 3000
#value大小小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse)
#大于hll-sparse-max-bytes使用稠密的数据结构(dense),一个比16000大的value是几乎没用的,
#建议的value大概为3000。如果对CPU要求不高,对空间要求较高的,建议设置到10000左右
activerehashing yes
#Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。
# 如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存
client-output-buffer-limit normal 0 0 0
#对客户端输出缓冲进行限制可以强迫那些不从服务器读取数据的客户端断开连接,用来强制关闭传输缓慢的客户端。
#对于normal client,第一个0表示取消hard limit,
#第二个0和第三个0表示取消soft limit,normal client默认取消限制,因为如果没有寻问,他们是不会接收数据的
client-output-buffer-limit slave 256mb 64mb 60
#对于pubsub client,如果client-output-buffer一旦超过32mb,又或者超过8mb持续60秒,那么服务器就会立即断开客户端连接。
client-output-buffer-limit pubsub 32mb 8mb 60
# 对于pubsub client,如果client-output-buffer一旦超过32mb,又或者超过8mb持续60秒,那么服务器就会立即断开客户端连接。
hz 10
# redis执行任务的频率为1s除以hz
aof-rewrite-incremental-fsync yes
# 在aof重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync。
这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值
三、开启哨兵模式
3.1、sentinel.conf 配置文件
#### 根据需要修改一下内容
# 让sentinel服务后台运行(docker的话需要设置为no,非docker运行设置为yes, 因为docker有个-d属性就是让在后台运行的)
daemonize no
# 修改日志文件的路径
logfile "/data/sentinel.log"
# 修改监控的主redis服务器
# 最后一个2表示,两台机器判定主被动下线后,就进行failover(故障转移)
sentinel monitor mymaster *.*.*.*(公网ip) 6390 2
#超过5秒master还没有连接上,则认为master已经停止
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster 123456
3.2、创建本地映射文件夹,并将 sentinel.conf 放到 /usr/local/redis-sentinel/conf 文件夹内
# /usr/local/redis
cd /usr/locar/redis-sentinel
mkdir conf
mkdir data
3.3、启动 redis-sentinel 进程
docker run -d --name sentinel -p 26379:26379 \
-v /usr/local/redis-sentinel/conf/sentinel.conf:/etc/sentinel.conf \
-v /usr/local/redis-sentinel/data:/data redis:6.0 redis-sentinel /etc/sentinel.conf
3.4、进入 redis-sentinel 容器内查看
# 进入sentinel节点
docker exec -it sentinel redis-cli -p 26379
# 查看sentinel信息
info sentinel
3.5、服务测试
关闭 master 节点
执行二、主从集群搭建的2.4校验模块,多次执行 info replication 查看信息发生的变化
或者监听哨兵配置的日志文件,可以实时看到其发生的变