# config
port 6391
tcp-backlog 511
timeout 0
tcp-keepalive 300
supervised no
pidfile /var/run/redis_6391.pid
loglevel notice
logfile ""
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
## The filename where to dump the DB
dbfilename dump.rdb
dir "/data"
################################# REPLICATION #################################
## Master-Replica replication. Use replicaof to make a Redis instance a copy of
masterauth 123456
# 带注解版config
## Redis configuration file example.
##
## Note that in order to read the configuration file, Redis must be
## started with the file path as first argument:
##
## ./redis-server /path/to/redis.conf
## Note on units: when memory size is needed, it is possible to specify
## it in the usual form of 1k 5GB 4M and so forth:
##
## 1k => 1000 bytes
## 1kb => 1024 bytes
## 1m => 1000000 bytes
## 1mb => 1024*1024 bytes
## 1g => 1000000000 bytes
## 1gb => 1024*1024*1024 bytes
##
## units are case insensitive so 1GB 1Gb 1gB are all the same.
################################## INCLUDES ###################################
## Include one or more other config files here. This is useful if you
## have a standard template that goes to all Redis servers but also need
## to customize a few per-server settings. Include files can include
## other files, so use this wisely.
##
## Notice option "include" won't be rewritten by command "CONFIG REWRITE"
## from admin or Redis Sentinel. Since Redis always uses the last processed
## line as value of a configuration directive, you'd better put includes
## at the beginning of this file to avoid overwriting config change at runtime.
##
## If instead you are interested in using includes to override configuration
## options, it is better to use include as the last line.
##
## include /path/to/local.conf
## include /path/to/other.conf
################################## MODULES #####################################
## Load modules at startup. If the server is not able to load modules
## it will abort. It is possible to use multiple loadmodule directives.
##
## loadmodule /path/to/my_module.so
## loadmodule /path/to/other_module.so
################################## NETWORK #####################################
## By default, if no "bind" configuration directive is specified, Redis listens
## for connections from all the network interfaces available on the server.
## It is possible to listen to just one or multiple selected interfaces using
## the "bind" configuration directive, followed by one or more IP addresses.
##
## Examples:
##
## bind 192.168.1.100 10.0.0.1
## bind 127.0.0.1 ::1
##
## ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
## internet, binding to all the interfaces is dangerous and will expose the
## instance to everybody on the internet. So by default we uncomment the
## following bind directive, that will force Redis to listen only into
## the IPv4 loopback interface address (this means Redis will be able to
## accept connections only from clients running into the same computer it
## is running).
##
## IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
## JUST COMMENT THE FOLLOWING LINE.
## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
## Protected mode is a layer of security protection, in order to avoid that
## Redis instances left open on the internet are accessed and exploited.
##
## When protected mode is on and if:
##
## 1) The server is not binding explicitly to a set of addresses using the
## "bind" directive.
## 2) No password is configured.
##
## The server only accepts connections from clients connecting from the
## IPv4 and IPv6 loopback addresses 127.0.0.1 and ::1, and from Unix domain
## sockets.
##
## By default protected mode is enabled. You should disable it only if
## you are sure you want clients from other hosts to connect to Redis
## even if no authentication is configured, nor a specific set of interfaces
## are explicitly listed using the "bind" directive.
protected-mode no
## Accept connections on the specified port, default is 6379 (IANA ##815344).
## If port 0 is specified Redis will not listen on a TCP socket.
port 6391
## TCP listen() backlog.
##
## In high requests-per-second environments you need an high backlog in order
## to avoid slow clients connections issues. Note that the Linux kernel
## will silently truncate it to the value of /proc/sys/net/core/somaxconn so
## make sure to raise both the value of somaxconn and tcp_max_syn_backlog
## in order to get the desired effect.
tcp-backlog 511
## Unix socket.
##
## Specify the path for the Unix socket that will be used to listen for
## incoming connections. There is no default, so Redis will not listen
## on a unix socket when not specified.
##
## unixsocket /tmp/redis.sock
## unixsocketperm 700
## Close the connection after a client is idle for N seconds (0 to disable)
timeout 0
## TCP keepalive.
##
## If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence
## of communication. This is useful for two reasons:
##
## 1) Detect dead peers.
## 2) Take the connection alive from the point of view of network
## equipment in the middle.
##
## On Linux, the specified value (in seconds) is the period used to send ACKs.
## Note that to close the connection the double of the time is needed.
## On other kernels the period depends on the kernel configuration.
##
## A reasonable value for this option is 300 seconds, which is the new
## Redis default starting with Redis 3.2.1.
tcp-keepalive 300
################################# GENERAL #####################################
## By default Redis does not run as a daemon. Use 'yes' if you need it.
## Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
daemonize no
## If you run Redis from upstart or systemd, Redis can interact with your
## supervision tree. Options:
## supervised no - no supervision interaction
## supervised upstart - signal upstart by putting Redis into SIGSTOP mode
## supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
## supervised auto - detect upstart or systemd method based on
## UPSTART_JOB or NOTIFY_SOCKET environment variables
## Note: these supervision methods only signal "process is ready."
## They do not enable continuous liveness pings back to your supervisor.
supervised no
## If a pid file is specified, Redis writes it where specified at startup
## and removes it at exit.
##
## When the server runs non daemonized, no pid file is created if none is
## specified in the configuration. When the server is daemonized, the pid file
## is used even if not specified, defaulting to "/var/run/redis.pid".
##
## Creating a pid file is best effort: if Redis is not able to create it
## nothing bad happens, the server will start and run normally.
pidfile /var/run/redis_6391.pid
## Specify the server verbosity level.
## This can be one of:
## debug (a lot of information, useful for development/testing)
## verbose (many rarely useful info, but not a mess like the debug level)
## notice (moderately verbose, what you want in production probably)
## warning (only very important / critical messages are logged)
loglevel notice
## Specify the log file name. Also the empty string can be used to force
## Redis to log on the standard output. Note that if you use standard
## output for logging but daemonize, logs will be sent to /dev/null
logfile ""
## To enable logging to the system logger, just set 'syslog-enabled' to yes,
## and optionally update the other syslog parameters to suit your needs.
## syslog-enabled no
## Specify the syslog identity.
## syslog-ident redis
## Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7.
## syslog-facility local0
## Set the number of databases. The default database is DB 0, you can select
## a different one on a per-connection basis using SELECT <dbid> where
## dbid is a number between 0 and 'databases'-1
databases 16
## By default Redis shows an ASCII art logo only when started to log to the
## standard output and if the standard output is a TTY. Basically this means
## that normally a logo is displayed only in interactive sessions.
##
## However it is possible to force the pre-4.0 behavior and always show a
## ASCII art logo in startup logs by setting the following option to yes.
always-show-logo yes
################################ SNAPSHOTTING ################################
##
## Save the DB on disk:
##
## save <seconds> <changes>
##
## Will save the DB if both the given number of seconds and the given
## number of write operations against the DB occurred.
##
## In the example below the behaviour will be to save:
## after 900 sec (15 min) if at least 1 key changed
## after 300 sec (5 min) if at least 10 keys changed
## after 60 sec if at least 10000 keys changed
##
## Note: you can disable saving completely by commenting out all "save" lines.
##
## It is also possible to remove all the previously configured save
## points by adding a save directive with a single empty string argument
## like in the following example:
##
## save ""
save 900 1
save 300 10
save 60 10000
## By default Redis will stop accepting writes if RDB snapshots are enabled
## (at least one save point) and the latest background save failed.
## This will make the user aware (in a hard way) that data is not persisting
## on disk properly, otherwise chances are that no one will notice and some
## disaster will happen.
##
## If the background saving process will start working again Redis will
## automatically allow writes again.
##
## However if you have setup your proper monitoring of the Redis server
## and persistence, you may want to disable this feature so that Redis will
## continue to work as usual even if there are problems with disk,
## permissions, and so forth.
stop-writes-on-bgsave-error yes
## Compress string objects using LZF when dump .rdb databases?
## For default that's set to 'yes' as it's almost always a win.
## If you want to save some CPU in the saving child set it to 'no' but
## the dataset will likely be bigger if you have compressible values or keys.
rdbcompression yes
## Since version 5 of RDB a CRC64 checksum is placed at the end of the file.
## This makes the format more resistant to corruption but there is a performance
## hit to pay (around 10%) when saving and loading RDB files, so you can disable it
## for maximum performances.
##
## RDB files created with checksum disabled have a checksum of zero that will
## tell the loading code to skip the check.
rdbchecksum yes
## The filename where to dump the DB
dbfilename dump.rdb
## The working directory.
##
## The DB will be written inside this directory, with the filename specified
## above using the 'dbfilename' configuration directive.
##
## The Append Only File will also be created inside this directory.
##
## Note that you must specify a directory here, not a file name.
dir "/data"
################################# REPLICATION #################################
## Master-Replica replication. Use replicaof to make a Redis instance a copy of
## another Redis server. A few things to understand ASAP about Redis replication.
##
## +------------------+ +---------------+
## | Master | ---> | Replica |
## | (receive writes) | | (exact copy) |
## +------------------+ +---------------+
##
## 1) Redis replication is asynchronous, but you can configure a master to
## stop accepting writes if it appears to be not connected with at least
## a given number of replicas.
## 2) Redis replicas are able to perform a partial resynchronization with the
## master if the replication link is lost for a relatively small amount of
## time. You may want to configure the replication backlog size (see the next
## sections of this file) with a sensible value depending on your needs.
## 3) Replication is automatic and does not need user intervention. After a
## network partition replicas automatically try to reconnect to masters
## and resynchronize with them.
##
## replicaof <masterip> <masterport>
## If the master is password protected (using the "requirepass" configuration
## directive below) it is possible to tell the replica to authenticate before
## starting the replication synchronization process, otherwise the master will
## refuse the replica request.
##
masterauth 123456
## When a replica loses its connection with the master, or when the replication
## is still in progress, the replica can act in two different ways:
## and to allocate it in a better place), and at the same time, will release the
## old copies of the data. This process, repeated incrementally for all the keys
## will cause the fragmentation to drop back to normal values.
##
## Important things to understand:
##
## 1. This feature is disabled by default, and only works if you compiled Redis
## to use the copy of Jemalloc we ship with the source code of Redis.
## This is the default with Linux builds.
##
## 2. You never need to enable this feature if you don't have fragmentation
## issues.
##
## 3. Once you experience fragmentation, you can enable this feature when
## needed with the command "CONFIG SET activedefrag yes".
##
## The configuration parameters are able to fine tune the behavior of the
## defragmentation process. If you are not sure about what they mean it is
## a good idea to leave the defaults untouched.
## Enabled active defragmentation
## activedefrag yes
## Minimum amount of fragmentation waste to start active defrag
## active-defrag-ignore-bytes 100mb
## Minimum percentage of fragmentation to start active defrag
## active-defrag-threshold-lower 10
## Maximum percentage of fragmentation at which we use maximum effort
## active-defrag-threshold-upper 100
## Minimal effort for defrag in CPU percentage
## active-defrag-cycle-min 5
## Maximal effort for defrag in CPU percentage
## active-defrag-cycle-max 75
## Maximum number of set/hash/zset/list fields that will be processed from
## the main dictionary scan
## active-defrag-max-scan-fields 1000
# redis.sh
redis-server /config/nodes-${PORT}.conf
# yml
version: "3"
services:
network_mode: host ## 使用host模式
privileged: true ## 拥有容器内命令执行的权限
volumes:
- /usr/local/src/docker/redis-cluster/config:/config ##配置文件目录映射到宿主机
entrypoint: ## 设置服务默认的启动程序
- /bin/bash
- redis.sh
redis-master2:
image: redis:5.0
working_dir: /config
container_name: node2
environment:
- PORT=6392
ports:
- 6392:6392
- 16392:16392
stdin_open: true
network_mode: host
tty: true
privileged: true
volumes:
- /usr/local/src/docker/redis-cluster/config:/config
entrypoint:
- /bin/bash
- redis.sh
redis-master3:
image: redis:5.0
container_name: node3
working_dir: /config
environment:
- PORT=6393
ports:
- 6393:6393
- 16393:16393
stdin_open: true
network_mode: host
tty: true
privileged: true
volumes:
- /usr/local/src/docker/redis-cluster/config:/config
entrypoint:
- /bin/bash
- redis.sh
# 集群的创建
- 需要在容器里面执行 一条创建集群的语句
- 关于建立集群的说明 https://www.cnblogs.com/zhoujinyi/p/11606935.html (opens new window)
redis-cli --cluster add-node 192.168.163.132:6382 192.168.163.132:6379 --cluster-slave --cluster-master-id 117457eab5071954faab5e81c3170600d5192270