高可用构架图
主机分配
- Filebeat要安装在被收集日志的服务器上
- Zookeeper和Kafka安装在同一机器上,Logstash也安装在这一机器上
- Elasticsearch安装在单独的机器上
- Kibana和其中一个Nginx安装在一个机器上,另一个Nginx可以单独安装,也可以借助于其他机器
| Zookeeper+Kafka+Logstash | 10.0.0.20 |
|---|---|
| Zookeeper+Kafka+Logstash | 10.0.0.21 |
| Zookeeper+Kafka+Logstash | 10.0.0.22 |
| Elasticsearch | 10.0.0.30 |
|---|---|
| Elasticsearch | 10.0.0.31 |
| Elasticsearch | 10.0.0.32 |
| Nginx+Kibana | 10.0.0.40 |
|---|---|
| Nginx+Kibana | 10.0.0.41 |
主要配置
- zookeeper做集群
- Kafka做集群
- Logstash做高可用
#所有Logstash机器配置group_id#group_id相同的机器作为一个组,kafka将数据到组内,但是只有一个消费者(Logstash)会接收input {kafka {bootstrap_servers => "10.0.0.20:9092,10.0.0.21:9092,10.0.0.22:9092"topics => ["Kafka_topics_data"]group_id => "groupA"codec => "json"}}
- Elasticsearch做集群
- 使用Nginx反向代理Kibana的请求
upstream elasticsearch {
zone elasticsearch 64K;
server 10.0.0.30:9200;
server 10.0.0.31:9200;
server 10.0.0.32:9200;
}
server {
listen 9200;
server_name 10.0.0.44;
location / {
proxy_pass http://elasticsearch;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log logs/es_access.log;
}
- 利用Keepalived做nginx的高可用
主
#检测脚本
vrrp_script chk_http_port {
script "/scripts/nginx/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
interval 2 #(检测脚本执行的间隔,单位是秒)
weight 2 #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备
interface eth0 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
virtual_router_id 66 # 虚拟路由编号,主从要一直
priority 100 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
#授权访问
authentication {
auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
10.0.0.44 # 定义虚拟ip(VIP),可多设,每行一个
}
}
备
#检测脚本
vrrp_script chk_http_port {
script "/scripts/nginx/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
interval 2 #(检测脚本执行的间隔)
weight 2 #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {
state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备
interface eth0 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
virtual_router_id 66 # 虚拟路由编号,主从要一直
priority 99 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
#授权访问
authentication {
auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
10.0.0.44 # 定义虚拟ip(VIP),可多设,每行一个
}
}
检测nginx脚本
#!/bin/bash
#检测nginx是否启动了
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then #如果nginx没有启动就启动nginx
systemctl start nginx #重启nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败,则停掉keepalived服务,进行VIP转移
killall keepalived
fi
fi
- Kibana连接到VIP
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://10.0.0.44:9200"
kibana.index: ".kibana"
xpack.security.enabled: false
