欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用homebrew在macOS中安装nginx实现Tomcat的负载均衡集群

程序员文章站 2024-02-21 10:20:28
...

在Linux中安装时需要自行下载源代码、安装依赖,然后编译、安装。在macOS中,有一个简便的方式,那就是使用homebrew。在Linux中安装以及配置nginx的连接为:https://blog.csdn.net/asahinokawa/article/details/82288567。虽然用了很长一段时间,但基本上是使用brew install xxxx此类命令上,对其他的用法不是很了解。借着安装nginx的机会,熟悉一下其他的一些有用的用法。

熟悉homebrew

安装方式,可参考官网教程说明:https://brew.sh/

基本用法:按照惯例,应该使用brew helpman brew去了解一下基本的用法。使用brew help就已经足够了,其结果也是相当地易懂、易操作,如下:

➜  ~ brew help
Example usage:
  brew search [TEXT|/REGEX/] # 搜索软件,实用
  brew info [FORMULA...] # 查询软件相关信息,非常有用
  brew install FORMULA... # 这个不解释
  brew update # 更新软件列表
  brew upgrade [FORMULA...] # 更新xx软件
  brew uninstall FORMULA... # 卸载xx软件
  brew list [FORMULA...] # 列出通过brew安装的软件

Troubleshooting:
  brew config
  brew doctor
  brew install --verbose --debug FORMULA

Contributing:
  brew create [URL [--no-fetch]]
  brew edit [FORMULA...]

Further help:
  brew commands
  brew help [COMMAND]
  man brew
  https://docs.brew.sh

但是我记得之前使用过一个叫做brew cask install xxxx的方式来安装某些程序,这一次特地去找了一找关于它的用法。

➜  ~ brew cask help
Homebrew Cask provides a friendly CLI workflow for the administration
of macOS applications distributed as binaries.

Commands:

    audit      verifies installability of Casks
    cat        dump raw source of the given Cask to the standard output
    create     creates the given Cask and opens it in an editor
    doctor     checks for configuration issues
    edit       edits the given Cask
    fetch      downloads remote application files to local cache
    home       opens the homepage of the given Cask
    info       displays information about the given Cask
    install    installs the given Cask
    list       with no args, lists installed Casks; given installed Casks, lists staged files
    outdated   list the outdated installed Casks
    reinstall  reinstalls the given Cask
    style      checks Cask style using RuboCop
    uninstall  uninstalls the given Cask
    upgrade    upgrades all outdated casks
    zap        zaps all files associated with the given Cask

See also "man brew-cask"

这个cask可以用来装一些atom、Google Chrome之类的图形化应用。记得之前安装的是一个Android开发工具之一的ADB以及一个视频播放器iina,用list查看如下:

➜  ~ brew cask list
android-platform-tools                                         iina

安装nginx

# 更新软件列表
➜  ~ brew update
Already up-to-date.
# 搜索nginx相关的软件
➜  ~ brew search nginx
==> Formulae
nginx ✔
# 查看nginx相关的信息
➜  ~ brew info nginx
nginx: stable 1.15.3 (bottled), HEAD
HTTP(S) server and reverse proxy, and IMAP/POP3 proxy server
https://nginx.org/
/usr/local/Cellar/nginx/1.15.3 (23 files, 1.4MB) *
  Poured from bottle on 2018-09-12 at 15:32:54
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/nginx.rb
==> Dependencies # 依赖相关,安装时会自动安装上
Required: openssl ✘, pcre ✘
Optional: passenger ✘
==> Options
--with-passenger
    Compile with support for Phusion Passenger module
--HEAD
    Install HEAD version
==> Caveats
Docroot is: /usr/local/var/www # 文档位置
# 这里解释了为什么会监听8080端口的原因,这样就可以不用sudo也能启动nginx
# 这里可以注意一下nginx.conf的位置
The default port has been set in /usr/local/etc/nginx/nginx.conf to 8080 so that
nginx can run without sudo.
# 启动时会加载这个目录下的配置文件,在上面的配置文件中有相应的配置
nginx will load all files in /usr/local/etc/nginx/servers/.

To have launchd start nginx now and restart at login:
  brew services start nginx #启动nginx的方式之一
Or, if you do not want/need a background service you can just run:
  nginx #启动nginx的方式之二,感觉我一般会倾向于用这个,毕竟mac不会一直用来当服务器。
==> Analytics
install: 35395 (30d), 114392 (90d), 354080 (365d)
install_on_request: 32185 (30d), 99518 (90d), 300056 (365d)
build_error: 103 (30d)
➜  ~ brew install nginx # 这里已经安装过了,输出请忽略
Warning: nginx 1.15.3 is already installed and up-to-date
To reinstall 1.15.3, run `brew reinstall nginx`

运行

直接输入nginx,便运行成功。修改配置文档后,需要使用nginx -s reload进行重新加载;需要停止时,则使用nginx -s stop即可。

配置Tomcat的负载均衡集群

upstream tomcatclustertest.com{
    // 这是一个在本机运行的tomcat服务器
    server 127.0.0.1:8088   weight=1;// weight表示按权重分配请求
    // 这是一个在虚拟机中运行的tomcat服务器
    server 192.168.31.104:8080  weight=2;
}
server {
    listen 8080;// 监听8080端口的请求
    server_name localhost; // 服务器名字为localhost
    access_log /usr/local/etc/nginx/logs/access.log combined; // 日志输出文件
    index index.html index.htm index.jsp index.php;
    #error_page 404 /404.html;
    if ( $query_string ~* ".*[\;'\<\>].*" ) {
        return 404;
   }
   location / {
       // 将请求分配给tomcatclustertest.com这个集群,即上面的upstream中的两个tomcat组成的服务器集群
       proxy_pass http://tomcatclustertest.com; 
       proxy_redirect default;
   }
}

nginx负载均衡的策略

  • 轮询(默认)
    优点:实现简单
    缺点:不考虑每台服务器的处理能力
    配置示例如下:
upstream www.xxx.com {
    # 需要负载的server列表
    server www.xxx.com:8080;
    server www.xxx.com:9080;
}
  • 权重,使用的较多的策略
    优点:考虑了每台服务器处理能力的不同,哪台机器性能高就给哪台机器的权重高一些
    配置示例如下:
upstream www.xxx.com {
    # 需要负载的server列表,weight表示权重,weight默认为1,如果多个配置权重的节点,比较相对值
    server www.xxx.com:8080 weight=15;
    server www.xxx.com:9080 weight=10;
}
  • ip hash
    优点:能实现同一个用户始终访问同一个服务器
    缺点:根据 ip hash 不一定平均
    配置示例如下:
upstream www.xxx.com {
    ip_hash;
    # 需要负载的server列表
    server www.xxx.com:8080;
    server www.xxx.com:9080;
}
  • url hash (第三方插件)
    优点:能实现同一个服务访问同一个服务器,也就是根据url进行负载
    缺点:和ip hash一样,根据 url hash 分配请求不一定平均,请求频繁的url会请求到同一台服务器上
    配置示例如下(需要事先安装插件)
upstream www.xxx.com {
    # 需要负载的server列表
    server www.xxx.com:8080;
    server www.xxx.com:9080;
    hash $request_uri;
}
  • fair (第三方插件)
    特点:按后端服务器的响应时间来分配请求,响应时间短的优先分配
    配置示例如下(需要事先安装插件)
upstream www.xxx.com {
    # 需要负载的server列表
    server www.xxx.com:8080;
    server www.xxx.com:9080;
    fair;
}

一些负载均衡参数简介:

upstream www.xxx.com {
    ip_hash;
    # 需要负载的server列表
    server www.xxx.com:8080 down;  # down表示当前的server暂时不参与负载
    server www.xxx.com:9080 weight=2;  # weight默认值为1,weight的值越大,负载的权重就越大  
    server www.xxx.com:7080 backup;  # 其他所有的非backup机器,在down掉或者很忙的时候,才请求backup机器,也就是一个备用机器
    server www.xxx.com:6080;
}

参考:
https://www.cnblogs.com/meng1314-shuai/p/8335140.html
https://blog.csdn.net/wang379275614/article/details/47778201
http://blog.51cto.com/zero01/2112989

相关标签: 负载均衡