项目架构图
项目文件和数据下载:github.com/ouyangsuo/C…
部署MySQL数据服务器
- 通过Xftp等工具或scp命令将crm_test.sql文件上传到数据库服务器特定位置(例如/data/crm_test.sql)
- 登录MySQL服务器,创建crm_test数据库,从crm_test.sql导入数据
create database crm_test charset=utf8;
use crm_test;
source /data/crm_test.sql;
- 修改防火墙规则,永久开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports
上述步骤也可以通过iptables实现,参考上一节内容
部署业务服务器
- 将项目文件上传到2号机的tomcat下的webapps/ROOT目录下
- 修改webapps/ROOT/WEB-INF/classes/db.properties文件,配置数据库服务器的IP和访问密码,此处我的配置为:
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://192.168.142:3306/crm_test jdbc.username=root jdbc.password=123456
- 检查和开放8080、8443、443三个端口 其中8080和8443为正常的http请求和转发端口,443为https协议转发端口
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
iptables -I INPUT -p tcp --dport 8443 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
-
执行bin目录下的startup.sh,以启动tomcat
-
外部通过浏览器访问 http://<tomcat服务器ip>:8080,执行效果
-
在另一台tomcat服务器上执行相同的操作并验证结果
-
PS:在执行一些调试时,需要不断通过shutdown.sh和startup.sh重启服务
Nginx配置反向代理
- 先将nginx服务器默认的启动配置文件进行备份
cd /usr/local/nginx/conf/
cp ./nginx.conf ./nginx.conf.bak
- 修改默认的启动配置文件
vim ./nginx.conf
# 声明通过root用户执行可以省去很多不必要的麻烦
user root;
#1个工作进程,最大1024个连接,这些是默认配置
worker_processes 1;
events {
worker_connections 1024;
}
http {
# 这里是一些默认配置
#include mime.types;
#default_type application/octet-stream;
#sendfile on;
#声明将要代理的服务器,crmserver为自定义的服务名称
upstream crmserver{
server 192.168.0.178:8080;
}
server {
# 监听在本机的80端口
listen 80;
# 将请求 http://<ip>:80/ 转发到上面定义的crmserver上
location / {
proxy_pass http://crmserver;
}
}
}
上面的配置实现了通过访问nginx的80端口实现对业务机8080端口的访问(由upstream xxx定义),即所谓的反向代理
- 启动nginx
/usr/local/nginx/sbin/nginx
- 通过外部浏览器访问 http://<nginx服务器ip>:80,实际效果等同于访问上面的 http://<tomcat服务器ip>:8080
Nginx实现负载均衡
- 修改上一步中的配置文件如下
# 声明通过root用户执行可以省去很多不必要的麻烦
user root;
#1个工作进程,最大1024个连接,这些是默认配置
worker_processes 1;
events {
worker_connections 1024;
}
http {
# 这里是一些默认配置
#include mime.types;
#default_type application/octet-stream;
#sendfile on;
#声明将要代理的服务器,crmserver为自定义的服务名称
#crmserver服务由两台服务器实现负载均衡,权重分别为5
#权重为自定义整数,数值越高,则负载的请求越多
upstream crmserver{
server 192.168.0.178:8080 weight=5;
server 192.168.0.186:8080 weight=5;
#负载均衡策略配置,默认为按权重轮询
#fair;
}
server {
# 监听在本机的80端口
listen 80;
# 将请求 http://<ip>:80/ 转发到上面定义的多台crmserver上进行负载均衡
location / {
proxy_pass http://crmserver;
}
}
}
- 再次启动nginx并访问 http://<nginx服务器ip>:80,发现请求已自动负载均衡到两台业务机上了
Nginx负载均衡策略
nginx的upstream目前支持的5种方式的分配
- 1、依次轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream backserver {
server 192.168.0.14;
server 192.168.0.15;
}
- 2、权重轮询 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream backserver {
server 192.168.0.14 weight=8;
server 192.168.0.15 weight=10;
}
- 3、客户端IP绑定 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
- 4、fair(公平竞争:能者多劳/快者多劳) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver {
server server1;
server server2;
fair;
}
- 5、URL请求IP绑定 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
- down和backup,“”退赛选手”和“备胎选手”
upstream backserver{
ip_hash;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
# down 表示当前的server暂时不参与负载(退赛)
server 127.0.0.1:9090 down;
# 其它所有的非backup机器down或者忙的时候,请求backup机器(备胎)
server 127.0.0.1:7070 backup;
}