mac上nginx+jetty负载均衡部署一览

时间:2022-04-25
本文章向大家介绍mac上nginx+jetty负载均衡部署一览,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

曾经在windows上进行编程,因为linux系统在服务器端应用比较广泛,专门学了shell脚本,在笔记本上装过一个deepin(linux发行版)进行开发,deepin的界面还是比较精美的,进行一般的开发工作也没有什么问题,但是要安装一些常用软件,就要经历一番折腾,比如你要安装一个qq,要先安装wine,还只能安装国际版,使用过程中时常崩溃;安装无线网卡驱动,上网时非常不稳定,只能用有线的方式,目前deepin团队估计对此作了改进,有兴趣可以去了解下。想过自己装一个macos系统,但要实现完美安装还是需要一定水准的,又是一番耗费时间的工作,于是直接入手一个macbook pro,它也有类linux的命令行界面,假期配了一个nginx+jetty负载均衡玩玩。

负载均衡,就是将任务或者请求分配到多个操作方进行执行,就如同货物搬运,把东西全部压在一个人身上,显得太重了,需要根据每个人的承受能力,由一个管理者将货物分配给不同的人,如果其中有一个人累趴下了,就不要再把货物给他了。web请求非常频繁的时候,也需要类似的机制,将请求分配给多个服务器处理,防止服务器宕机或者闲置的情况发生。负载均衡可以通过多种方式实现,由nginx充当反向代理服务器便是一种常用的方式。nginx代理服务器接受外部的连接请求,将请求转发给内部网络上的服务器,并将得到的结果返回客户端:

关于jetty:

在这里我们使用jetty来充当webserver,利用maven和jetty构建一个标准的webapp,为方便应用运行,我们需要在项目demo的pom.xml文件中先配置一个maven-jetty-plugin插件:

<plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
                <version>6.2.XX</version>
                <configuration>
                    <webAppConfig>
                        <contextPath>/</contextPath>
                        <defaultsDescriptor>src/main/resources/web.xml</defaultsDescriptor>
                    </webAppConfig>
                    <systemProperties>
                        <systemProperty>
                            <name>org.mortbay.jetty.Request.maxFormContentSize</name>
                            <value>600000</value>
                        </systemProperty>
                    </systemProperties>
                    <!-- 每2秒的间隔扫描一次,实现热部署 -->
                    <scanIntervalSeconds>2</scanIntervalSeconds>
                     <!-- 端口先注释掉,在命令中指定 -->
                    <!--<connectors>-->
                        <!--<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">-->
                            <!--<port>8080</port>-->
                        <!--</connector>-->
                    <!--</connectors>-->
                </configuration>
            </plugin>

插件会根据仓库地址自动安装,接着我们在命令行键入sudo vim /etc/hosts;配置本机域名为m.qd.com.然后在两个终端分别执行以下命令,每个启动的app配置不同的端口:

man -Djetty.port=8081 jetty:run

mvn -Djetty.port=8084 jetty:run

webserver已经启动,并且分别访问http://m.qd.com:8084/index.html 和http://m.qd.com:8081/index.html ,网页正常显示。

关于nginx:

为了方便安装nginx等软件,我先安装homebrew,这是mac os上类似于apt-get,yum的软件包管理工具,安装只需一个命令即可:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

如果安装下载比较慢,可以换成国内的镜像源以提高速度:

cd /usr/local

git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git

brew update

有了homebrew,一切就方便很多了,直接在终端执行:brew install nginx

它会自动下载安装。

nginx安装在/usr/local/Cellar/nginx目录,配置文件nginx.conf放在/usr/local/etc/nginx目录下,而日志文件在/usr/local/var/log/nginx下,具体文件可以通过find / -name ‘nginx.conf’命令获得,在终端执行

sudo vim /usr/local/etc/nginx/nginx.conf, 修改为如下内容:

upstream m.qd.com {
    #weigth参数表示权值,权值越高被分配到的几率越大
    server localhost:8084  weight=6;
    server localhost:8081  weight=6;
}
server {
        listen       80;
        server_name  m.qd.com;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
        proxy_pass         http://m.qd.com;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
         proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            root   html;
            index  index.html index.htm;
        }
       # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
   }

server节点下的location节点中的proxy_pass配置为:http://+upstream名称,并且localhost:8084与localhost:8081设置了相同的weight值,即nginx在转发请求时两者的访问比率相同.执行

nginx -c /usr/local/etc/nginx/nginx.conf 启动服务,

连续访问http://m.qd.com/index.html,返回正常页面,且实际请求被转发给localhost:8084和localhost:8081处理,以上用例测试通过。upstream除了weight外,还有其他分配策略:按请求ip的hash结果分配(ip_hash),按webserver响应时间分配(fair),按请求url的hash结果分配(url_hash),另外,我们还可以针对静态文件,再配置一个location。

其他:

在部署过程中一些常用的一些命令:

mysql:

brew services start mysql或mysql.server start 启动
mysql -u username -P port  命令行登录
mysql>show variables like ‘port'; 查看mysql当前端口
nginx命令:
nginx -s stop 关闭
nginx -s reload 重载
nginx -c /usr/local/etc/nginx/nginx.conf 启动
lsof -i:80  80 端口占用情况排查
kill pid  杀死某个进程。
ps -ef|grep nginx 查询nginx进程
网络:
ping 111.13.100.91 检测网络是否连通
traceroute 111.13.100.91 检测到达目的地经过的路径
jetty:
unzip *.zip  解压安装包
设置JETTY_HOME系统环境变量
$ sudo vi /etc/paths
在文件的末尾添加如下一行代码:
JETTY_HOME=/usr/local/Cellar/jetty9.3
执行source  /etc/paths生效
启动Jetty
  在后台启动
$ cd $JETTY_HOME
$ bin/jetty.sh start

如果要停止jetty的运行,执行如下命令:

$ bin/jetty.sh stop