redis6.2 使用 TLS 的部署(三种高可用模式)

安装redis6.2 并启用TLS加密

安装

# 安装依赖软件
sudo apt update
sudo apt install make gcc libssl-dev pkg-config

# 下载redis 解压
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
tar -xvf redis-6.2.6.tar.gz

# 编译
cd redis-6.2.6
make BUILD_TLS=yes
# 如果执行编译出错,提示 zmalloc.h:50:10: fatal error: jemalloc/jemalloc.h: No such file or directory 执行 MALLOC=libc
make BUILD_TLS=yes MALLOC=libc
make install 
#拷贝命令到环境变量中
cd src
cp redis-sentinel redis-cli redis-server /usr/bin/
#overcommit_memory设置为1
echo "vm.overcommit_memory = 1" >>/etc/sysctl.conf 
sysctl -p   #生效

创建TLS证书

# 创建目录
mkdir -p /etc/redis/{conf,ssl,logs,pid,data}
# 创建证书
./utils/gen-test-certs.sh
# 拷贝证书都指定位置
cp tests/tls/redis.* /etc/redis/ssl/
cp tests/tls/ca.crt /etc/redis/ssl/

./utils/gen-test-certs.sh

在这里插入图片描述

编写配置文件

/etc/redis/conf/redis.conf

##########################################基础参数配置############################################
bind 0.0.0.0
protected-mode no
#端口0代表完全禁用非TLS端口
port 0
tls-port 6379
tcp-backlog 511
unixsocket /tmp/redis.sock
unixsocketperm 700
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /etc/redis/pid/redis.pid
loglevel notice
logfile /etc/redis/logs/redis.log
databases 16
always-show-logo yes
################################# 持久化配置 #################################
#RDB 快照持久化
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /etc/redis/data
#AOF 持久化
appendonly no
appendfilename appendonly.aof
appendfsync everysec
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
aof-rewrite-incremental-fsync yes
################################# 主从配置 #################################
#replicaof <masterip> <masterport>
#masterauth <master-password>
replica-serve-stale-data no
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
repl-backlog-size 10mb
repl-backlog-ttl 3600
################################## 安全认证 ###################################
requirepass 123456
rename-command CONFIG b840fc02d524045429941cc43f59e41cb7be6c52
################################## TLS 配置 ###################################
tls-cert-file /etc/redis/ssl/redis.crt
tls-key-file /etc/redis/ssl/redis.key
tls-ca-cert-file /etc/redis/ssl/ca.crt
tls-dh-params-file /etc/redis/ssl/redis.dh
tls-auth-clients yes
tls-replication yes
#指定tls-replication yes才能将TLS用于到主服务器的对外连接,sentinel也需要同步设置。
#tls-cluster yes
################################## 连接配置 ##################################
maxclients 10000
############################# 懒惰的释放 ####################################
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
################################ LUA时间限制 ###############################
lua-time-limit 5000
############################### 慢日志  ################################
slowlog-log-slower-than 10000
slowlog-max-len 128
#rejson.so
#loadmodule /usr/local/redis-6.2.0/module/rejson.soo
######################### 高级设置 #########################
activerehashing yes
#缓存空间限制
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 1024mb 256mb 300
client-output-buffer-limit pubsub 32mb 8mb 60
client-query-buffer-limit 1gb
#加快写入rdb 和aof
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
######################### 多线程设置 #########################
## 设置线程数,不超过CPU可用总核数
#io-threads 4
## 设置yes 开启多线程
#io-threads-do-reads yes

systemd管理

/etc/systemd/system/redis.service

[Unit]
Description=redis
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/bin/redis-server /etc/redis/conf/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
# 这个根据配置填写
ExecStop=/usr/bin/redis-cli -p 6379 -a 123456 shutdown
PrivateTmp=true

[Install]
WantedBy=multi-user.target

#启动并自启
systemctl daemon-reload
systemctl start redis.service 
systemctl enable redis.service 
Created symlink /etc/systemd/system/multi-user.target.wants/redis.service → /usr/lib/systemd/system/redis.service.

测试连接

因为我们启用了TLS 设置,我们连接时也必须带上证书,不指定证书,就不能认证登录来操作redis

指定证书连接

redis-cli --tls --cert /etc/redis/ssl/redis.crt --key /etc/redis/ssl/redis.key --cacert /etc/redis/ssl/ca.crt -p 6379

在这里插入图片描述

redis 主从 配置 tls

接上面的操作配置,将上面当中master ,下面来配置一个slave

masterslave
192.168.50.235192.168.50.236
Ubuntu:18.04Ubuntu:18.04
redis.6.2.6redis6.2.6

安装

# 安装依赖软件
sudo apt update
sudo apt install make gcc libssl-dev pkg-config

# 下载redis 解压
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
tar -xvf redis-6.2.6.tar.gz

# 编译
cd redis-6.2.6
make BUILD_TLS=yes
# 如果执行编译出错,提示 zmalloc.h:50:10: fatal error: jemalloc/jemalloc.h: No such file or directory 执行 MALLOC=libc
make BUILD_TLS=yes MALLOC=libc
make install 
#拷贝命令到环境变量中
cd src
cp redis-sentinel redis-cli redis-server /usr/bin/
#overcommit_memory设置为1
echo "vm.overcommit_memory = 1" >>/etc/sysctl.conf 
sysctl -p   #生效

拷贝master 证书 到 slave

# slave先创建目录
mkdir -p /etc/redis/{conf,ssl,logs,pid,data}
# 拷贝证书到slave
scp -r /etc/redis/ssl/* root@192.168.50.236:/etc/redis/ssl

编写配置文件

/etc/redis/conf/redis.conf

##########################################基础参数配置############################################
bind 0.0.0.0
protected-mode no
#端口0代表完全禁用非TLS端口
port 0
tls-port 6379
tcp-backlog 511
unixsocket /tmp/redis.sock
unixsocketperm 700
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /etc/redis/pid/redis.pid
loglevel notice
logfile /etc/redis/logs/redis.log
databases 16
always-show-logo yes
################################# 持久化配置 #################################
#RDB 快照持久化
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /etc/redis/data
#AOF 持久化
appendonly no
appendfilename appendonly.aof
appendfsync everysec
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
aof-rewrite-incremental-fsync yes
################################# 主从配置 #################################
replicaof 192.168.50.235 6379
masterauth 123456
replica-serve-stale-data no
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
repl-backlog-size 10mb
repl-backlog-ttl 3600
################################## 安全认证 ###################################
requirepass 123456
rename-command CONFIG b840fc02d524045429941cc43f59e41cb7be6c52
################################## TLS 配置 ###################################
tls-cert-file /etc/redis/ssl/redis.crt
tls-key-file /etc/redis/ssl/redis.key
tls-ca-cert-file /etc/redis/ssl/ca.crt
tls-dh-params-file /etc/redis/ssl/redis.dh
tls-auth-clients yes
tls-replication yes
#指定tls-replication yes才能将TLS用于到主服务器的对外连接,sentinel也需要同步设置。
#tls-cluster yes
################################## 连接配置 ##################################
maxclients 10000
############################# 懒惰的释放 ####################################
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
################################ LUA时间限制 ###############################
lua-time-limit 5000
############################### 慢日志  ################################
slowlog-log-slower-than 10000
slowlog-max-len 128
#rejson.so
#loadmodule /usr/local/redis-6.2.0/module/rejson.soo
######################### 高级设置 #########################
activerehashing yes
#缓存空间限制
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 1024mb 256mb 300
client-output-buffer-limit pubsub 32mb 8mb 60
client-query-buffer-limit 1gb
#加快写入rdb 和aof
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
######################### 多线程设置 #########################
## 设置线程数,不超过CPU可用总核数
#io-threads 4
## 设置yes 开启多线程
#io-threads-do-reads yes

systemd管理

/etc/systemd/system/redis.service

[Unit]
Description=redis
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/bin/redis-server /etc/redis/conf/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
# 这个根据配置填写
ExecStop=/usr/bin/redis-cli -p 6379 -a 123456 shutdown
PrivateTmp=true

[Install]
WantedBy=multi-user.target

#启动并自启
systemctl daemon-reload
systemctl start redis.service 
systemctl enable redis.service 
Created symlink /etc/systemd/system/multi-user.target.wants/redis.service → /usr/lib/systemd/system/redis.service.

验证主从服务

  1. 日志查看
    在这里插入图片描述

  2. 连接redis执行 info replication
    在这里插入图片描述

  3. 连接redis进行 数据同步测试

    master
    在这里插入图片描述

    slave
    在这里插入图片描述

sentinel 哨兵服务

测试环境,就不强求部署多台 sentinel 服务,这里就部署到 redis master 服务器上展示如何启用 TLS 连接即可。

创建目录、配置文件

mkdir -p /etc/redis/sentinel

/etc/redis/conf/sentinel.conf

################################sentinel.conf########################################
# 端口
port 0
tls-port 26379

# 是否后台启动
daemonize yes

# pid文件路径
pidfile "/etc/redis/pid/sentinel.pid"

# 日志文件路径
logfile "/etc/redis/logs/sentinel.log"

# 定义工作目录
dir "/etc/redis/sentinel"

# tls 设置
tls-cert-file /etc/redis/ssl/redis.crt
tls-key-file /etc/redis/ssl/redis.key
tls-ca-cert-file /etc/redis/ssl/ca.crt
tls-dh-params-file /etc/redis/ssl/redis.dh
tls-replication yes

# 定义Redis主的别名, IP, 端口,这里的1指的是需要至少1个Sentinel认为主Redis挂了才最终会采取下一步行为
sentinel monitor mymaster 192.168.50.235 6379 1

#若主服务设置了密码需要加上注意顺序必须在sentinel monitor下面
sentinel auth-pass mymaster 123456

# 如果mymaster 30秒内没有响应,则认为其主观失效
sentinel down-after-milliseconds mymaster 30000
# 在故障转移时,最多有多少从节点对新的主节点进行同步
sentinel parallel-syncs mymaster 1
# 该参数指定一个时间段,在该时间段内没有实现故障转移成功,则会再一次发起故障转移的操作,单位毫秒
sentinel failover-timeout mymaster 180000

systemd管理

/etc/systemd/system/sentinel.service

[Unit]
Description=sentinel
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/bin/redis-sentinel /etc/redis/conf/sentinel.conf
ExecReload=/bin/kill -s HUP $MAINPID
# 这个根据配置填写
ExecStop=/usr/bin/redis-cli -p 26379 shutdown
PrivateTmp=true

[Install]
WantedBy=multi-user.target

#启动并自启
systemctl daemon-reload
systemctl start redis.service 
systemctl enable redis.service

查看sentinel 状态

主从故障切换这里就不展开演示了

  1. 查看sentinel启动日志
    在这里插入图片描述

  2. 连接sentinel查看状态

    因为我们配置了 TLS 加密,导致我们直接使用 redis-cli -p 26379 是不能连接上sentienl服务的,我们得加上证书路径才行。

    redis-cli --tls --cert /etc/redis/ssl/redis.crt --key /etc/redis/ssl/redis.key --cacert /etc/redis/ssl/ca.crt  -p 26379
    

    在这里插入图片描述

redis cluster 分片集群TLS

我这边部署 cluster 分片集群,并没有找至少六台机器,就用了一台虚拟机,其实操作是一样的,实际使用按照实际情况来。

安装

# 安装依赖软件
sudo apt update
sudo apt install make gcc libssl-dev pkg-config

# 下载redis 解压
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
tar -xvf redis-6.2.6.tar.gz

# 编译
cd redis-6.2.6
make BUILD_TLS=yes
# 如果执行编译出错,提示 zmalloc.h:50:10: fatal error: jemalloc/jemalloc.h: No such file or directory 执行 MALLOC=libc
make BUILD_TLS=yes MALLOC=libc
make install 
#拷贝命令到环境变量中
cd src
cp redis-sentinel redis-cli redis-server /usr/bin/
#overcommit_memory设置为1
echo "vm.overcommit_memory = 1" >>/etc/sysctl.conf 
sysctl -p   #生效

规划目录及证书

# 创建目录
mkdir -p /etc/redis/{conf,ssl,logs,pid,data}
# 创建集群存储目录(看情况实现)
for i in $(seq 1 6); do mkdir -p /etc/redis/data/698$i; done
# 创建证书
./utils/gen-test-certs.sh
# 拷贝证书都指定位置
cp tests/tls/redis.* /etc/redis/ssl/
cp tests/tls/ca.crt /etc/redis/ssl/

编写配置文件

这里就贴出其中一个的配置文件,其余配置文件大同小异,修改端口、文件名称、存放目录等即可

/etc/redis/conf/redis_6981.conf

##########################################基础参数配置############################################
bind 0.0.0.0
protected-mode no
#端口0代表完全禁用非TLS端口
port 0
# 单机集群端口不能一致
tls-port 6981
tcp-backlog 511
unixsocket /tmp/redis.sock
unixsocketperm 700
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /etc/redis/pid/redis_6981.pid
loglevel notice
logfile /etc/redis/logs/redis_6981.log
databases 16
always-show-logo yes
################################# 持久化配置 #################################
#RDB 快照持久化
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
# 设置对应的存储位置
dir /etc/redis/data/6981
#AOF 持久化
appendonly no
appendfilename appendonly.aof
appendfsync everysec
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
aof-rewrite-incremental-fsync yes
################################# cluser配置 #################################
masterauth 123456
cluster-enabled yes
cluster-config-file nodes_6981.conf
cluster-node-timeout 15000 
################################## 安全认证 ###################################
requirepass 123456
rename-command CONFIG b840fc02d524045429941cc43f59e41cb7be6c52
################################## TLS 配置 ###################################
tls-cert-file /etc/redis/ssl/redis.crt
tls-key-file /etc/redis/ssl/redis.key
tls-ca-cert-file /etc/redis/ssl/ca.crt
tls-dh-params-file /etc/redis/ssl/redis.dh
tls-auth-clients yes
tls-replication yes
#指定tls-replication yes才能将TLS用于到主服务器的对外连接,sentinel也需要同步设置。
tls-cluster yes
################################## 连接配置 ##################################
maxclients 10000
############################# 懒惰的释放 ####################################
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
################################ LUA时间限制 ###############################
lua-time-limit 5000
############################### 慢日志  ################################
slowlog-log-slower-than 10000
slowlog-max-len 128
######################### 高级设置 #########################
activerehashing yes
#缓存空间限制
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 1024mb 256mb 300
client-output-buffer-limit pubsub 32mb 8mb 60
client-query-buffer-limit 1gb
#加快写入rdb 和aof
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
######################### 多线程设置 #########################
## 设置线程数,不超过CPU可用总核数
#io-threads 4
## 设置yes 开启多线程
#io-threads-do-reads yes

后续配置文件操作

# 复制配置文件
for i in $(seq 2 6); do cp /etc/redis/conf/redis_6981.conf /etc/redis/conf/redis_698$i.conf; done
# 修改配置文件
for i in $(seq 2 6); do sed  -i "s/6981/698$i/g"  redis_698$i.conf;done

启动查看

这里单机就不创建systemd管理了,如果有需要,可以参照上面的配置,修改端口号即可

# 启动服务
for i in $(seq 1 6); do redis-server /etc/redis/conf/redis_698$i.conf;done

在这里插入图片描述

创建cluster 集群

因为我们配置文件里面有设置 requirepass 密码验证,所有在创建时需要加上 -a 输入密码

redis-cli --tls --cert /etc/redis/ssl/redis.crt \
--key /etc/redis/ssl/redis.key \
--cacert /etc/redis/ssl/ca.crt -a 123456 \
--cluster create --cluster-replicas 1 \
192.168.50.235:6981 192.168.50.235:6982 192.168.50.235:6983 \
192.168.50.235:6984 192.168.50.235:6985 192.168.50.235:6986

在这里插入图片描述

验证cluster 集群

# 登录
redis-cli --tls --cert /etc/redis/ssl/redis.crt --key /etc/redis/ssl/redis.key --cacert /etc/redis/ssl/ca.crt -c -p 6981
# 查看集群信息
cluster info
# 列出集群所有节点
cluster nodes

在这里插入图片描述

其余cluster集群操作命令可以查阅https://blog.csdn.net/echizao1839/article/details/98509011

后记
我们整个部署流程下来发现 使用TLS后,redis-cli 操作变的很复杂,容易忘记怎么使用参数的话,可以在 ~/.bashrc 自做个别名

vim ~/.bashrc
# 设置别名
alias redis-cli='redis-cli --tls --cert /etc/redis/ssl/redis.crt --key /etc/redis/ssl/redis.key --cacert /etc/redis/ssl/ca.crt'

# 保存退出,并加载
source ~/.bashrc

小小的测试一下

# 写入Key
root@local-1:/etc/redis/conf# redis-cli -c -p 6981 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6981> set name aa
-> Redirected to slot [5798] located at 192.168.50.235:6982
OK
192.168.50.235:6982> get name
"aa"
192.168.50.235:6982> 

# 第二个终端读取
root@local-1:~# redis-cli -c -p 6982
127.0.0.1:6982> AUTH 123456
OK
127.0.0.1:6982> get name
"aa"
127.0.0.1:6982>

我们不难发现,我们这次没有在加一长串的 Tls 参数,写入key 后,它也自动跳转到 6982 这个redis 上了,因为刚才在6981上写入的数据是存储在6982redis上面的。

不过我没搞明白这玩意咋跳过去了啊,以往不是告诉你该Key存储在xxx redis的 xxx号槽内吗?
有点懵逼,算了,持续了解吧,今天就到此结束了。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ubuntu 20.04 Redis 6.2三主三从集群是一种分布式架构的Redis数据存储方案。在这种架构中,有三个主节点和三个从节点组成一个集群,实现了高可用性和负载均衡。 在Ubuntu 20.04上搭建Redis 6.2三主三从集群可以按照以下步骤进行: 1. 首先,确保在每个节点上安装了Redis 6.2,并将其配置为允许远程访问。 2. 在主节点上编辑Redis配置文件,设置节点的端口号、IP地址、密码等信息。将从节点配置为复制主节点。 3. 在每个节点的命令行终端上启动Redis服务。 4. 在每个从节点上执行`slaveof 主节点IP地址 主节点端口号`命令,将从节点连接到主节点。 5. 在主节点上执行`CLUSTER MEET 从节点IP地址 从节点端口号`命令,将从节点添加到主节点的集群中。 6. 执行`CLUSTER REPLICATE 主节点ID`命令,将从节点设置为主节点的从节点。 7. 重复步骤4-6,将剩余的主节点和从节点都添加到集群中,确保集群的完整性。 8. 执行`CLUSTER INFO`命令,查看集群的状态和节点信息。 通过以上步骤,就可以在Ubuntu 20.04上搭建Redis 6.2三主三从集群。这种集群架构能够提供高可用性和负载均衡,当主节点出现故障时,从节点可以自动接替主节点的功能,保证系统的可用性。同时,通过将数据进行分布存储,集群能够提供更高的读写性能。 值得注意的是,在集群中添加或删除节点时,需要进行相应的配置更改和数据迁移,以确保集群的稳定和一致性。因此,在进行任何更改之前,务必备份重要的数据,并了解Redis集群的运维和管理知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值