开发者社区> usher.yue> 正文

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 为应用提供监控接口,可直接展示监控内容



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Go语言入门之数据结构详细介绍以及代码示例
Go语言是一种静态类型、编译型语言,支持面向对象、过程式和函数式编程风格。它的语法简洁、易于理解,特别适合于开发网络服务和分布式系统。Go语言标准库提供了丰富的数据结构和算法,包括数组、切片、映射、链表、栈、队列、堆、树等常用数据结构。本文将详细介绍Go语言中常用的数据结构,包括定义、初始化、插入、删除、查找、排序等操作,并提供代码示例。
8 0
开心档之Go 语言常量
常量是一个简单值的标识符,在程序运行时,不会被修改的量。 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
18 0
Go语言交叉编译,跨平台执行
Go语言编写的程序交叉编译后就可以在各操作系统执行,非Java或Python依赖虚拟机,Go编译后不依赖虚拟机。
32 0
Go 语言推荐书籍(2023)
Go是谷歌公司为了解决重大问题而设计的一种小型编程语言。 快速、现代的编程语言能让业余爱好者、初学者和专业人员都受益。你需要的正是这样的语言。 今天给大家推荐 10余本 Go语言相关书籍,都是历经多年口碑的优秀作品。
60 0
Go ---Go语言高级编程中订阅/发布模型例子解析
Go ---Go语言高级编程中订阅/发布模型例子解析
17 0
为什么很多公司都开始使用Go语言了?
最近和几个小伙伴们在写字节跳动第五届青训营后端组的大作业。 接近尾期了,是时候做一些总结了,那从什么地方开始呢?那就从我们为什么要选择Go语言开始吧~
49 0
巧如范金,精比琢玉,一分钟高效打造精美详实的Go语言技术简历(Golang1.18)
研发少闲月,二月人倍忙。又到了一年一度的“金三银四”春招季,又到了写简历的时节,如果你还在用传统的Word文档寻找模板,然后默默耕耘,显然就有些落后于时代了,本次我们尝试使用云平台flowcv高效打造一份巧如范金、精比琢玉的高品质Golang技术简历。
43 0
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-JWT和中间件(Middleware)的使用EP07
前文再续,上一回我们完成了用户的登录逻辑,将之前用户管理模块中添加的用户账号进行账号和密码的校验,过程中使用图形验证码强制进行人机交互,防止账号的密码被暴力破解。本回我们需要为登录成功的用户生成Token,并且通过Iris的中间件(Middleware)进行鉴权操作。
33 0
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-登录与图形验证码(captcha)EP06
书接上回,上一回我们按照“低耦合高内聚”的组织架构方针对项目的整体结构进行了优化,本回将会继续编写业务,那就是用户的登录逻辑,将之前用户管理模块中添加的用户账号进行账号和密码的校验,校验通过后留存当前登录用户的信息,过程中使用图形验证码强制进行人机交互,防止账号的密码被暴力破解。
23 0
区块链,中心去,何曾着眼看君王?用Go语言实现区块链技术,通过Golang秒懂区块链
区块链技术并不是什么高级概念,它并不比量子力学、泡利不相容原则、哥德巴赫猜想更难以理解,但却也不是什么类似“时间就是金钱”这种妇孺皆知的浅显道理。区块链其实是一套统筹组织记录的方法论,或者说的更准确一些,一种“去中心化”的组织架构系统。
40 0
+关注
usher.yue
算法相关技术专家
文章
问答
文章排行榜
最热
最新
相关电子书
更多
《Nginx 代理系统常用手册》
立即下载
CentOS Nginx PHP JAVA多语言镜像使用手册
立即下载
CentOS Nginx PHP JAVA 多语言镜像使用手
立即下载