ActivedRouter--golang实现的反向代理、监控

简介: 基于golang 实现了简单的http反向代理服务器,监控服务器,客户端程序 ,和一个基于web的监控页面。  通过ActivedRouter 可实现自动摘除宕机服务器,的真机负载。也可以实现IP轮训负载。

基于golang 实现了简单的http反向代理服务器,监控服务器,客户端程序 ,和一个基于web的监控页面。  

通过ActivedRouter 可实现自动摘除宕机服务器,的真机负载。

也可以实现IP轮训负载。


项目地址:  github


简单介绍

一、通过ActivedRouter可以实现什么功能?

1、可以集群服务器的监控,通过提供的web Dashboard可以时刻监控每一台服务器的负载、内存、网络、
磁盘等信息。


2、反向代理服务器功能,例如Nginx的功能,可以针对不同的域名对不同的业务服务器集群进行反向代理。

3、Server & Client 模式组合下,可以用作服务器监控使用,并且可以设置监控报警,Server端可以选择性
开启监控Dashboard,用于直观的web界面监控。

4、服务器监控报警,通过配置每一台服务器的监控报警阀值,来触发不同的脚本,从而达到服务器报警功能,
后期支持:短信报警、邮件报警等等。

5、实现基于真实负载的反向代理和请求路由。 支持 Random 和 Alived 模式,分别代表随机转发和基于负载转发。

6、快速配置反向代理服务,省去配置nginx反向代理的麻烦步骤,一般流量下的负载足以应付。 

二、快速入门

2.1、编译安装

在系统下运行如下脚本,会在当前目录生成ActivedRouter二进制程序,然后我们配置相应的配置文件,并且运行二进制程序即可启动服务。

linux64下    boot_linux64.sh
darwin64下   boot_darwin64.sh
linux32下    boot_linux32.sh

四、工作模式和配置文件

4.1、http/https反向代理模式(Reserve Proxy),类似nginx的反向代理功能。

编译命令: boot_*.sh 选择不通平台的boot文件开始编译安装 运行命令: ActivedRouter --runmode=proxy 运行反向代理服务 配置文件:

{   
    "http_switch":"on",           //http开关 on off
    "proxy_addr":"127.0.0.1:80",  //http监听端口
    "proxy_method":"random",      //proxy方法 random 混合模式下可支持alived方法
    "https_switch":"off",        //是否开启https  on开启https 支持
    "https_crt":"a.crt",         //https证书
    "https_key":"a.key",         //https key
    "https_proxy_addr":"127.0.0.1:443",//https监听地址
    "reserve_proxy":[
        {
            "domain":"1.12xue.com",
            "clients":[
                {
                   "host":"12xuetest.com",
                   "port":"80"  
                }
            ]
        }

    ]
}

4.2、server和client模式可以配合完全服务器监控,提供web仪表盘。

客户端运行: ActivedRouter --runmode=server
client.json

    {
        "domain":"wwww.xxx.com",  //客户端服务器的域名可空
        "cluster":"UIA集群",        //服务器集群的标志 可自定义
        "router_list":[          //要连接的远程路由服务器列表
        "127.0.0.1:8888",
        "172.16.200.202:9999"
        ]
   }

服务器运行: ActivedRouter --runmode=client
server.ini

    #服务器模式下的配置选项
    #路由服务器监听的地址
    host=127.0.0.1
    #服务器监听的端口号
    port=8888   
    #服务模式 moniter & router  
    srvmode=router
    #http 提供http路由服务的ip,端口。
    httphost=127.0.0.1
    httpport=8080

4.3、服务器监控模式触发脚本

当监控服务器下,路由服务器开启srvmode=moniter之后才会触发

{   
        "script":[
    {
            "host":"127.0.0.1",
            "hookscript":[
                {
                    "eventtarget":"disk",
                    "attr":"used",
                    "gt":"15",
                    "callback":"ls"
                },
                {
                    "eventtarget":"load",
                    "attr":"load",
                    "gt":"1.5",
                    "callback":"ls"
                },
                {
                    "eventtarget":"mem",
                    "attr":"used",
                    "gt":"75",
                    "callback":"netstat -ant"
                }
            ]
        }
    ]
}

运行模式

    服务器模式和客户端模式
运行模式 介绍
ServerMode 在服务器模式下监听客户端的状态 
1、 第三方应用通过sdk提供的功能进行自动路由到合适的api服务器上,此处属于代理转发功能。
2、 第三方应用通过sdk提供的功能获取到一个空闲合适的服务器域名或ip。
3、 监听客户端模式下的服务器的服务状态
ClientMode 在客服端模式下通告服务器当前服务状态 
1、 启动挂在到路由服务器 可以挂在到一个至个服务器上。
2、 实时通告路由服务器当前服务器信息,用作路由分析。
Reserve Proxy 内网集群配置反向代理功能
MixProxy 基于监控模式下,真机负载的反向代理服务。
ThirdPartSDK 针对第三方提供php golang 等sdk,提供基于路由负载、以及反向代理负载的http请求机制。

提供api服务器监控功能可以实时返回各服务器状态

监控功能 介绍
虚拟内存 时刻监控服务器的虚拟内存
load average 时刻监控服务器的负载状态
网络连接 时刻监控服务器的网络连接状态
CPU使用率 时刻监控CPU的使用率
磁盘状态 时刻监控服务器的磁盘存储容量
ThirdPartSDK 为应用提供监控接口,可直接展示监控内容



目录
相关文章
|
Prometheus 监控 Go
Golang 微服务监控浅谈
监控作为度量可视化工具在服务治理中一直是承担比较重要的角色。一个良好的架构设计,监控一定是完善且使用便捷的。这篇文章我将会介绍Go微服务的度量与监控方案,参照我的使用经验,在Consul、Kubernetes不同部署环境下的使用。
637 0
|
存储 Prometheus 监控
Golang 搭建 WebSocket 应用(六) - 监控
Golang 搭建 WebSocket 应用(六) - 监控
160 3
|
Prometheus 监控 Cloud Native
Golang深入浅出之-Go语言中的分布式追踪与监控系统集成
【5月更文挑战第4天】本文探讨了Go语言中分布式追踪与监控的重要性,包括追踪的三个核心组件和监控系统集成。常见问题有追踪数据丢失、性能开销和监控指标不当。解决策略涉及使用OpenTracing或OpenTelemetry协议、采样策略以及聚焦关键指标。文中提供了OpenTelemetry和Prometheus的Go代码示例,强调全面可观测性对微服务架构的意义,并提示选择合适工具和策略以确保系统稳定高效。
471 5
|
存储 监控 数据可视化
Golang链路追踪:实现高效可靠的分布式系统监控
Golang链路追踪:实现高效可靠的分布式系统监控
|
数据采集 监控 Go
构建企业上网监控软件的基础设施:Golang实战
企业面临着不断增长的网络威胁,为了保障网络安全,上网监控成为不可或缺的一环。本文将介绍如何使用Golang实战构建企业上网监控软件的基础设施,通过简洁高效的代码示例,演示监控数据的收集和处理过程。
357 0
|
JSON 监控 数据可视化
实时日志分析:通过Golang编写实时日志分析模块,加强公司监控管理软件的日志监控功能
在当今数字化时代,企业面临着庞大而复杂的网络环境,对实时监控和日志分析的需求变得日益迫切。本文将介绍如何使用Golang编写实时日志分析模块,以增强公司监控管理软件的日志监控功能。通过本文的指导,你将能够建立一个定制的实时日志分析系统,更好地监测和管理公司的网络活动。
495 0
|
监控 JavaScript Go
Golang-自动化监控教务系统成绩单
Golang-自动化监控教务系统成绩单
412 0
|
监控 Kubernetes Go
k8s与监控--从telegraf改造谈golang多协程精确控制
从telegraf改造谈golang多协程精确控制 前言 telegraf是infuxdb公司开源出来的一个基于插件机制的收集metrics的项目。整个架构和elastic公司的日志收集系统极其类似,具备良好的扩展性。
2057 0
|
1月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
153 1
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
625 4
Golang语言之管道channel快速入门篇

推荐镜像

更多