苏州外贸公司网站建设流程,网站跨平台,外贸行业网站推广,成都装修公司推荐目录
实现负载均衡
实现高可用 实现负载均衡
Nginx的几种负载均衡算法#xff1a; 1.轮询#xff08;默认#xff09; 每个请求按照时间顺序逐一分配到下游的服务节点#xff0c;如果其中某一节点故障#xff0c;nginx 会自动剔除故障系统使用户使用不受影响。 2.权重…目录
实现负载均衡
实现高可用 实现负载均衡
Nginx的几种负载均衡算法 1.轮询默认 每个请求按照时间顺序逐一分配到下游的服务节点如果其中某一节点故障nginx 会自动剔除故障系统使用户使用不受影响。 2.权重weight 在配置文件中对下游的服务节点指定权重值 weight, weight 值越大则被分配的评率越高一般这种负载均衡用于节点的配置情况不一样有的可能配置高有的配置低。 3.ip_hash 对每个请求针对 ip 进行 hash 然后分配到后台节点这样一来同一 ip 会被固定分配到下游固定服务上。它能够暂时的解决集群环境中容器之间 session 共享的问题(因为session每次只能和一个人一对一的记录但是如果现在需要负载均衡就出现了一种一对多的情况可以使用ip_hash实现一对一)但是不是解决的根本之道只是权宜之策我们试想如果访问的好好的家里的路由器被重启了或者运营商分配给你的 ip 地址改变了那么你再次访问的时候新的 ip 就可能被分配到新的服务上之前的 session 也就失效了。 4.least_conn (最少连接调度算法) 最少连接调度算法对下游服务中连接情况优先选择连接数最少的服务分配。 5.least_time (最小响应时间) 最小响应时间, 计算节点平均响应时间然后取响应最快的那个分配更高权重。
1首先我们一共需要三个主机
后端的两个主机用于apache服务
window10192.168.159.165kail192.168.159.151
负载均衡设备nginx
centos1192.168.159.200
2配置window10
开启apache服务
新建一个网页并且编辑内容
新建的网页www/index.html
内容
Hello My Ip add 192.168.159.165
访问结果 2配置kail
开启apache服务
新建一个网页并且编辑内容
网页地址/var/html/index.html
网页内容
Hello My Ip add 192.168.159.165
访问结果 3nginx设备配置
进入 /etc/nginx/nginx.conf
vim /etc/nginx/nginx.conf
配置负载均衡
upstream nginx_boot{
# 30s内检查心跳发送两次包未回复就代表该机器宕机请求分发权重比为1:2
server 192.168.159.151 weight100 max_fails2 fail_timeout30s;
server 192.168.159.165 weight100 max_fails2 fail_timeout30s;
# 这里的IP请配置成你WEB服务所在的机器IP
}
server {location / {root html; # 配置一下index的地址最后加上index.ftl。 index index.html index.htm index.jsp index.ftl;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 请求交给名为nginx_boot的upstream上 proxy_pass http://nginx_boot;}location ~ .*.(gif|jpg|jpeg|bmp|png|ico|txt|js|css){root /usr/local/nginx/html/static;expires 7d;}
}现在可以尝试访问
第一次 第二次 不断地尝试可以发现始终是访问一次165然后再一次151成功的实现了负载均衡并且权重和我们设置的也是一样的当然也可以手动的修改权重
也可以将负载均衡的方式修改为轮询或者上面介绍的其他方式。
实现高可用
线上如果采用单个节点的方式部署Nginx难免会出现天灾人祸比如系统异常、程序宕机、服务器断电、机房爆炸、地球毁灭….哈哈哈夸张了。但实际生产环境中确实存在隐患问题由于Nginx作为整个系统的网关层接入外部流量所以一旦Nginx宕机最终就会导致整个系统不可用这无疑对于用户的体验感是极差的因此也得保障Nginx高可用的特性。 接下来则会通过keepalived的VIP机制实现Nginx的高可用。 VIP并不是只会员的意思而是指Virtual IP即虚拟IP。 keepalived在之前单体架构开发时是一个用的较为频繁的高可用技术比如MySQL、Redis、MQ、Proxy、Tomcat等各处都会通过keepalived提供的VIP机制实现单节点应用的高可用。
上面那个实验完成了但是现在实现了负载均衡但是并没有实现高可用问题
需要实现高可用那就需要增加一台nginx服务器
这里使用192.168.159.201当做另外一台nginx服务器
实现原理类似于VRRP 需要在200和201这两台设备上都安装keepalivenginx的环境 keepLive虚拟出一个VIP 浏览器通过访问这个VIP来实现高可用
这里以192.168.159.200这台设备为了下面是具体的过程
1首先配置keepalive
//获取软件包
wget https://www.keepalived.org/software/keepalived-2.2.4.tar.gz
//解压
tar -zxvf keepalived-2.2.4.tar.gz
//进入该目录中后进行预编译
./configure
//编译
make/make install
2添加配置文件
vi keepalived.conf
bal_defs { # 自带的邮件提醒服务建议用独立的监控或第三方SMTP也可选择配置邮件发送。notification_email { rootlocalhost } notification_email_from rootlocalhost smtp_server localhost smtp_connect_timeout 30 # 高可用集群主机身份标识(集群中主机身份标识名称不能重复建议配置成本机IP) router_id 192.168.159.200
} # 定时运行的脚本文件配置
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 MASTER # 绑定虚拟IP的网络接口根据自己的机器的网卡配置 interface ens33 # 虚拟路由的ID号主从两个节点设置必须一样 virtual_router_id 250 # 填写本机IP mcast_src_ip 192.168.159.200 # 节点权重优先级主节点要比从节点优先级高 priority 100 # 优先级高的设置nopreempt解决异常恢复后再次抢占造成的脑裂问题 nopreempt # 组播信息发送间隔两个节点设置必须一样默认1s类似于心跳检测 advert_int 1 authentication { auth_type PASS auth_pass 1111 } # 将track_script块加入instance配置块 track_script { # 执行Nginx监控的脚本 check_nginx_pid_restart } virtual_ipaddress { # 虚拟IP(VIP)也可扩展可配置多个。192.168.159.250 }
}
7编写脚本
vim check_nginx_pid_restart.sh
//脚本内容
#!/bin/sh
# 通过ps指令查询后台的nginx进程数并将其保存在变量nginx_number中
nginx_numberps -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为该脚本授权
chmod x check_nginx_pid_restart.sh
9将一些文件拷贝到/etc下
mkdir /etc/keepalived
cp keepalived.conf /etc/keepalived/
cd /root/keepalived/keepalived/etc/init.d
cp keepalived /etc/init.d/
cd ../sysconfig
cp keepalived /etc/sysconfig/
10修改配置文件
vim /etc/keepalived/keeplive.conf
//修改后
bal_defs { # 自带的邮件提醒服务建议用独立的监控或第三方SMTP也可选择配置邮件发送。notification_email { rootlocalhost } notification_email_from rootlocalhost smtp_server localhost smtp_connect_timeout 30 # 高可用集群主机身份标识(集群中主机身份标识名称不能重复建议配置成本机IP) router_id 192.168.159.200
} # 定时运行的脚本文件配置
vrrp_script check_nginx_pid_restart { # 之前编写的nginx重启脚本的所在位置 script /root//keepalived/keepalived/etc/keepalived/check_nginx_pid_restart.sh # 每间隔3秒执行一次 interval 3 # 如果脚本中的条件成立重启一次则权重-20 weight -20
} # 定义虚拟路由VI_1为虚拟路由的标示符可自定义名称
vrrp_instance VI_1 { # 当前节点的身份标识用来决定主从MASTER为主机BACKUP为从机 state MASTER # 绑定虚拟IP的网络接口根据自己的机器的网卡配置 interface ens33 # 虚拟路由的ID号主从两个节点设置必须一样 virtual_router_id 250 # 填写本机IP mcast_src_ip 192.168.159.200 # 节点权重优先级主节点要比从节点优先级高 priority 100 # 优先级高的设置nopreempt解决异常恢复后再次抢占造成的脑裂问题 nopreempt # 组播信息发送间隔两个节点设置必须一样默认1s类似于心跳检测 advert_int 1 authentication { auth_type PASS auth_pass 1111 } # 将track_script块加入instance配置块 track_script { # 执行Nginx监控的脚本 check_nginx_pid_restart } virtual_ipaddress { # 虚拟IP(VIP)也可扩展可配置多个。192.168.159.250 }
}
11设置开机自启
[rootcentos111 keepalived]# chkconfig keepalived on
[rootcentos111 keepalived]# systemctl daemon-reload
[rootcentos111 keepalived]# systemctl start keepalived.service
[rootcentos111 keepalived]# systemctl enable keepalived.service 12备服务器配置201--大致流程与200相同
这里就不详细演示了
注从上图中可以明显看见虚拟IP已经成功挂载但另外一台机器192.168.12.250并不会挂载这个虚拟IP只有当主机下线后作为从机的192.168.12.130才会上线接替VIP。 13测试
使用kail (192.168.159.151) ping 虚拟ip192.168.159.250、 可以看到成功的ping通了
现在尝试关闭192.168.159.200服务器
nmcli con down ens33
然后再打开该服务器
nmcli con up ens33
查看192.168.159.201服务器 可以发现192.168.159.250这个虚拟ip已经转到备服务器192.168.159.201这里了
到此Nginx的负载均衡和高可用实验都全部完成