高可用构架图

image.png

主机分配

  • 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做高可用
  1. #所有Logstash机器配置group_id
  2. #group_id相同的机器作为一个组,kafka将数据到组内,但是只有一个消费者(Logstash)会接收
  3. input {
  4. kafka {
  5. bootstrap_servers => "10.0.0.20:9092,10.0.0.21:9092,10.0.0.22:9092"
  6. topics => ["Kafka_topics_data"]
  7. group_id => "groupA"
  8. codec => "json"
  9. }
  10. }
  • 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