Centos8搭建redis6.0.9集群并使用prometheus监控
- Centos8搭建redis6.0.9集群
- 引言
- redis
- redis是什么
- redis的优势
- Redis的应用场景
- redis6的新特性
- Centos8搭建redis6.0.9集群
- 环境
- 搭建redis6.0.9集群
- 创建目录
- 下载redis6.0.9
- 解压
- 编译安装
- 创建用于存放集群节点的目录
- 复制/usr/local/redis/bin所有文件到/usr/local/redis6-cluster/redis7000目录下
- 拷贝解压后文件夹下面的redis.conf至/usr/local/redis6-cluster/redis7000文件夹下
- 修改/usr/local/redis6-cluster/redis7000文件夹下redis.conf配置文件
- 在redis6-cluster目录下复制redis7000文件夹5份并修改配置文件为对应端口
- 启动redis节点
- 创建集群
- 测试集群:连接集群中的节点(任意一个都可以)
- 查看集群中节点信息
- 查看当前集群信息
- 测试集群故障转移
- redis集群节点加入systemctl管理并设为开机自启动
- 使用prometheus监控
Centos8搭建redis6.0.9集群
引言
作为一名开发人员,数据库我们都不陌生,因为我们的数据都是使用数据库来进行存储的,但是由于一般情况下不会出现高并发的情况,所以看起来并没有什么问题,可是一旦涉及到大数据量的需求,比如秒杀等场景或者是访问量瞬间较大的时候,单一的使用数据库保存数据的系统会因为磁盘读/写速度比较慢而存在严重的性能弊端,瞬间成千上万的请求到来,需要系统在极短的时间内完成成千上万次的读/写操作,这个时候往往不是数据库能够承受的,很容易造成数据库系统瘫痪,最终导致服务宕机的严重问题。
为了解决这样的问题,我们通常会引入NoSQL,这是一种基于内存的数据库,并且提供一定的持久化功能。
redis
redis是什么
Redis 是一个使用ANSI C编写的、完全开源的、遵守 BSD 协议、包含多种数据结构、支持网络、基于内存、可选持久性的、高性能的 key-value 数据库。是现在最受欢迎的NoSQL数据库之一,上面说的高并发导致宕机的问题,我们一般都会引入Redis来解决。
redis的优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings、Lists、Hashes、Sets 、 Ordered Sets 及Streams数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe、通知、 key 过期等等特性。
Redis的应用场景
Redis 的应用场景包括但不限于:缓存系统(“热点”数据:高频读、低频写)、计数器、消息队列系统、排行榜、社交网络和实时系统等。还有官网列出的这些,如图:
上面这些我们都可以在实际的开发中使用,拿我自身的开发经历来说吧,比如开发短链系统的时候,我用到了上面的
- Redis as an LRU cache(Redis实现LRU=Least Recent Used算法)
- Redis Lua scripting(Nginx支持OpenResty------OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。我们可以编写LUA脚本来保证高性能
- Distributed locks 分布式锁
- Expires 过期
- Memory optimization 内存优化
redis6的新特性
- 多线程IO。Redis 6引入多线程IO,但多线程部分只是用来处理网络数据的读写和协议解析,执行命令仍然是单线程。之所以这么设计是不想因为多线程而变得复杂,需要去控制 key、lua、事务、LPUSH/LPOP 等等的并发问题。
- 重新设计了客户端缓存功能。实现了Client-side-caching(客户端缓存)功能。放弃了caching slot,而只使用key names。
- 支持RESP3协议。RESP(Redis Serialization Protocol)是 Redis 服务端与客户端之间通信的协议。Redis 5 使用的是 RESP2,而 Redis 6 开始在兼容 RESP2 的基础上,开始支持 RESP3。推出RESP3的目的:一是因为希望能为客户端提供更多的语义化响应,以开发使用旧协议难以实现的功能;另一个原因是实现 Client-side-caching(客户端缓存)功能。
- 支持SSL。连接支持SSL,更加安全。
- ACL权限控制。支持对客户端的权限控制,实现对不同的key授予不同的操作权限。有一个新的ACL日志命令,允许查看所有违反ACL的客户机、访问不应该访问的命令、访问不应该访问的密钥或者验证尝试失败。这对于调试ACL问题非常有用。
- 提升了RDB日志加载速度。根据文件的实际组成(较大或较小的值),可以预期20/30%的改进。当有很多客户机连接时,信息也更快了,这是一个老问题,现在终于解决了。
- 发布官方的Redis集群代理模块 Redis Cluster proxy。在 Redis 集群中,客户端会非常分散,现在为此引入了一个集群代理,可以为客户端抽象 Redis 群集,使其像正在与单个实例进行对话一样。同时在简单且客户端仅使用简单命令和功能时执行多路复用。
- 提供了众多的新模块(modules)API
Centos8搭建redis6.0.9集群
环境
由于资源有限,我们的redis集群就搭建在同一台虚拟机里面,安装6个redis(三主三从),用不同的端口来区分。
IP:192.168.0.22
# 三主端口分别是:
7000、7001和7002
# 三从端口分别是:
7003、7004和7005
为什么需要三主三从6个节点呢?
- Redis集群 至少 需要 3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了,那么该节点才是挂了,所以2个节点无法构成集群。
- 要保证集群的高可用,需要 每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。但是由于我资源有限启动不了那么多虚拟机,所以在这里搭建的是伪分布式集群,即一台虚拟机虚拟运行 6个redis实例,修改端口号为(7000-7005)。当然了,实际生产环境的Redis集群搭建和这里是一样的。
我们给集群应该有几个节点做一个假设:
2个节点,一个宕掉,剩下的1个不超过1半(1),集群停止工作
3个节点,一个宕掉,剩下的两个超过1半(1.5),集群 继续工作
4个节点,一个宕掉,剩下的3个超过1半(2个),集群 继续工作
4个节点,两个宕掉,剩下的2个不超过1半(2个),集群停止工作
所以要保证集群继续工作,不管是3个节点还是4个节点都是只允许一个节点宕掉,由此可见3个节点是最实际的选择。
综上所述,所以redis主从集群最少需要6个节点:master节点至少要3个,slave节点也是3个。
另外redis官网也建议集群三主三从。
搭建redis6.0.9集群
创建目录
[root@dxm22 ~]# mkdir -p /data/redis6
[root@dxm22 ~]# cd /data/redis6/
下载redis6.0.9
# redis官网
[root@dxm22 redis6]# wget https://download.redis.io/releases/redis-6.0.9.tar.gz
# 如果redis官网下载太慢,可以使用华为镜像网站下载,先放着,有需要的同学自取
[root@dxm22 redis6]# wget https://mirrors.huaweicloud.com/redis/redis-6.0.9.tar.gz
[root@dxm22 redis6]# ll -h
总用量 2.2M
-rw-r--r-- 1 root root 2.2M 10月 27 15:14 redis-6.0.9.tar.gz
解压
[root@dxm22 redis6]# tar -zxvf redis-6.0.9.tar.gz
编译安装
进入解压后的目录进行编译安装。
[root@dxm22 redis6]# cd redis-6.0.9/
# PREFIX的值:/usr/local/redis这个是安装目录,可以改成自己想要的安装目录。
[root@dxm22 redis-6.0.9]# make PREFIX=/usr/local/redis install
编译安装完成之后可以看到我们的安装目录(/usr/local/redis)下就有了bin这个目录。
创建用于存放集群节点的目录
# 创建目录:redis6-cluster
[root@dxm22 redis-6.0.9]# mkdir -p /usr/local/redis6-cluster
# 查看/usr/local目录
[root@dxm22 redis-6.0.9]# ll /usr/local
复制/usr/local/redis/bin所有文件到/usr/local/redis6-cluster/redis7000目录下
# 切换目录到/usr/local/
[root@dxm22 redis-6.0.9]# cd /usr/local/
[root@dxm22 local]#
# 切换完成之后复制
[root@dxm22 local]# cp -r redis/bin/ redis6-cluster/redis7000
[root@dxm22 local]# cd redis6-cluster/
[root@dxm22 redis6-cluster]# ll redis7000
注意:这里redis6-cluster下面redis7000目录不需要手动创建,执行命令之后会 自动创建 的,后面的5个也是如此。
拷贝解压后文件夹下面的redis.conf至/usr/local/redis6-cluster/redis7000文件夹下
[root@dxm22 local]# cp /data/redis6/redis-6.0.9/redis.conf /usr/local/redis6-cluster/redis7000/
修改/usr/local/redis6-cluster/redis7000文件夹下redis.conf配置文件
主要修改以下几个地方:1、端口号修改为7000;2、开启集群创建模式,打开注释即可。cluster-enabled yes 表示启用cluster;3、修改bind地址为0.0.0.0;4、修改redis最大占用内存maxmemory为512mb;
[root@dxm22 local]# vim redis6-cluster/redis7000/redis.conf
在redis6-cluster目录下复制redis7000文件夹5份并修改配置文件为对应端口
复制的5份文件夹的名称分别是redis7001、redis7002、redis7003、redis7004、redis7005
# 切换目录到redis6-cluster
[root@dxm22 local]# cd redis6-cluster/
# 复制为redis7001
[root@dxm22 redis6-cluster]# cp -r redis7000/ redis7001
[root@dxm22 redis6-cluster]# ll redis7001/
总用量 45940
-rwxr-xr-x 1 root root 6384048 12月 10 20:21 redis-benchmark
-rwxr-xr-x 1 root root 11290840 12月 10 20:21 redis-check-aof
-rwxr-xr-x 1 root root 11290840 12月 10 20:21 redis-check-rdb
-rwxr-xr-x 1 root root 6690128 12月 10 20:21 redis-cli
-rw-r--r-- 1 root root 84839 12月 10 20:21 redis.conf
lrwxrwxrwx 1 root root 12 12月 10 20:21 redis-sentinel -> redis-server
-rwxr-xr-x 1 root root 11290840 12月 10 20:21 redis-server
# 修改文件夹redis7001下redis.conf端口号为7001
[root@dxm22 redis6-cluster]# cd redis7001/
[root@dxm22 redis7001]# vim redis.conf
# 复制为redis7002
[root@dxm22 redis6-cluster]# cp -r redis7000/ redis7002
[root@dxm22 redis6-cluster]# cd redis7002
[root@dxm22 redis7002]# ll
总用量 45940
-rwxr-xr-x 1 root root 6384048 12月 10 20:23 redis-benchmark
-rwxr-xr-x 1 root root 11290840 12月 10 20:23 redis-check-aof
-rwxr-xr-x 1 root root 11290840 12月 10 20:23 redis-check-rdb
-rwxr-xr-x 1 root root 6690128 12月 10 20:23 redis-cli
-rw-r--r-- 1 root root 84839 12月 10 20:23 redis.conf
lrwxrwxrwx 1 root root 12 12月 10 20:23 redis-sentinel -> redis-server
-rwxr-xr-x 1 root root 11290840 12月 10 20:23 redis-server
# 修改文件夹redis7002下redis.conf端口号为7002
[root@dxm22 redis7002]# vim redis.conf
# 复制为redis7003
[root@dxm22 redis6-cluster]# cp -r redis7000/ redis7003
[root@dxm22 redis6-cluster]# cd redis7003
[root@dxm22 redis7003]# ll
总用量 45940
-rwxr-xr-x 1 root root 6384048 12月 10 20:26 redis-benchmark
-rwxr-xr-x 1 root root 11290840 12月 10 20:26 redis-check-aof
-rwxr-xr-x 1 root root 11290840 12月 10 20:26 redis-check-rdb
-rwxr-xr-x 1 root root 6690128 12月 10 20:26 redis-cli
-rw-r--r-- 1 root root 84839 12月 10 20:26 redis.conf
lrwxrwxrwx 1 root root 12 12月 10 20:26 redis-sentinel -> redis-server
-rwxr-xr-x 1 root root 11290840 12月 10 20:26 redis-server
# 修改文件夹redis7003下redis.conf端口号为7003
[root@dxm22 redis7003]# vim redis.conf
# 复制为redis7004
[root@dxm22 redis6-cluster]# cp -r redis7000/ redis7004
[root@dxm22 redis6-cluster]# cd redis7004
[root@dxm22 redis7004]# ll
总用量 45940
-rwxr-xr-x 1 root root 6384048 12月 10 20:27 redis-benchmark
-rwxr-xr-x 1 root root 11290840 12月 10 20:27 redis-check-aof
-rwxr-xr-x 1 root root 11290840 12月 10 20:27 redis-check-rdb
-rwxr-xr-x 1 root root 6690128 12月 10 20:27 redis-cli
-rw-r--r-- 1 root root 84839 12月 10 20:27 redis.conf
lrwxrwxrwx 1 root root 12 12月 10 20:27 redis-sentinel -> redis-server
-rwxr-xr-x 1 root root 11290840 12月 10 20:27 redis-server
# 修改文件夹redis7004下redis.conf端口号为7004
[root@dxm22 redis7004]# vim redis.conf
# 复制为redis7005
[root@dxm22 redis6-cluster]# cp -r redis7000/ redis7005
[root@dxm22 redis6-cluster]# cd redis7005
[root@dxm22 redis7005]# ll
总用量 45940
-rwxr-xr-x 1 root root 6384048 12月 10 20:29 redis-benchmark
-rwxr-xr-x 1 root root 11290840 12月 10 20:29 redis-check-aof
-rwxr-xr-x 1 root root 11290840 12月 10 20:29 redis-check-rdb
-rwxr-xr-x 1 root root 6690128 12月 10 20:29 redis-cli
-rw-r--r-- 1 root root 84839 12月 10 20:29 redis.conf
lrwxrwxrwx 1 root root 12 12月 10 20:29 redis-sentinel -> redis-server
-rwxr-xr-x 1 root root 11290840 12月 10 20:29 redis-server
# 修改文件夹redis7005下redis.conf端口号为7005
[root@dxm22 redis7005]# vim redis.conf
启动redis节点
6个节点挨个启动有点繁琐,这里我们使用脚本文件批量启动。
[root@dxm22 redis6-cluster]# vim start-all-redis.sh
内容如下:
cd redis7000
./redis-server redis.conf &
cd ..
cd redis7001
./redis-server redis.conf &
cd ..
cd redis7002
./redis-server redis.conf &
cd ..
cd redis7003
./redis-server redis.conf &
cd ..
cd redis7004
./redis-server redis.conf &
cd ..
cd redis7005
./redis-server redis.conf &
cd ..
从截图看到还缺少可执行权限,我们加上:
[root@dxm22 redis6-cluster]# chmod +x start-all-redis.sh
执行脚本,批量启动6个节点:
[root@dxm22 redis6-cluster]# ./start-all-redis.sh
Running in cluster mode 说明是集群模式。
创建集群
从redis官网看到要创建集群要使用redis-cli,因为我们这里是redis版本是6.0.9。
[root@dxm22 redis6-cluster]# cd redis7000
[root@dxm22 redis7000]# ./redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 \
> 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
> --cluster-replicas 1
# 此处使用的命令是create,因为我们要创建一个新集群。该选项--cluster-replicas 1意味着我们希望为每个创建的主机都提供一个从机。其他参数是我要用于创建新集群的实例的地址列表。
注意: 这里的IP和端口要换成自己的IP和端口。
[OK] All 16384 slots covered.说明16384个槽位全部分配完毕。
至此redis6集群搭建完成。从图中可以看到每个节点所分配的slots(哈希槽),这里总共6个节点,其中3个是从节点,所以3个主节点分别映射了0-5460、5461-10922、10933-16383solts。
测试集群:连接集群中的节点(任意一个都可以)
[root@dxm22 redis7000]# ./redis-cli -c -p 7001
127.0.0.1:7001> set a 1
这里选择的是redis7000的文件夹,为什么-p后面使用的是7001的端口呢?就是为了让大家明白,任意一个都可以,一样的。
从这两张图可以看出集群中的节点是自动跳转的,这就要归功于命令中的-c选项了,如果不加-c选项节点之间是无法自动跳转的,也可以看出数据的存储是均匀分配到不同节点的。
查看集群中节点信息
127.0.0.1:7000> cluster nodes
查看当前集群信息
127.0.0.1:7000> cluster info
测试集群故障转移
查看主节点
[root@dxm22 redis7000]# ./redis-cli -p 7000 cluster nodes | grep master
所以7000、7001和7002是主节点。让我们使用DEBUG SEGFAULT命令使节点7001崩溃 :
[root@dxm22 redis7000]# ./redis-cli -p 7001 debug segfault
再次查看主节点信息
[root@dxm22 redis7000]# ./redis-cli -p 7000 cluster nodes | grep master
可以看到7001端口已经崩溃,7004从slave变成了master节点。
重新启动7001节点,再查看节点信息
[root@dxm22 redis7000]# cd ../redis7001
[root@dxm22 redis7001]# ./redis-server ./redis.conf &
可以看到7001节点作为从节点重新加入了集群。
redis集群节点加入systemctl管理并设为开机自启动
编写批量启动redis的shell脚本
我们把上面那个批量启动redis的脚本做一下改动,内容如下:
[root@dxm22 redis6-cluster]# cat start-all-redis.sh
cd /usr/local/redis6-cluster/redis7000
./redis-server redis.conf &
cd /usr/local/redis6-cluster/redis7001
./redis-server redis.conf &
cd /usr/local/redis6-cluster/redis7002
./redis-server redis.conf &
cd /usr/local/redis6-cluster/redis7003
./redis-server redis.conf &
cd /usr/local/redis6-cluster/redis7004
./redis-server redis.conf &
cd /usr/local/redis6-cluster/redis7005
./redis-server redis.conf &
编写批量停止redis的shell脚本
[root@dxm22 redis6-cluster]# vim stop-all-redis.sh
[root@dxm22 redis6-cluster]# cat stop-all-redis.sh
ps aux|grep redis|awk {print $2}|xargs kill -15
创建redis-cluster.service服务文件
[root@dxm22 redis6-cluster]# vim /etc/systemd/system/redis-cluster.service
内容如下:
[Unit]
Description=Redis6Cluster
After=network.target
[Service]
Type=forking
ExecStart=sh /usr/local/redis6-cluster/start-all-redis.sh
ExecStop=sh /usr/local/redis6-cluster/stop-all-redis.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# 重新加载服务列表
[root@dxm22 redis6-cluster]# systemctl daemon-reload
# 先停止掉前面启动的redis进程
[root@dxm22 redis6-cluster]# systemctl stop redis-cluster.service
[root@dxm22 redis6-cluster]# ps aux | grep redis
root 57800 0.0 0.0 12320 1060 pts/0 S+ 23:06 0:00 grep --color=auto redis
# 查看开机服务列表是否有redis服务
[root@dxm22 redis7001]# systemctl list-unit-files | grep redis
redis-cluster.service disabled
# 存在,且非开启自启动,接着使用systemctl启动redis集群服务
[root@dxm22 redis6-cluster]# systemctl start redis-cluster.service
# 查看服务状态
[root@dxm22 redis6-cluster]# systemctl status redis-cluster.service
Active: active (running)说明服务是启动状态,再来看看进程。
测试集群
可以看到集群没问题。
设置为开机自启动
[root@dxm22 redis7000]# systemctl enable redis-cluster.service
Created symlink /etc/systemd/system/multi-user.target.wants/redis-cluster.service → /etc/systemd/system/redis-cluster.service.
[root@dxm22 redis7000]# systemctl list-unit-files | grep redis
redis-cluster.service enabled
使用prometheus监控
Prometheus监控Redis cluster和监控MySQL是一样的,都是使用 exporter。
安装使用redis_exporter-v1.14.0
创建目录
[root@dxm22 redis6-cluster]# mkdir -p /data/redis_exporter
下载
[root@dxm22 redis6-cluster]# cd /data/redis_exporter/
[root@dxm22 redis_exporter]# wget https://github.com/oliver006/redis_exporter/releases/download/v1.14.0/redis_exporter-v1.14.0.linux-amd64.tar.gz
解压
[root@dxm22 redis_exporter]# tar -zxvf redis_exporter-v1.14.0.linux-amd64.tar.gz
拷贝二进制文件至/usr/local/bin目录下
[root@dxm22 redis_exporter]# cd redis_exporter-v1.14.0.linux-amd64/
[root@dxm22 redis_exporter-v1.14.0.linux-amd64]# ll
总用量 8512
-rw-r--r-- 1 root root 1063 12月 10 09:09 LICENSE
-rw-r--r-- 1 root root 15864 12月 10 09:09 README.md
-rwxr-xr-x 1 root root 8695808 12月 10 09:08 redis_exporter
[root@dxm22 redis_exporter-v1.14.0.linux-amd64]# cp redis_exporter /usr/local/bin/
[root@dxm22 redis_exporter-v1.14.0.linux-amd64]# ll /usr/local/bin/ | grep redis_exporter
-rwxr-xr-x 1 root root 8695808 12月 11 00:02 redis_exporter
启动
[root@dxm22 redis_exporter-v1.14.0.linux-amd64]# nohup /usr/local/bin/redis_exporter -redis.addr=192.168.0.22:7001 –debug &
[1] 58694
[root@dxm22 redis_exporter-v1.14.0.linux-amd64]# nohup: 忽略输入并把输出追加到'nohup.out'
这里输入集群中任意一个节点的端口就可以,然后查看进程
[root@dxm22 redis_exporter-v1.14.0.linux-amd64]# ps aux | grep redis_exporter
浏览器输入IP+9121访问。我这里是http://192.168.0.22:9121/。
加入systemctl管理并设为开机自启动
创建redis-exporter.service服务文件
[root@dxm22 redis_exporter]# vim /etc/systemd/system/redis_exporter.service
内容如下:
[Unit]
Description=redis_exporter
After=network.target
[Service]
Type=simple
ExecStart=nohup /usr/local/bin/redis_exporter -redis.addr=192.168.0.22:7001 –debug &
PrivateTmp=true
RestartSec=5
StartLimitInterval=0
Restart=always
[Install]
WantedBy=multi-user.target
# 重新加载服务列表
[root@dxm22 redis_exporter]# systemctl daemon-reload
# 先停止掉前面启动的redis_exporter进程
[root@dxm22 redis_exporter]# ps aux | grep redis_exporter
root 58694 0.2 1.1 713444 21008 pts/0 Sl 00:05 0:11 /usr/local/bin/redis_exporter -redis.addr=192.168.0.22:7001 –debug
root 93164 0.0 0.0 12320 976 pts/0 S+ 01:14 0:00 grep --color=auto redis_exporter
[root@dxm22 redis_exporter]# kill -9 58694
[root@dxm22 redis_exporter]# ps aux | grep redis_exporter
root 93174 0.0 0.0 12320 996 pts/0 S+ 01:15 0:00 grep --color=auto redis_exporter
# 查看开机服务列表是否有redis_exporter服务
[root@dxm22 redis_exporter]# systemctl list-unit-files | grep redis_exporter
redis_exporter.service disabled
# 存在,且非开启自启动,接着使用systemctl启动redis_exporter服务
[root@dxm22 redis_exporter]# systemctl start redis_exporter
# 查看服务状态
[root@dxm22 redis_exporter]# systemctl status redis_exporter
Active: active (running)说明服务是启动状态,再来看看进程。
设置为开机自启动
[root@dxm22 redis_exporter]# systemctl enable redis_exporter.service
Created symlink /etc/systemd/system/multi-user.target.wants/redis_exporter.service → /etc/systemd/system/redis_exporter.service.
[root@dxm22 redis_exporter]# systemctl list-unit-files | grep redis_exporter
redis_exporter.service enabled
修改prometheus.yml
[root@dxm22 redis6-cluster]# vim /etc/prometheus/prometheus.yml
增加如下内容:
- job_name: 'redis_exporter_targets'
static_configs:
- targets:
- redis://192.168.0.22:7000 #这里的IP和端口要换成自己的。
- redis://192.168.0.22:7001
- redis://192.168.0.22:7002
- redis://192.168.0.22:7003
- redis://192.168.0.22:7004
- redis://192.168.0.22:7005
params:
check-keys: ["metrics:*"]
metrics_path: /scrape
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.0.22:9121 #部署节点ip
## config for scraping the exporter itself
- job_name: 'redis_exporter'
static_configs:
- targets: ['192.168.0.22:9121'] #部署节点ip
重启prometheus
[root@dxm22 redis_exporter-v1.14.0.linux-amd64]# systemctl restart prometheus.service
再次访问http://192.168.0.22:9090/targets。
Grafana导入redis
选择prometheus,点击import按钮。
批量插入数据测试
写shell脚本,批量set数据到redis
内容如下:
[root@dxm22 ~]# cat /usr/local/redis6-cluster/redis7000/for.sh
#!/bin/bash
for((i=1;i<=10000000;i++));
do
echo "set a${i} ${i}" >> ./batch_insert.txt;
echo "get a${i}" >> ./batch_insert.txt;
done
# 执行shell脚本
[root@dxm22 ~]# sh /usr/local/redis6-cluster/redis7000/for.sh
# 批量写入数据
[root@dxm22 redis7000]# cat batch_insert.txt | ./redis-cli -h 127.0.0.1 -c -p 7002
验证测试结果
再来看看grafana监控:
此时redis性能使用率已经在上升。
至此关于Centos8搭建redis6.0.9集群并使用prometheus监控完成。