mac上nginx+jetty负载均衡部署一览
Posted java达人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>
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
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 启动服务,
连续访问,返回正常页面,且实际请求被转发给localhost:8084和localhost:8081处理,以上用例测试通过。upstream除了weight外,还有其他分配策略:按请求ip的hash结果分配(ip_hash),按webserver响应时间分配(fair),按请求url的hash结果分配(url_hash),另外,我们还可以针对静态文件,再配置一个location。
其他:
在部署过程中一些常用的一些命令:
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
java达人
ID:java_daren
以上是关于mac上nginx+jetty负载均衡部署一览的主要内容,如果未能解决你的问题,请参考以下文章
域名到站点的负载均衡技术一览(主要是探讨一台Nginx抵御大并发的解决方案)(转)