List
代码语言:javascript复制 CentOS7.3
prometheus-2.2.1.linux-amd64.tar.gz
redis_exporter-v0.30.0.linux-amd64.tar.gz
节点名 | IP | 软件版本 | 硬件 | 网络 | 说明 |
---|---|---|---|---|---|
Prometheus | 192.168.43.144 | list 里面都有 | 2C4G | Nat,内网 | 测试环境 |
Redis | 192.168.43.134 | list 里面都有 | 2C4G | Nat,内网 | 测试环境 |
部署Prometheus
部署Promehteus请看我前面写的文章
https://www.cnblogs.com/you-men/p/12839535.html
Redis单机部署
此篇文章只做单机服务器搭建,高可用哨兵和集群请看下一篇
环境
代码语言:javascript复制[Redis-Server]
主机名 = redis-master-1
系统 = CentOS7.6.1810
地址 = 121.36.43.223
软件 = redis-4.0.14
# 版本
# Redis的奇数版本为非稳定版本,例如2.7.3.1,如果为偶数则为稳定版本,例如3.2,3.4;
节点名 | IP | 软件版本 | 硬件 | 网络 | 说明 |
---|---|---|---|---|---|
redis-master | 192.168.43.134 | list 里面都有 | 2C4G | Nat,内网 | 测试环境 |
下载解压Redis源码包
代码语言:javascript复制yum -y install gcc
wget http://download.redis.io/releases/redis-4.0.14.tar.gz
tar xvf redis-4.0.14.tar.gz -C /opt/
cd /opt/redis-4.0.14
编译安装
代码语言:javascript复制# Redis的编译,只将命令文件编译,将会在当前目录生成bin目录
make && make install PREFIX=/usr/local/redis
cd ..
mv redis-4.0.14/* /usr/local/redis/
# 创建环境变量
echo 'PATH=$PATH:/usr/local/redis/src/' >> /etc/profile
source /etc/profile
# 此时在任何目录位置都可以是用redis-server等相关命令
[root@redis1 ~]# redis-
redis-benchmark redis-check-rdb redis-sentinel redis-trib.rb
redis-check-aof redis-cli redis-server
Redis可执行文件
可执行文件 | 作用 |
---|---|
redis-server | 启动redis服务 |
redis-cli redis | 命令行客户端 |
redis-benchmark | Redis基准测试工具 |
redis-check-aof | redis AOF持久化文件检测和修复工具 |
redis-check-dump | redis RDB持久化文件检测和修复工具 |
redis-sentinel | 启动redis sentinel |
修改配置文件
代码语言:javascript复制# redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端)
daemonize no
# 指定redis进程的PID文件存放位置
pidfile /var/run/redis.pid
# redis进程的端口号
port 6379
# 绑定的主机地址
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进行数据同步
slaveof <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
我们需要修改的配置
# 设置后台启动
# 由于Redis默认是前台启动,不建议使用.可以修改为后台
daemonize yes
# 禁止protected-mode yes/no(保护模式,是否只允许本地访问)
protected-mode
# 设置远程访问
# Redis默认只允许本机访问,把bind修改为bind 0.0.0.0 此设置会变成允许所有远程访问,如果指定限制访问,可设置对应IP。
# bind指定是redis所在服务器网卡的IP,不指定本机网卡IP,可能导致你的Redis实例无法启动
# 如果想限制IP访问,内网的话通过网络接口(网卡限定),让客户端访问固定网卡链接redis
# 如果是公网,通过iptables指定某个IP允许访问
bind 0.0.0.0
# 配置Redis日志记录
# 找到logfile,默认为logfile "",改为自定义日志格式
logfile /var/log/redis_6379.log
# 把requirepass修改为123456,修改之后重启下服务
requirepass "123456"
# 不重启Redis设置密码
# 在配置文件中配置requirepass的密码(当Redis重启时密码依然生效)
127.0.0.1:6379> config set requirepass test123
# 查询密码
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "test123"
# 密码验证
127.0.0.1:6379> auth test123
OK
127.0.0.1:6379> set name flying
OK
127.0.0.1:6379> get name
"flying"
# 远程主机连接
# redis-cli -h redis_ip -p redis_port -a password
启动测试
代码语言:javascript复制# 放到后台输出,redis自带日志了,可以输出到黑洞
nohup redis-server /usr/local/redis/redis.conf &> /usr/local/redis/redis.log &
# 关闭命令
redis-cli -h 127.0.0.1 -p 6379 -a 123456 shutdown
# 注意:不建议使用 kill -9,这种方式不但不会做持久化操作,还会造成缓冲区等资源不能优雅关闭。极端情况下造成 AOF 和 复制丢失数据 的情况。
# shutdown 还有一个参数,代表是否在关闭 redis 前,生成 持久化文件,命令为 redis-cli shutdown nosave|save。
# 设置开机自启动
echo "redis-server /usr/local/redis.conf" >> /etc/rc.local
注册Redis为系统服务
在/etc/init.d目录添加Redis服务的启动,暂停和重启脚本
vim /etc/init.d/redis
#!/usr/bin/env bash
# chkconfig: 2345 10 90
# description: Start and Stop redis
PORT=6379
EXEC=/usr/local/redis/src/redis-server
CLIEXEC=/usr/local/redis/src/redis-cli
PIDFILE=/var/run/redis_${PORT}.pid
CONF="/etc/redis/${PORT}.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF &>/dev/null &
fi
;;
stop)
PID=$(cat $PIDFILE)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
echo "Stopping ..."
$CLIEXEC -p $PORT shutdown
while [ -d /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
restart)
"$0" stop
sleep 3
"$0" start
;;
*)
echo "Please use start or stop as first argument"
;;
esac
chmod x /etc/init.d/redis
mkdir /etc/redis
cp /usr/local/redis/redis.conf /etc/redis/6379.conf
chkconfig --add redis
chkconfig redis on
service redis start
service redis restart
Redis常用命令
Redis-value操作
此处Redis五种数据类型具体操作先不演示,只做一个简单的key操作,具体操作等Python操作Redis再写详细,前面主要以运维为主
# 添加一个key[name]为youmen
127.0.0.1:6379> set name youmen
OK
# 获取key
127.0.0.1:6379> get name
"youmen"
# 查看当前数据库里面的key
127.0.0.1:6379> keys *
1) "name"
# 判断key是否存在
127.0.0.1:6379> exists name
(integer) 1
# 删除key值,也就删除了这条数据
127.0.0.1:6379> del name
(integer) 1
# 查找不到对应的key返回值就会使(integer)0
127.0.0.1:6379> exists name
(integer) 0
# 设置key的过期时间,过期后key自动删除
127.0.0.1:6379> set name youmen
OK
127.0.0.1:6379> set name youmen ex 2
127.0.0.1:6379> expire name 10
(integer) 1
127.0.0.1:6379> ttl name
(integer) 6
127.0.0.1:6379> ttl name
(integer) 2
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> exists name
(integer) 0
持久化命令
代码语言:javascript复制# save:将数据同步保存到磁盘
# bgsave:将数据异步保存到磁盘
# lastsave:返回上次成功将数据保存到磁盘的Unix时戳
# shundown:将数据同步保存到磁盘,然后关闭服务
远程服务控制
代码语言:javascript复制# info:提供服务器的信息和统计
# info clients: 查看客户端信息.
# monitor:实时转储收到的请求
# slaveof:改变复制策略设置
# config:在运行时配置Redis服务器
# client list: 查看链接的客户端有哪些
# chient kill 127.0.0.1:50390: 杀掉客户端链接
# config get dir: 查看存储文件目录
# config get *: 查看所有配置
# config set requirepass 123 : 修改配置,即时生效
# config get bind : 查看配置文件中的监听地址
部署redis_exporter插件
下载redis_exporter插件
代码语言:javascript复制wget https://github.com/oliver006/redis_exporter/releases/download/v0.30.0/redis_exporter-v0.30.0.linux-amd64.tar.gz
解压部署
代码语言:javascript复制tar xvf redis_exporter-v0.30.0.linux-amd64.tar.gz -C /usr/local/redis
# 无密码
nohup ./redis_exporter -redis.addr 192.168.1.120:6379 &
# 有密码
nohup ./redis_exporter -redis.addr 192.168.1.120:6379 -redis.password 123456 &
# 验证服务可用性
lsof -i:9121
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis_exp 18500 root 3u IPv6 57511 0t0 TCP *:9121 (LISTEN)
配置Prometheus
代码语言:javascript复制tail -3 /usr/local/prometheus/prometheus.yml
- job_name: 'redis_node134'
static_configs:
- targets: ['192.168.43.134:9121']
重启Prometheus
代码语言:javascript复制systemctl restart prometheus
配置Grafana
先配置prometheus数据源
配置相应模板
我们可以去官网找模板下载json文件导入也可以直接输入id就自动下载导入
刚导入数据可能没数据导致图形不是很形象,可以通过下面脚本批量插入
cat redis_test.sh
#!/bin/bash
for ((i=0;i<10000;i ))
do
echo -en "helloworld" | redis-cli -h 192.168.43.134 -p 6379 -a 123456 -x set name$i >>redis.log
done