目录
Nginx
nginx安装
查看安装位置
whereis nginx
启动nginx
./nginx
[root@hostM1 sbin]# ./nginx -s reload #重新加载
[root@hostM1 sbin]# ./nginx -s quit #此方式停止步骤是待nginx进程处理任务完毕进行停止。
[root@hostM1 sbin]# ./nginx -s stop #此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
查看nginx进程
ps -ef|grep nginx
nginx配置文件 (nginx.conf)
第一部分:全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
比如第一行
worker_processes 1;
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约
第二部分:events 块
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
events {
worker_connections 1024;
}
上述例子就表示每个 work process 支持的最大连接数为 1024.
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
第三部分:http 块
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http 全局块、server 块。
server{
listen 80; nginx 使用的端口号是80
server_name localhost; (192.168.221.32)
}
Nginx配置负载均衡
nginx 服务器
准备工作:
- 两个tomcat服务器
- 将服务器中的页面改成不一样的用于区分
- 验证两个tomcat是否能够正常的启动
- 配置nginx
修改nginx.conf文件
upstream 上游
http {
......
upstream aaa
{
#添加服务器到负载均衡
server 192.168.159.34:8080 ;
server 192.168.159.34:8081 ;
}
.....
server {
listen 80;
server_name 192.168.109.35;
location /bbb {
root html;
index index.html index.htm;
#反向代理的地址
proxy_pass http://aaa/;
}
...
}
}
负载均衡的策略配置
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
2、weight
weight 代表权重默认为 1,权重越高被分配的客户端越多
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况
upstream aaa{
server 192.168.159.34:8080 weight=10;
server 192.168.159.34:8081 weight=100;
}
3、ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。 例如:
upstream aaa{
ip_hash;
server 192.168.159.34:8080 ;
server 192.168.159.34:8081 ;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream aaa{
fair;
server 192.168.159.34:8080 ;
server 192.168.159.34:8081 ;
}
动静分离
Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
配置nginx开机启动
切换到/lib/systemd/system/目录,创建nginx.service文件vim nginx.service
cd /lib/systemd/system/
vi nginx.service
添加内容如下:
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
配置之后需要使文件生效
systemctl daemon-reload
退出并保存文件,执行systemctl enable nginx.service使nginx开机启动
#开机自启动
systemctl enable nginx.service
#停止开机自启动
systemctl disable nginx.service
#查询当前状态
systemctl status nginx.service
#启动服务
systemctl start nginx.service
#重新启动服务
systemctl restart nginx.service
#停止服务
systemctl stop nginx.service
#重新加载配置
systemctl reload nginx.service
Keepalived
安装keepalived
yum -y install keepalived
环境准备
1 两台虚拟机,centos7
虚拟ip:192.168.150.33
192.168.150.36
Keppalived1:主33Nginx
Keppalived2:从36Nginx
2 配置keepalived
主服务器修改192.168.159.34的配置文件/etc/keepalived/keepalived.conf
# 全局配置
global_defs {
notification_email {
123@qq.com #设置报警邮件地址,可以设置多个,可以不设置
}
notification_email_from master@qq.com #发送通知邮件时邮件源地址
smtp_server 127.0.0.1 # 发送email时使用的smtp服务器地址,这里可以用本地的sendmail来实现
smtp_connection_timeout 30 #连接smtp连接超时时间
router_id 192.168.150.33 #定义路由标识信息,相同局域网唯一
}
vrrp_script aaa {
script "/usr/local/src/check_nginx_pid.sh" #最后手动执行下此脚本,以确保此脚本能够正常执行
interval 2 #(检测脚本执行的间隔,单位是秒)
weight -2 #当检查失败后,将vrrp_instance的priority减小2
fall 3 #连续监测失败3次,才认为真的健康检查失败。并调整优先级
rise 2 #连续监测2次成功,就认为成功。但不调整优先级
}
# 虚拟ip配置 vrrp
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备,大写
interface ens32 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
mcast_src_ip 192.168.150.33 #发送心跳包的源IP,可使用绑定的网卡IP
virtual_router_id 51 # 虚拟路由编号,主从要一直0-255
priority 100 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
authentication {
auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}
track_script {
aaa #(调用检测脚本)
}
virtual_ipaddress {
192.168.150.199 # 定义虚拟ip(VIP),可多设,每行一个
}
}
备用服务器修改192.168.159.35的配置文件/etc/keepalived/keepalived.conf
# 全局配置
global_defs {
notification_email {
123@qq.com #设置报警邮件地址,可以设置多个,可以不设置
}
notification_email_from master@qq.com #发送通知邮件时邮件源地址
smtp_server 127.0.0.1 # 发送email时使用的smtp服务器地址,这里可以用本地的sendmail来实现
smtp_connection_timeout 30 #连接smtp连接超时时间
router_id 192.168.150.36 #定义路由标识信息,相同局域网唯一
}
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh" #最后手动执行下此脚本,以确保此脚本能够正常执行
interval 2 #(检测脚本执行的间隔,单位是秒)
weight -2 #当检查失败后,将vrrp_instance的priority减小5
fall 3 #连续监测失败3次,才认为真的健康检查失败。并调整优先级
rise 2 #连续监测2次成功,就认为成功。但不调整优先级
}
# 虚拟ip配置 vrrp
vrrp_instance VI_1 {
state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备,大写
interface ens32 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
mcast_src_ip 192.168.150.36 #发送心跳包的源IP,可使用绑定的网卡IP
virtual_router_id 51 # 虚拟路由编号,主从要一直
priority 98 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
authentication {
auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
192.168.150.199 # 定义虚拟ip(VIP),可多设,每行一个
}
}
以下是针对nginx状态进行检测的脚本,第一次nginx服务死掉时,会重新启动,如果Nginx服务无法正常启动,则杀掉keepalived进程
vim /usr/local/src/check_nginx_pid.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
安装killall命令
yum -y install psmisc
给脚本一个执行的权限
chmod 777 /usr/local/src/check_nginx_pid.sh
配置开机自启动
systemctl enable keepalived