配置文件解析redis.conf
# redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端)。
daemonize no
# 指定redis进程的PID文件存放位置
pidfile /var/run/redis.pid
# redis进程的端口号
port 6379
#是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭设置为no。
protected-mode yes
# 绑定的主机地址
bind 127.0.0.1
# 客户端闲置多长时间后关闭连接,默认此参数为0即关闭此功能
timeout 300
# redis日志级别,可用的级别有debug.verbose.notice.warning
loglevel verbose
# log文件输出位置,如果进程以守护进程的方式运行,此处又将输出文件设置为stdout的话,就会将日志信息输出到/dev/null里面去了
logfile stdout
# 设置数据库的数量,默认为0可以使用select <dbid>命令在连接上指定数据库id
databases 16
# 指定在多少时间内刷新次数达到多少的时候会将数据同步到数据文件
save <seconds> <changes>
# 指定存储至本地数据库时是否压缩文件,默认为yes即启用存储
rdbcompression yes
# 指定本地数据库文件名
dbfilename dump.db
# 指定本地数据问就按存放位置
dir ./
# 指定当本机为slave服务时,设置master服务的IP地址及端口,在redis启动的时候他会自动跟master进行数据同步
replicaof <masterip> <masterport>
# 当master设置了密码保护时,slave服务连接master的密码
masterauth <master-password>
# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass footbared
# 设置同一时间最大客户连接数,默认无限制。redis可以同时连接的客户端数为redis程序可以打开的最大文件描述符,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回 max number of clients reached 错误信息
maxclients 128
# 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key。当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区
maxmemory<bytes>
# 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no。
appendonly no
# 指定跟新日志文件名默认为appendonly.aof
appendfilename appendonly.aof
# 指定更新日志的条件,有三个可选参数 - no:表示等操作系统进行数据缓存同步到磁盘(快),always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全), everysec:表示每秒同步一次(折衷,默认值);
appendfsync everysec
单机
Redis5
- /data/redis5.0/package 存储目录,用来存放源码包以及解压文件
- /data/redis5.0/install 安装目录,用来存放可执行二进制文件(即redis命令文件)
- /data/redis5.0/redis6379 工作目录,用来存放pid文件、log文件、持久化数据等文件
安装基础工具以及依赖
[root@redis01 ~]# yum install gcc-c++ wget -y
新建目录
[root@redis01 ~]# mkdir -p /data/redis5.0/{package,install,redis6379}
新建用户
[root@redis01 redis-5.0.7]# useradd -s /sbin/nologin redis
下载源码包、解压缩、编译
[root@redis01 ~]# cd /data/redis5.0/package && wget https://download.redis.io/releases/redis-5.0.7.tar.gz
[root@redis01 package]# tar -xf redis-5.0.7.tar.gz
[root@redis01 package]# cd redis-5.0.7/
[root@redis01 redis-5.0.7]# make
[root@redis01 redis-5.0.7]# make PREFIX=/data/redis5.0/install install
编辑配置文件
[root@redis01 redis-5.0.7]# cp redis.conf /data/redis5.0/redis6379/
[root@redis01 redis-5.0.7]# vi /data/redis5.0/redis6379/redis.conf
# 监听所有ip地址,外网可以访问
#bind 127.0.0.1
bind 0.0.0.0
# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭设置为no
protected-mode yes
# 端口
port 6379
# 允许后台启动
daemonize yes
# pid存放位置
pidfile /data/redis5.0/redis6379/redis_6379.pid
# 日志级别,可用的级别有debug.verbose.notice.warning
loglevel verbose
# 错误日志存放位置
logfile "/data/redis5.0/redis6379/redis_err_6379.log"
# dump
dbfilename dump6379.rdb
# dir
dir /data/redis/redis6379/
# 密码
requirepass 123456
变更文件属主属组
[root@redis01 redis-5.0.7]# chown -R redis.redis /data/redis5.0/redis6379
新建systemd启动文件
[root@redis01 redis-5.0.7]# cat > /usr/lib/systemd/system/redis.service <<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
ExecStart=/data/redis5.0/install/bin/redis-server /data/redis5.0/redis6379/redis.conf --supervised systemd
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
Type=forking
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
EOF
启动
[root@redis01 redis-5.0.7]# systemctl daemon-reload
[root@redis01 redis-5.0.7]# systemctl start redis
[root@redis01 redis-5.0.7]# systemctl status redis
[root@redis01 redis-5.0.7]# systemctl enable redis
扩展:环境变量
[root@redis01 ~]# vi /etc/profile.d/redis.sh
export REDIS_HOME=/data/redis5.0/install
export PATH=$PATH:$REDIS_HOME/bin
[root@redis01 ~]# source /etc/profile.d/redis.sh
## [root@redis01 ~]# redis-cli -p 6379 -h 192.168.1.23 -a 123456
[root@redis01 ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info
# Server
redis_version:5.0.7
...
主从模式
主:
- 读
- 写
从:
- 读
- 写
角色 | 主机 | 系统 |
---|---|---|
主 | 192.168.1.23 | CentOS 7.6 Mini |
从 | 192.168.1.10 | CentOS 7.6 Mini |
从 | 192.168.1.11 | CentOS 7.6 Mini |
- 主–192.168.1.23
[root@redis01 ~]# yum install gcc-c++ wget -y
[root@redis01 ~]# mkdir -p /data/redis5.0/{package,install,redis6379}
[root@redis01 ~]# useradd -s /sbin/nologin redis
[root@redis01 ~]# cd /data/redis5.0/package && wget https://download.redis.io/releases/redis-5.0.7.tar.gz
[root@redis01 package]# tar -xf redis-5.0.7.tar.gz
[root@redis01 package]# cd redis-5.0.7/
[root@redis01 redis-5.0.7]# make
[root@redis01 redis-5.0.7]# make PREFIX=/data/redis5.0/install install
[root@redis01 redis-5.0.7]# cp redis.conf /data/redis5.0/redis6379/
[root@redis01 redis-5.0.7]# vi /data/redis5.0/redis6379/redis.conf
bind 0.0.0.0
protected-mode yes
port 6379
daemonize yes
pidfile /data/redis5.0/redis6379/redis_6379.pid
loglevel notice
logfile "/data/redis5.0/redis6379/redis_err_6379.log"
dbfilename dump6379.rdb
dir /data/redis5.0/redis6379/
requirepass 123456
masterauth 123456
[root@redis01 redis-5.0.7]# chown -R redis.redis /data/redis5.0/redis6379
[root@redis01 redis-5.0.7]# cat > /usr/lib/systemd/system/redis.service <<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
ExecStart=/data/redis5.0/install/bin/redis-server /data/redis5.0/redis6379/redis.conf --supervised systemd
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
Type=forking
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
EOF
[root@redis01 redis-5.0.7]# systemctl daemon-reload
[root@redis01 redis-5.0.7]# systemctl start redis && systemctl enable redis
[root@redis01 redis-5.0.7]# systemctl status redis
[root@redis01 ~]# vi /etc/profile.d/redis.sh
export REDIS_HOME=/data/redis5.0/install
export PATH=$PATH:$REDIS_HOME/bin
[root@redis01 ~]# source /etc/profile.d/redis.sh
[root@redis01 ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info
# Server
redis_version:5.0.7
...
- 从–192.168.1.10
[root@redis02 ~]# yum install gcc-c++ wget -y
[root@redis02 ~]# mkdir -p /data/redis5.0/{package,install,redis6379}
[root@redis02 ~]# useradd -s /sbin/nologin redis
[root@redis02 ~]# cd /data/redis5.0/package && wget https://download.redis.io/releases/redis-5.0.7.tar.gz
[root@redis02 package]# tar -xf redis-5.0.7.tar.gz
[root@redis02 package]# cd redis-5.0.7/
[root@redis02 redis-5.0.7]# make
[root@redis02 redis-5.0.7]# make PREFIX=/data/redis5.0/install install
[root@redis02 redis-5.0.7]# cp redis.conf /data/redis5.0/redis6379/
[root@redis02 redis-5.0.7]# vi /data/redis5.0/redis6379/redis.conf
bind 0.0.0.0
protected-mode yes
port 6379
daemonize yes
pidfile /data/redis5.0/redis6379/redis_6379.pid
loglevel notice
logfile "/data/redis5.0/redis6379/redis_err_6379.log"
dbfilename dump6379.rdb
dir /data/redis5.0/redis6379/
replicaof 192.168.1.23 6379
requirepass 123456
masterauth 123456
[root@redis02 redis-5.0.7]# chown -R redis.redis /data/redis5.0/redis6379
[root@redis02 redis-5.0.7]# cat > /usr/lib/systemd/system/redis.service <<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
ExecStart=/data/redis5.0/install/bin/redis-server /data/redis5.0/redis6379/redis.conf --supervised systemd
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
Type=forking
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
EOF
[root@redis02 redis-5.0.7]# systemctl daemon-reload
[root@redis02 redis-5.0.7]# systemctl start redis && systemctl enable redis
[root@redis02 redis-5.0.7]# systemctl status redis
[root@redis02 ~]# vi /etc/profile.d/redis.sh
export REDIS_HOME=/data/redis5.0/install
export PATH=$PATH:$REDIS_HOME/bin
[root@redis02 ~]# source /etc/profile.d/redis.sh
[root@redis02 ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info
# Server
redis_version:5.0.7
...
- 从–192.168.1.11
同步骤2配置相同即可
哨兵模式
- redis主从
- 主
bind 0.0.0.0
protected-mode yes
port 6379
daemonize yes
pidfile /data/redis5.0/redis6379/redis_6379.pid
loglevel notice
logfile "/data/redis5.0/redis6379/redis_err_6379.log"
dbfilename dump6379.rdb
dir /data/redis5.0/redis6379/
requirepass 123456
masterauth 123456
- 从
bind 0.0.0.0
protected-mode yes
port 6379
daemonize yes
pidfile /data/redis5.0/redis6379/redis_6379.pid
loglevel notice
logfile "/data/redis5.0/redis6379/redis_err_6379.log"
dbfilename dump6379.rdb
dir /data/redis5.0/redis6379/
replicaof 192.168.1.23 6379
requirepass 123456
masterauth 123456
- sentinel主从
配置文件详解sentinel.conf
# 哨兵sentinel实例运行的端口,默认26379
port 26379
# 哨兵sentinel的工作目录
dir ./
# 是否开启保护模式,默认开启。
protected-mode:no
# 是否设置为后台启动。
daemonize:yes
# 哨兵sentinel的日志文件
logfile:./sentinel.log
# 哨兵sentinel监控的redis主节点的
## ip:主机ip地址
## port:哨兵端口号
## master-name:可以自己命名的主节点名字(只能由字母A-z、数字0-9 、这三个字符".-_"组成。)
## quorum:当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 2
# 当在Redis实例中开启了requirepass,所有连接Redis实例的客户端都要提供密码。
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster 123456
# 指定主节点应答哨兵sentinel的最大时间间隔,超过这个时间,哨兵主观上认为主节点下线,默认30秒
# sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 30000
# 指定了在发生failover主备切换时,最多可以有多少个slave同时对新的master进行同步。这个数字越小,完成failover所需的时间就越长;反之,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以通过将这个值设为1,来保证每次只有一个slave,处于不能处理命令请求的状态。
# sentinel parallel-syncs <master-name> <numslaves>
sentinel parallel-syncs mymaster 1
# 故障转移的超时时间failover-timeout,默认三分钟,可以用在以下这些方面:
## 1. 同一个sentinel对同一个master两次failover之间的间隔时间。
## 2. 当一个slave从一个错误的master那里同步数据时开始,直到slave被纠正为从正确的master那里同步数据时结束。
## 3. 当想要取消一个正在进行的failover时所需要的时间。
## 4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来同步数据了
# sentinel failover-timeout <master-name> <milliseconds>
sentinel failover-timeout mymaster 180000
# 当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本。一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。
# 对于脚本的运行结果有以下规则:
## 1. 若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10。
## 2. 若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。
## 3. 如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。
# sentinel notification-script <master-name> <script-path>
sentinel notification-script mymaster /var/redis/notify.sh
# 这个脚本应该是通用的,能被多次调用,不是针对性的。
# sentinel client-reconfig-script <master-name> <script-path>
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh
三哨兵:三台服务器每台服务器上启动一个sentinel,配置方式相同
[root@redis01 ~]# cp /data/redis5.0/package/redis-5.0.7/sentinel.conf /data/redis5.0/redis6379/
[root@redis01 ~]# vi /data/redis5.0/redis6379/sentinel.conf
protected-mode no
port 26379
daemonize yes
pidfile /data/redis5.0/redis6379/redis-sentinel.pid
logfile "/data/redis5.0/redis6379/sentinel.log"
dir /data/redis5.0/redis6379/
sentinel monitor mymaster 192.168.1.23 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
[root@redis01 redis-5.0.7]# chown -R redis.redis /data/redis5.0/redis6379/sentinel.conf
[root@redis01 ~]# cat > /usr/lib/systemd/system/sentinel.service <<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
ExecStart=/data/redis5.0/install/bin/redis-sentinel /data/redis5.0/redis6379/sentinel.conf --supervised systemd
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
Type=forking
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
EOF
[root@redis01 ~]# systemctl start sentinel && systemctl enable sentinel
三台服务器均启动sentinel服务后,可以查看sentinel主从状态信息
[root@redis01 ~]# redis-cli -p 26379 -h 192.168.1.23
192.168.1.23:26379> info sentinel
192.168.1.23:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.1.23:6379,slaves=2,sentinels=3
集群模式
配置文件详解
# 开启集群模式,普通模式启动的redis无法加入集群,必须以集群的方式启动redis;(启动redis后,日志打印redis标志的右侧会显示当前redis版本、32或64位、启动模式、端口、pid等信息)
cluster-enabled yes
# 设置集群配置的名字,每个集群节点都有一个集群配置,该配置是redis自动创建修改的,每个节点集群配置的名字应该唯一
cluster-config-file nodes-6379.conf
# 设置节点故障超时(毫秒),其他的时间限制基本为该设置的倍数
cluster-node-timeout 15000
# 设置副本有效(可进行故障转移)因子,副本数据太老旧就不会被选为故障转移副本,如果副本与主服务器最后交互时间超过(node-timeout * replica-validity-factor) + repl-ping-replica-period的值,则不会进行故障转移;(因子过大可能更容易使用太旧的数据进行故障转移,因子过小可能无法选择副本进行故障转移,0是唯一可以保证所有分区恢复时集群能够继续运行的值,0值可以保证集群最大可用性)
cluster-replica-validity-factor 10
# 设置一个master故障转移所需最少的副本个数,由于没有正常工作副本的master无法进行故障转移,当一个master拥有超过该值个副本,就会将多余副本转移给孤立的master,以提高抗故障能力;(默认值是1,因为至少有一个正常工作的副本时才能故障转移,如果要禁用只需设置一个很大的数即可或者设置cluster-allow-replica-migration为no,设置为0只用在调试中,在生产环境中设置0是危险的)
cluster-migration-barrier 1
# 关闭此项允许较低要求的自动集群配置;该项可以阻止孤立master进行迁移,也阻止变为空的master进行迁移;(默认“yes”,即允许自动迁移)
cluster-allow-replica-migration yes
# 设置集群是否覆盖全槽位,默认集群检测到16384个槽位没有全部覆盖(存在槽位没有正在运行的节点处理),整个集群停止查询服务,也就是整个集群不可用,当槽位再次全部覆盖后,集群自动变为可用,如果需要在槽位没有全覆盖情况下让已覆盖槽位支持查询,只需设置为no即可
cluster-require-full-coverage yes
# 设置是否进行故障转移,如果设置为yes,则将阻止master故障时进行故障转移,但扔可以手动强制进行故障转移;(在一些特定场景下可能用得到)
cluster-replica-no-failover no
# 设置允许集群down状态可读(只要节点认为自己拥有槽位);可用于两种情况:一是适用于在应用程序在节点故障或者网络分区时不需要数据一致性的情况(例如缓存),二是适用于不满足三个分片集群但又需要开启集群后面进行扩展的情况;(不启用该配置时1或2个分片配置的集群里一个master停止服务会导致整个集群读写停止,开启该配置只会停止写服务;达不到master的quorum数,槽位所有权不会自动改变)
cluster-allow-reads-when-down no
# 设置允许集群down状态可以发布分片信息(只要节点认为自己拥有槽位);当应用程序想要在集群状态不是ok时使用订阅发布特性,设置yes是很有用的;如果应用程序确保只有一个分片服务特定通道,这个设置应保持yes
cluster-allow-pubsubshard-when-down yes
# 设置单个集群总线连接的发送字节缓冲区的内存使用限制,超过限制缓冲区将被清空(主要为了防止发送缓冲区发送给慢速连接时无限延长时间的问题);默认禁用,当“CLUSTER LINKS”命令输出中“mem_cluster_links”信息或者“send-buffer-allocated”元素不断增加时应启用该设置;建议最小设置1gb,这样默认情况下集群连接缓冲区可以容纳至少一个subpub消息(client-query-buffer-limit默认是1gb)
cluster-link-sendbuf-limit 0
# 配置集群宣布的主机名;主要用于需要TLS服务名称信息(SNI)的应用或者依靠DNS路由的应用;该值通过集群总线与全部节点交互,设置为空字符串将移除主机名
cluster-announce-hostname ""
# 设置告诉客户端使用何种方式连接集群(IP地址、用户自定义主机名、声明没有端点);可以设置为“ip”、“hostname”、“unknown-endpoint”,用于控制MOVED/ASKING请求的返回和CLUSTER SLOTS的第一个字段(如果指定了hostname但没有公布主机名,则会返回“?”)
cluster-preferred-endpoint-type ip
redis-cli --cluster的help
[centos@localhost bin]$ ./redis-cli --cluster help
Cluster Manager Commands:
create host1:port1 ... hostN:portN 创建集群
--cluster-replicas <arg> 指定每个主节点的副本节点个数
check host:port 检查集群
--cluster-search-multiple-owners 检查集群同一个槽位是否被分给多个节点
info host:port 显示集群信息
fix host:port 修复集群
--cluster-search-multiple-owners 修复同一个槽位分给多个节点的问题
--cluster-fix-with-unreachable-masters
reshard host:port 迁移槽位
--cluster-from <arg> 指定源节点,多个用逗号隔开,参数为nodeid,参数可指定all,不设置该项会交互式询问
--cluster-to <arg> 指定一个目标节点,参数为nodeid,不设置该项会交互式询问
--cluster-slots <arg> 指定迁移槽位数量,不设置该项会交互式询问
--cluster-yes 设定交互式的时候自动回复yes
--cluster-timeout <arg> 迁移超时时间
--cluster-pipeline <arg> 指定cluster getkeysinslot一次返回的数量(默认10个)
--cluster-replace 直接复制到目标节点(没发现有啥明显作用)
rebalance host:port 重新平衡节点槽位
--cluster-weight <node1=w1...nodeN=wN> 指定节点槽位权重
--cluster-use-empty-masters 指定可以使用未分配槽位的主节点(默认忽略0槽位主节点)
--cluster-timeout <arg> 指定超时时间
--cluster-simulate 仅模拟平衡槽位操作,实际数据无影响
--cluster-pipeline <arg> 指定cluster getkeysinslot一次返回的数量(默认10个)
--cluster-threshold <arg> 设定进行重新平衡槽位的阈值
--cluster-replace
add-node new_host:new_port existing_host:existing_port 添加新节点(默认是主节点)
--cluster-slave 指定添加的是副本节点,自动分配主节点
--cluster-master-id <arg> 为添加的副本节点指定主节点
del-node host:port node_id 删除节点,并关闭该redis
call host:port command arg arg .. arg 在集群所有节点执行相同命令
--cluster-only-masters
--cluster-only-replicas
set-timeout host:port milliseconds 同配置文件的cluster-node-timeout
import host:port 将非集群redis数据导入集群
--cluster-from <arg> 指定外部redis
--cluster-from-user <arg>
--cluster-from-pass <arg>
--cluster-from-askpass
--cluster-copy
--cluster-replace
backup host:port backup_directory
help
For check, fix, reshard, del-node, set-timeout, info, rebalance, call, import, backup you can specify the host and port of any working node in the cluster.
Cluster Manager Options:
--cluster-yes Automatic yes to cluster commands prompts
运行redis服务
[root@redis01 ~]# yum install gcc-c++ wget -y
[root@redis01 ~]# mkdir -p /data/redis5.0/{package,install,redis6379}
[root@redis01 ~]# useradd -s /sbin/nologin redis
[root@redis01 ~]# cd /data/redis5.0/package && wget https://download.redis.io/releases/redis-5.0.7.tar.gz
[root@redis01 package]# tar -xf redis-5.0.7.tar.gz
[root@redis01 package]# cd redis-5.0.7/
[root@redis01 redis-5.0.7]# make
[root@redis01 redis-5.0.7]# make PREFIX=/data/redis5.0/install install
[root@redis01 redis-5.0.7]# cp redis.conf /data/redis5.0/redis6379/
[root@redis01 redis-5.0.7]# vi /data/redis5.0/redis6379/redis.conf
bind 192.168.1.23
protected-mode yes
port 6379
daemonize yes
pidfile /data/redis5.0/redis6379/redis_6379.pid
loglevel notice
logfile "/data/redis5.0/redis6379/redis_err_6379.log"
dbfilename dump.rdb
dir /data/redis5.0/redis6379/
masterauth 123456
requirepass 123456
appendonly yes
cluster-enabled yes
cluster-config-file /data/redis5.0/redis6379/nodes-6379.conf
[root@redis01 redis-5.0.7]# chown -R redis.redis /data/redis5.0/redis6379
[root@redis01 redis-5.0.7]# cat > /usr/lib/systemd/system/redis.service <<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
ExecStart=/data/redis5.0/install/bin/redis-server /data/redis5.0/redis6379/redis.conf --supervised systemd
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
Type=forking
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
EOF
[root@redis01 redis-5.0.7]# systemctl daemon-reload
[root@redis01 redis-5.0.7]# systemctl start redis && systemctl enable redis
[root@redis01 redis-5.0.7]# systemctl status redis
[root@redis01 ~]# vi /etc/profile.d/redis.sh
export REDIS_HOME=/data/redis5.0/install
export PATH=$PATH:$REDIS_HOME/bin
[root@redis01 ~]# source /etc/profile.d/redis.sh
[root@redis01 ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info
# Server
redis_version:5.0.7
...
创建集群
[root@redis01 ~]# redis-cli -a 123456 --cluster create 192.168.1.23:6379 192.168.1.10:6379 192.168.1.11:6379 192.168.1.12:6379 192.168.1.13:6379 192.168.1.14:6379 --cluster-replicas 1
检查集群
[root@redis01 ~]# redis-cli -a 123456 --cluster check 192.168.1.23:6379
存取数据测试
[root@redis01 ~]# redis-cli -c -a 123456 -h 192.168.1.23 -p 6379
# -c 指定集群模式
# -a 指定密码