Redis集群部署

Redis的三种模式

分别是主从同步/复制、哨兵模式、Cluster

  1. 主从复制
    1. 主从复制是高可用Redis的基础,哨兵和群集都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单故障恢复。
    2. 缺陷:故障恢复无法自动化,写操作无法负载均衡,存储能力受到单机的限制。
  2. 哨兵
    1. 在主从复制的基础上,哨兵实现了自动化的故障恢复。
    2. 缺陷:写操作无法负载均衡,存储能力受到单机的限制,哨兵无法对从节点进行自动故障转移;在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作。
  3. 集群
    1. 通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。

安装

# 下载及操作目录
mkdir /root/redis
cd /root/redis

# 安装 gcc 套装 
yum install -y cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc mak
# 升级gcc
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
# 设置永久升级
echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile
source /etc/profile

# 下载解压 Redis 包
wget https://download.redis.io/releases/redis-6.0.9.tar.gz
tar zxvf redis-6.0.9.tar.gz

# 编译安装
cd redis-6.0.9
make
make PREFIX=/usr/local/redis install

配置

创建相关目录

# 数据目录
mkdir -p /ware/redis/data/

# 日志目录
mkdir -p /ware/redis/logs/

# 配置文件目录
mkdir -p /etc/redis/

配置文件(也可以直接修改这几部分)

sed -i s'/127.0.0.1/0.0.0.0/g' redis.conf 
sed -i s'/daemonize no/daemonize yes/g' redis.conf
sed -i s'/# cluster-enabled yes/cluster-enable yes/g' redis.conf
sed -i s'/appendonly no/appendonly yes/g' redis.conf
sed -i s'/# requirepass foobared/requirepass 123456/g' redis.conf 
sed -i s'#dir ./#dir /ware/redis/data/6379/#g' redis.conf 

配置文件:vi /etc/redis/redis_6379.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 #####################################
 
# bind 127.0.0.1
protected-mode yes  
#yes表示仅允许来自本地网络的连接,而阻止来自公共网络的访问
port 6379
tcp-backlog 10240
timeout 0
tcp-keepalive 300
 
################################# TLS/SSL #####################################
# port 0
# tls-port 6379
# tls-cert-file redis.crt
# tls-key-file redis.key
# tls-dh-params-file redis.dh
# tls-ca-cert-file ca.crt
# tls-ca-cert-dir /etc/ssl/certs
# tls-auth-clients no
# tls-auth-clients optional
# tls-replication yes
# tls-cluster yes
# tls-protocols "TLSv1.2 TLSv1.3"
# tls-ciphers DEFAULT:!MEDIUM
# tls-ciphersuites TLS_CHACHA20_POLY1305_SHA256
# tls-prefer-server-ciphers yes
# tls-session-caching no
# tls-session-cache-size 5000
# tls-session-cache-timeout 60
################################# GENERAL #####################################
 
daemonize yes   
#启用守护进程,将以后台进程运行
supervised no  
#服务器将不会受到监督程序的的管理
pidfile /var/run/redis_6379.pid
loglevel notice
logfile "/ware/redis/logs/redis_6379.log"
# syslog-enabled no
# syslog-ident redis
# syslog-facility local0
databases 16
always-show-logo yes  
#服务器将在启动时显示Redis的标志
 
################################ SNAPSHOTTING  ################################
#用于配置 Redis 的持久化功能
save 900 1 
#表示在执行至少一次写操作之后,如果在900秒内发生至少1个写操作,则自动执行背景数据快照
save 300 10
save 200 50
save 100 1000
save 80 5000
save 60 10000
stop-writes-on-bgsave-error yes 
#表示在执行背景数据快照发生错误时,停止写入操作
rdbcompression yes  
#表示在持久化数据时使用压缩
rdbchecksum yes  
#表示在持久化数据时计算校验和
dbfilename redis-dump_6379.rdb
rdb-del-sync-files no  
#表示在删除同步文件时不要等待确认
dir /ware/redis/data/6379/
 
################################# REPLICATION #################################
#用于配置 Redis 的复制功能和主从复制相关的参数
# replicaof <masterip> <masterport>  
#表示从服务器要复制的主服务器的 IP 地址和端口号
# masterauth foo  
#表示主服务器的身份验证密码
# masteruser <username>   
#表示主服务器的用户名
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  
#表示是否禁用 TCP 的 NODELAY 选项
# repl-backlog-size 1mb  
#表示复制缓冲区的大小
# repl-backlog-ttl 3600  
#表示复制缓冲区的过期时间
replica-priority 100   
#表示从服务器的优先级
# min-replicas-to-write 3
# min-replicas-max-lag 10
# replica-announce-ip 5.5.5.5
# replica-announce-port 1234
 
############################### KEYS TRACKING #################################
 
# tracking-table-max-keys 1000000
 
################################## SECURITY ###################################
 
acllog-max-len 128
requirepass xxxxxx 
# 认证密码
# rename-command CONFIG ""   
#这意味着在 Redis 中无法通过 CONFIG 命令来查看或修改 Redis 的配置参数。这个重命名可以增加 Redis 的安全性,防止未经授权的用户通过 CONFIG 命令获取敏感信息或更改配置
 
################################### CLIENTS ####################################
# maxclients 10000   
#Redis 服务器同时最多能处理的客户端连接数
############################## MEMORY MANAGEMENT ################################
 
# maxmemory <bytes>   
# Redis 服务器使用的最大内存限制
# maxmemory-policy noeviction   
#Redis 在内存使用超限时的策略:不会选择淘汰任何数据,而是停止接受新的写入操作
# maxmemory-samples 5   
#Redis 在检查内存使用情况时所考虑的样本数
# replica-ignore-maxmemory yes   
#从服务器将不会考虑配置,从而允许其使用更多的内存
# active-expire-effort 1
############################# LAZY FREEING ####################################
# Redis 数据库的垃圾回收和内存管理
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
 
################################ THREADED I/O #################################
 
# io-threads 4
# io-threads-do-reads no
 
############################ KERNEL OOM CONTROL ##############################
oom-score-adj no  
#Redis 将不会调整进程的 OOM score,从而确保进程在 OOM 事件中的优先级不变
oom-score-adj-values 0 200 800  
#当 Redis 使用的内存量达到阶段一的阈值时,进程的 OOM score 将增加 200;当达到阶段二的阈值时,OOM score 将增加 800。
############################## APPEND ONLY MODE ###############################
appendonly yes  
#启用Redis的AO功能,将所有写操作追加到一个文件中,以实现数据持久化
appendfilename "redis-appendonly_6379.aof"
# appendfsync always  
appendfsync everysec   
#Redis 每秒钟将数据同步到磁盘一次。
# appendfsync no
no-appendfsync-on-rewrite no  
#当AOF文件需要重新编写时,Redis 将同步数据到磁盘。
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   
#启用 Redis 的集群功能
#cluster-config-file nodes-6379.conf
# cluster-node-timeout 15000   
# Redis 集群节点超时时间
# cluster-replica-validity-factor 10
# cluster-migration-barrier 1
# cluster-require-full-coverage yes
# cluster-replica-no-failover no   
#Redis 集群从节点不允许进行故障转移
# cluster-allow-reads-when-down no  
#Redis集群不允许从故障节点读取数据
########################## CLUSTER DOCKER/NAT support  ########################
# cluster-announce-ip 10.1.1.5
# cluster-announce-port 6379
# cluster-announce-bus-port 6380
################################## SLOW LOG ###################################
 
slowlog-log-slower-than 10000   
# Redis 记录慢速操作的阈值
slowlog-max-len 128   
#慢速日志的最大长度为 128 条记录
 
################################ LATENCY MONITOR ##############################
 
latency-monitor-threshold 0   
#阈值被设置为 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
# server_cpulist 0-7:2
# bio_cpulist 1,3
# aof_rewrite_cpulist 8-11
# bgsave_cpulist 1,10-11

服务文件:vi /usr/lib/systemd/system/redis-6379.service

[Unit]
Description=redis 6379
Documentation=https://redis.io/documentation/
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/redis_6379.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

启动&自启动

systemctl enable redis-6379.service
systemctl start  redis-6379.service

集群配置

#复制二进制文件,省得再安装一遍
cp -a /usr/local/redis/ /usr/local/redis-6380/

#创建对应的目录
mkdir /ware/redia/data/6379
mkdir /ware/redia/data/6380

#复制/etc/redis/redis_6379.conf出一份/etc/redis/redis_6380.conf
cp -a /etc/redis/redis_6380.conf  /etc/redis/redis_6380.conf

#修改配置文件
sed -i s#6379#6380#g /etc/redis/redis_6380.conf

完整版redis_6380.conf(只是把6379的地方改成了6380)

################################## 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 #####################################
 
# bind 127.0.0.1
protected-mode yes  
#yes表示仅允许来自本地网络的连接,而阻止来自公共网络的访问
port 6380
tcp-backlog 10240
timeout 0
tcp-keepalive 300
 
################################# TLS/SSL #####################################
# port 0
# tls-port 6380
# tls-cert-file redis.crt
# tls-key-file redis.key
# tls-dh-params-file redis.dh
# tls-ca-cert-file ca.crt
# tls-ca-cert-dir /etc/ssl/certs
# tls-auth-clients no
# tls-auth-clients optional
# tls-replication yes
# tls-cluster yes
# tls-protocols "TLSv1.2 TLSv1.3"
# tls-ciphers DEFAULT:!MEDIUM
# tls-ciphersuites TLS_CHACHA20_POLY1305_SHA256
# tls-prefer-server-ciphers yes
# tls-session-caching no
# tls-session-cache-size 5000
# tls-session-cache-timeout 60
################################# GENERAL #####################################
 
daemonize yes   
#启用守护进程,将以后台进程运行
supervised no  
#服务器将不会受到监督程序的的管理
pidfile /var/run/redis_6380.pid
loglevel notice
logfile "/ware/redis/logs/redis_6380.log"
# syslog-enabled no
# syslog-ident redis
# syslog-facility local0
databases 16
always-show-logo yes  
#服务器将在启动时显示Redis的标志
 
################################ SNAPSHOTTING  ################################
#用于配置 Redis 的持久化功能
save 900 1 
#表示在执行至少一次写操作之后,如果在900秒内发生至少1个写操作,则自动执行背景数据快照
save 300 10
save 200 50
save 100 1000
save 80 5000
save 60 10000
stop-writes-on-bgsave-error yes 
#表示在执行背景数据快照发生错误时,停止写入操作
rdbcompression yes  
#表示在持久化数据时使用压缩
rdbchecksum yes  
#表示在持久化数据时计算校验和
dbfilename redis-dump_6380.rdb
rdb-del-sync-files no  
#表示在删除同步文件时不要等待确认
dir /ware/redis/data/6380/
 
################################# REPLICATION #################################
#用于配置 Redis 的复制功能和主从复制相关的参数
# replicaof <masterip> <masterport>  
#表示从服务器要复制的主服务器的 IP 地址和端口号
# masterauth foo  
#表示主服务器的身份验证密码
# masteruser <username>   
#表示主服务器的用户名
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  
#表示是否禁用 TCP 的 NODELAY 选项
# repl-backlog-size 1mb  
#表示复制缓冲区的大小
# repl-backlog-ttl 3600  
#表示复制缓冲区的过期时间
replica-priority 100   
#表示从服务器的优先级
# min-replicas-to-write 3
# min-replicas-max-lag 10
# replica-announce-ip 5.5.5.5
# replica-announce-port 1234
 
############################### KEYS TRACKING #################################
 
# tracking-table-max-keys 1000000
 
################################## SECURITY ###################################
 
acllog-max-len 128
requirepass chaoxing1993
# 认证密码
# rename-command CONFIG ""   
#这意味着在 Redis 中无法通过 CONFIG 命令来查看或修改 Redis 的配置参数。这个重命名可以增加 Redis 的安全性,防止未经授权的用户通过 CONFIG 命令获取敏感信息或更改配置
 
################################### CLIENTS ####################################
# maxclients 10000   
#Redis 服务器同时最多能处理的客户端连接数
############################## MEMORY MANAGEMENT ################################
 
# maxmemory <bytes>   
# Redis 服务器使用的最大内存限制
# maxmemory-policy noeviction   
#Redis 在内存使用超限时的策略:不会选择淘汰任何数据,而是停止接受新的写入操作
# maxmemory-samples 5   
#Redis 在检查内存使用情况时所考虑的样本数
# replica-ignore-maxmemory yes   
#从服务器将不会考虑配置,从而允许其使用更多的内存
# active-expire-effort 1
############################# LAZY FREEING ####################################
# Redis 数据库的垃圾回收和内存管理
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
 
################################ THREADED I/O #################################
 
# io-threads 4
# io-threads-do-reads no
 
############################ KERNEL OOM CONTROL ##############################
oom-score-adj no  
#Redis 将不会调整进程的 OOM score,从而确保进程在 OOM 事件中的优先级不变
oom-score-adj-values 0 200 800  
#当 Redis 使用的内存量达到阶段一的阈值时,进程的 OOM score 将增加 200;当达到阶段二的阈值时,OOM score 将增加 800。
############################## APPEND ONLY MODE ###############################
appendonly yes  
#启用Redis的AO功能,将所有写操作追加到一个文件中,以实现数据持久化
appendfilename "redis-appendonly_6380.aof"
# appendfsync always  
appendfsync everysec   
#Redis 每秒钟将数据同步到磁盘一次。
# appendfsync no
no-appendfsync-on-rewrite no  
#当AOF文件需要重新编写时,Redis 将同步数据到磁盘。
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   
#启用 Redis 的集群功能
#cluster-config-file nodes-6380.conf
# cluster-node-timeout 15000   
# Redis 集群节点超时时间
# cluster-replica-validity-factor 10
# cluster-migration-barrier 1
# cluster-require-full-coverage yes
# cluster-replica-no-failover no   
#Redis 集群从节点不允许进行故障转移
# cluster-allow-reads-when-down no  
#Redis集群不允许从故障节点读取数据
########################## CLUSTER DOCKER/NAT support  ########################
# cluster-announce-ip 10.1.1.5
# cluster-announce-port 6380
# cluster-announce-bus-port 6380
################################## SLOW LOG ###################################
 
slowlog-log-slower-than 10000   
# Redis 记录慢速操作的阈值
slowlog-max-len 128   
#慢速日志的最大长度为 128 条记录
 
################################ LATENCY MONITOR ##############################
 
latency-monitor-threshold 0   
#阈值被设置为 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
# server_cpulist 0-7:2
# bio_cpulist 1,3
# aof_rewrite_cpulist 8-11
# bgsave_cpulist 1,10-11

服务文件:vi /usr/lib/systemd/system/redis-6380.service

[Unit]
Description=redis 6380
Documentation=https://redis.io/documentation/
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/var/run/redis_6380.pid
ExecStart=/usr/local/redis-6380/bin/redis-server /etc/redis/redis_6380.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

启动6380端口redis

systemctl enable redis-6380.service
systemctl start  redis-6380.service

其他两台机器的两个redis同样的操作!!!!!!

六个redis示例都启动后,配置集群~~~~

/usr/local/redis/bin/redis-cli -a 你的密码 --cluster create  --cluster-replicas 1 192.168.255.131:6379 192.168.255.131:6380 192.168.255.132:6379 192.168.255.132:6380   192.168.255.133:6379 192.168.255.133:6380

框起来的部分,需要我们输入yes 

查看集群状态:

/usr/local/redis/bin/redis-cli -h 192.168.255.131 -p 6379 -a 你的密码 -c

192.168.255.131:6379> cluster info

 

测试集群可用性 

 

 

 测试发现,在131的6379redis上写入,在133的6379和6380redis上均可读,集群搭建成功!!!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值