目 录
一、nginx的反向代理
1.反向代理原理
2.反向代理的几种算法
(1)轮询(默认)
(2)weight
(3)ip_hash
(4)fair(第三方)
(5)url_hash(第三方)
(6)least_conn
3.配置
(1)给centos和ubuntu下载配置安装nginx
(2)在centos下进入到/usr/local/nginx/conf/
(3)编辑nginx.conf文本,编辑内容如下
(4)进入到Ubuntu的/usr/local/nginx/html
(5)编辑index.html,内容如下
(6)进入到windows,编辑index.html如下
(7)启动centos和ubuntu的nginx
(8)在windows上启用小皮面板
(9)查看启动状态
(10)在物理机进行访问centos:192.168.191.129
二、nginx的高可用
1.原理
2.实验搭建
(1)下载keepalive压缩包(keepalive下载网址)
(2)解压缩包
(3)将解压的文件移动到我们/usr/local下
(4)构建编译环境并且安装
(5)进入到/usr/local/etc/keepalived/下
(6)编辑一个 keepalived.conf文本,编辑以下内容
(7)创建nginx重启脚本check_nginx_pid.sh编辑以下内容
(8)给check_nginx_pid.sh增加一个可执行的权限:
(9)由于安装keepalived时,是自定义的安装位置,因此需要拷贝一些文件到系统目录中
(10)启动keepalive服务
(11)检查是否keepalive是都启动成功
(12)另外一台主机作为备,操作和上述一样,唯一一点在配置keepalived.conf不同,备份配置如下:
(13)启动主备服务器的nginx和keepalive
(14)测试
一、nginx的反向代理
1.反向代理原理
就是把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器,从而不会产生集群中大量请求只请求某一台服务器,从而使该服务器宕机的情况。
2.反向代理的几种算法
(1)轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动删除。
(2)weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
(3)ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session 保持的问题。
(4)fair(第三方)
可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配,Nginx本身默认是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。
(5)url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率,Nginx本身默认是不支持url_hash的,如果需要这种高度算法,必须安装Nginx的hash软件包。
(6)least_conn
根据后端服务器的连接状况进行分配客户请求,连接最少的服务器将被有限分配客户端请求。
3.配置
centos作为反向代理服务器(192.168.191.129)
ubuntu(192.168.191.128)和windows10(192.168.191.134)作为被代理的服务器)
(1)给centos和ubuntu下载配置安装nginx
(2)在centos下进入到/usr/local/nginx/conf/
cd /usr/local/nginx/conf
(3)编辑nginx.conf文本,编辑内容如下
upstream nginx_html{
# 30s内检查心跳发送两次包,未回复就代表该机器宕机,请求分发权重比为1:2
server 192.168.191.128 weight=100 max_fails=2 fail_timeout=30s;
server 192.168.191.134 weight=200 max_fails=2 fail_timeout=30s;
# 这里的IP请配置成你WEB服务所在的机器IP
}
(4)进入到Ubuntu的/usr/local/nginx/html
cd /usr/local/nginx/html
(5)编辑index.html,内容如下
ubuntu 192.168.191.128
(6)进入到windows,编辑index.html如下
Windows 192.168.191.134
(7)启动centos和ubuntu的nginx
cd /usr/local/nginx/sbin
./nginx
(8)在windows上启用小皮面板
(9)查看启动状态
ps -ef | grep nginx
(10)在物理机进行访问centos:192.168.191.129
二、nginx的高可用
1.原理
两台设备分为主备,并且主备都需要安装nginx和keepalive(原理是心跳检测),在主备上面分别连接两台服务器,当主设备挂掉后,备用设备可以正常的去使用。
2.实验搭建
(1)下载keepalive压缩包(keepalive下载网址)
wget https://keepalived.org/software/keepalived-2.2.7.tar.gz
(2)解压缩包
tar -zvxf keepalived-2.2.7.tar.gz
(3)将解压的文件移动到我们/usr/local下
mv keepalive /usr/local/
(4)构建编译环境并且安装
./configure
make && make install
(5)进入到/usr/local/etc/keepalived/下
cd /usr/local/etc/keepalived/
(6)编辑一个 keepalived.conf文本,编辑以下内容
global_defs {
# 自带的邮件提醒服务,建议用独立的监控或第三方SMTP,也可选择配置邮件发送。
notification_email {
root@localhost
}
notification_email_from root@localhost
smtp_server localhost
smtp_connect_timeout 30
# 高可用集群主机身份标识(集群中主机身份标识名称不能重复,建议配置成本机IP)
router_id 192.168.191.129
}# 定时运行的脚本文件配置
vrrp_script check_nginx_pid_restart {
# 之前编写的nginx重启脚本的所在位置
script "check_nginx_pid.sh"
# 每间隔3秒执行一次
interval 3
# 如果脚本中的条件成立,重启一次则权重-20
weight -20
}# 定义虚拟路由,VI_1为虚拟路由的标示符(可自定义名称)
vrrp_instance VI_1 {
# 当前节点的身份标识:用来决定主从(MASTER为主机,BACKUP为从机)
state MASTER
# 绑定虚拟IP的网络接口,根据自己的机器的网卡配置
interface ens33
# 虚拟路由的ID号,主从两个节点设置必须一样
virtual_router_id 240
# 填写本机IP
mcast_src_ip 192.168.191.129
# 节点权重优先级,主节点要比从节点优先级高
priority 100
# 优先级高的设置nopreempt,解决异常恢复后再次抢占造成的脑裂问题
nopreempt
# 组播信息发送间隔,两个节点设置必须一样,默认1s(类似于心跳检测)
advert_int 1
authentication {
auth_type PASS
auth_pass jiege
}
# 将track_script块加入instance配置块
track_script {
# 执行Nginx监控的脚本
check_nginx_pid_restart
}virtual_ipaddress {
# 虚拟IP(VIP),也可扩展,可配置多个。
192.168.191.240
}
}
(7)创建nginx重启脚本check_nginx_pid.sh编辑以下内容
#!/bin/sh
# 通过ps指令查询后台的nginx进程数,并将其保存在变量nginx_number中
nginx_number=`ps -C nginx --no-header | wc -l`
# 判断后台是否还有Nginx进程在运行
if [ $nginx_number -eq 0 ];then
# 如果后台查询不到`Nginx`进程存在,则执行重启指令
/soft/nginx/sbin/nginx -c /soft/nginx/conf/nginx.conf
# 重启后等待1s后,再次查询后台进程数
sleep 1
# 如果重启后依旧无法查询到nginx进程
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
# 将keepalived主机下线,将虚拟IP漂移给从机,从机上线接管Nginx服务
systemctl stop keepalived.service
fi
fi
(8)给check_nginx_pid.sh增加一个可执行的权限:
chmod +x check_nginx_pid.sh
(9)由于安装keepalived
时,是自定义的安装位置,因此需要拷贝一些文件到系统目录中
mkdir /etc/keepalived/
cp keepalived.conf /etc/keepalived/
cp init.d/keepalived /etc/init.d/
cp sysconfig/keepalived /etc/sysconfig/
(10)启动keepalive服务
systemctl restart keepalive.server
(11)检查是否keepalive是都启动成功
ipaddr
(12)另外一台主机作为备,操作和上述一样,唯一一点在配置keepalived.conf不同,备份配置如下:
global_defs {
# 自带的邮件提醒服务,建议用独立的监控或第三方SMTP,也可选择配置邮件发送。
notification_email {
root@localhost
}
notification_email_from root@localhost
smtp_server localhost
smtp_connect_timeout 30
# 高可用集群主机身份标识(集群中主机身份标识名称不能重复,建议配置成本机IP)
router_id 192.168.191.128
}# 定时运行的脚本文件配置
vrrp_script check_nginx_pid_restart {
# 之前编写的nginx重启脚本的所在位置
script "/soft/scripts/keepalived/check_nginx_pid_restart.sh"
# 每间隔3秒执行一次
interval 3
# 如果脚本中的条件成立,重启一次则权重-20
weight -20
}# 定义虚拟路由,VI_1为虚拟路由的标示符(可自定义名称)
vrrp_instance VI_1 {
# 当前节点的身份标识:用来决定主从(MASTER为主机,BACKUP为从机)
state BACKUP
# 绑定虚拟IP的网络接口,根据自己的机器的网卡配置
interface ens33
# 虚拟路由的ID号,主从两个节点设置必须一样
virtual_router_id 240
# 填写本机IP
mcast_src_ip 192.168.191.128
# 节点权重优先级,主节点要比从节点优先级高
priority 90
# 优先级高的设置nopreempt,解决异常恢复后再次抢占造成的脑裂问题
nopreempt
# 组播信息发送间隔,两个节点设置必须一样,默认1s(类似于心跳检测)
advert_int 1
authentication {
auth_type PASS
auth_pass jiege
}
# 将track_script块加入instance配置块
track_script {
# 执行Nginx监控的脚本
check_nginx_pid_restart
}virtual_ipaddress {
# 虚拟IP(VIP),也可扩展,可配置多个。
192.168.191.240
}
}
(13)启动主备服务器的nginx和keepalive
(14)测试
我们在物理机浏览器输入虚拟ip,我们访问的主服务器,我们多刷新几次,依旧是,当我们关闭主nginx,刷新页面就会跳转到我们的备服务器。