kibana监控
只需要一步就可以开启
查看效果
使用nginx+keepalived代理多台redis
上面我们实验了单台redis作为收集日志的缓存层,但是单台redis存在一个问题,就是单点故障.虽然可以做持久化处理,但是加入服务器坏掉或者修复时间未知的情况下还是有可能会丢数据.redis集群方案有哨兵和集群,但可惜的是filebeat和logstash都不支持这两种方案.不过利用我们目前所学的知识完全可以解决这个问题,虽然不是彻底解决,但是已经很好了
- 解决方案
- 使用nginx+keepalived反向代理负载均衡到后面的多台redis
- 考虑到redis故障切换中数据一致性的问题,所以最好我们只使用2台redis,并且只工作一台,另外一台作为backup,只有第一台坏掉后,第二台才会工作
- filebeat的output的redis地址为keepalived的虚拟IP
- logstash可以启动多个节点来加速读取redis的数据
- 后端可以采用多台Elasticsearch集群来做支撑
节点安排
db01(10.0.0.51)
- nginx: 80端口提供访问
- filebeat: 读取日志文件存入redis
- logstash: 从redis中读取日志
- Elasticsearch: 存储日志信息
db02(10.0.0.52)
- redis: 缓存日志,两台redis为独立节点
db03(10.0.0.53)
- redis: 缓存日志,两台redis为独立节点
lb01(10.0.0.5)
- nginx: 负载均衡提供高可用
- keepalived: 高可用,避免redis单点故障
lb02(10.0.0.6)
- nginx: 负载均衡提供高可用
- keepalived: 高可用,避免redis单点故障
安装部署keepalived
#lb01,lb02
yum install -y keepalived
编写keepalived配置文件
- /etc/keepalived/keepalived.conf : keepalived配置文件
- GLOBAL CONFIGURATION : 全局配置部分
- VRRPD CONFIGURATION : VRRP协议配置部分
- LVS CONFIGURATION : LVS服务管理配置部分
#lb01,lb02
! Configuration File for keepalived
#全局配置部分
global_defs {
#设置发送邮件信息的收件人
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
#设置连接的邮件服务器信息
notification_email_from 1997sty@163.com
smtp_server 163.smtp.xxx_
smtp_connect_timeout 30
#高可用集群主机身份标识(集群中主机身份标识名称不能重复)
router_id LVS_DEVEL
}
#Vrrp协议家族
vrrp_instance 1997sty {
#标识所在家族中的身份 (MASTER/BACKUP)
state MASTER
#指定虚拟IP地址出现在什么网卡上
interface eth0
#标识家族身份信息 多台高可用服务配置要一致
virtual_router_id 51
#设定优先级 优先级越高,就越有可能成为主
priority 100
#定义组播包发送的间隔时间(秒) 主和备配置一样
advert_int 1
#实现通讯需要有认证过程
authentication {
auth_type PASS
auth_pass 1111
}
#配置虚拟IP地址信息
virtual_ipaddress {
192.168.200.16
192.168.200.17
192.168.200.18
}
}
- 修改
10.0.0.5
的/etc/keepalived/keepalived.conf
配置文件
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_instance 1997sty {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
}
- 修改
10.0.0.6
的/etc/keepalived/keepalived.conf
配置文件
! Configuration File for keepalived
global_defs {
router_id lb02
}
vrrp_instance 1997sty {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
}
配置完成后启动keepalived服务
systemctl start keepalived.service
systemctl status keepalived.service
#查看ip信息,MASTER主机的ip会增加一个keepalived的ip地址
ip a
安装部署nginx
- 参考链接
- 创建该文件后使用
yum install -y nginx
#lb01,lb02
vi /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
- 启动
nginx
和设置开机启动
#lb01,lb02
systemctl start nginx
systemctl enable nginx
配置反向代理,四层转发
- 在nginx主配置文件/etc/nginx/nginx.conf中,最后一行追加以下配置,重启nginx
#lb01,lb02
vi /etc/nginx/nginx.conf
stream {
upstream redis {
server 10.0.0.52:6379 max_fails=2 fail_timeout=10s;
server 10.0.0.53:6379 max_fails=2 fail_timeout=10s backup;
}
server {
listen 6379;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass redis;
}
}
安装部署redis
目录规划
#db02,db03
# redis下载目录
/data/soft/
# redis安装目录
/opt/redis_cluster/redis_{PORT}/{conf,logs,pid}
# redis数据目录
/data/redis_cluster/redis_{PORT}/redis_{PORT}.rdb
# redis运维脚本
/root/scripts/redis_shell.sh
安装命令
#db02,db03
#编辑hosts文件
echo '10.0.0.51 db01' >> /etc/hosts
echo '10.0.0.52 db02' >> /etc/hosts
echo '10.0.0.53 db03' >> /etc/hosts
#创建目录
mkdir -p /data/soft
mkdir -p /data/redis_cluster/redis_6379
mkdir -p /opt/redis_cluster/redis_6379/{conf,pid,logs}
#获取redis安装包或上传安装到到该路径
cd /data/soft/
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
#解压
tar zxf redis-3.2.9.tar.gz -C /opt/redis_cluster/
#创建软连接,并进入目录编译安装
ln -s /opt/redis_cluster/redis-3.2.9/ /opt/redis_cluster/redis
cd /opt/redis_cluster/redis
make && make install
#默认执行脚本
/opt/redis_cluster/redis/utils/install_server.sh
创建db02配置文件
#db02
cd /opt/redis_cluster/redis_6379/conf/
cat > redis_6379.conf <<EOF
### 以守护进程模式启动
daemonize yes
### 绑定的主机地址
bind 10.0.0.52
### 监听端口
port 6379
### pid文件和log文件的保存地址
pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid
logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log
### 设置数据库的数量,默认数据库为0
databases 16
### 指定本地持久化文件的文件名,默认是dump.rdb
dbfilename redis_6379.rdb
### 本地数据库的目录
dir /data/redis_cluster/redis_6379
EOF
创建db03配置文件
#db03
cd /opt/redis_cluster/redis_6379/conf/
cat > redis_6379.conf <<EOF
### 以守护进程模式启动
daemonize yes
### 绑定的主机地址
bind 10.0.0.53
### 监听端口
port 6379
### pid文件和log文件的保存地址
pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid
logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log
### 设置数据库的数量,默认数据库为0
databases 16
### 指定本地持久化文件的文件名,默认是dump.rdb
dbfilename redis_6379.rdb
### 本地数据库的目录
dir /data/redis_cluster/redis_6379
EOF
启动关闭服务
#db02,db03
#启动
redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf
修改filebeat配置文件
#db01
#修改后重启
vi /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
json.keys_under_root: true
json.overwrite_keys: true
tags: ["access"]
- type: log
enabled: true
paths:
- /var/log/nginx/error.log
tags: ["error"]
setup.kibana:
host: "10.0.0.51:5601"
output.redis:
hosts: ["10.0.0.3"]
key: "filebeat"
修改完成后启动
systemctl restart filebeat
修改logstash配置文件
#db01
vi /etc/logstash/conf.d/redis.conf
input {
redis {
host => "10.0.0.3"
port => "6379"
db => "0"
key => "filebeat"
data_type => "list"
}
}
filter {
mutate {
convert => ["upstream_time", "float"]
convert => ["request_time", "float"]
}
}
output {
stdout {}
if "access" in [tags] {
elasticsearch {
hosts => "http://localhost:9200"
manage_template => false
index => "nginx_access-%{+yyyy.MM.dd}"
}
}
if "error" in [tags] {
elasticsearch {
hosts => "http://localhost:9200"
manage_template => false
index => "nginx_error-%{+yyyy.MM.dd}"
}
}
}
修改完成后启动
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis.conf
最后一次更新于2020-07-07 17:20
0 条评论