nginx负载均衡高可用
1.高可用
- 一般是指2台服务器启动着相同的业务系统,如果有一台服务器死机了,另外一台服务器能快速的接管,对于用户是无感知的。
复制代码 2.高可用的软件
- 硬件
- F5
- 软件
- keepalived
- heartbeat
- MySQL指定的高可用软件
- MGR
- MHA
- Redis指定的高可用软件
- Redis-Cluster
- Sentinel
复制代码 3.Keepalived概述
- keepalived是一个高可用软件,可以和任何应用配合使用
- Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
复制代码 4.keepalived实现原理
- keepalived软件是基于VRRP协议实现,VRRP(虚拟路由冗余协议)主要用于解决单点故障
复制代码
5.keepalived核心概念
- 1.选举:
- 通过选举投票,决定谁是主节点和备节点
- 2.抢占式、非抢占式:
- 当Master故障,Backup自动接管,那么Master恢复后夺权就是抢占式,没有夺权就是非抢占式
- 3.脑裂:
- 当两台服务器都认为自己是master,那么就会出现这种现象
复制代码 脑裂的原因
- 1.服务器网线松动等网络故障
- 2.服务器硬件故障发生损坏现象而崩溃
- 3.主节点和备节点都开启了防火墙
- ## 解决脑裂故障的脚本
- #!/bin/sh
- vip=10.0.0.3
- lb01_ip=10.0.0.5
- while true;do
- ping -c 2 $lb01_ip &>/dev/null
- if [ $? -eq 0 -a `ip add|grep "$vip"|wc -l` -eq 1 ];then
- echo "ha is split brain.warning."
- else
- echo "ha is ok"
- fi
- sleep 5
- done
复制代码 6.keepalived安装配置
环境准备
主机名WanIPLanIP角色应用lb0110.0.0.5172.16.1.5Master keepalived主节点keepalivedlb0210.0.0.6172.16.1.6Backup keepalived备节点keepalived部署keepalived(lb01 lb02)
- 1.安装keepalived
- yum install -y keepalived
- 2.修改master配置文件
- [root@lb01 ~]# cat /etc/keepalived/keepalived.conf
- global_defs { #全局配置
- router_id lb01 #标识身份->名称
- }
- vrrp_instance VI_1 {
- state MASTER #标识角色状态
- interface eth0 #网卡绑定接口
- virtual_router_id 50 #虚拟路由id
- priority 150 #优先级
- advert_int 1 #监测间隔时间
- authentication { #认证
- auth_type PASS #认证方式
- auth_pass 1111 #认证密码
- }
- virtual_ipaddress {
- 10.0.0.3 #虚拟的VIP地址
- }
- }
- [root@lb02 ~]# cat /etc/keepalived/keepalived.conf
- global_defs { #全局配置
- router_id lb02 #标识身份->名称
- }
- vrrp_instance VI_1 {
- state BACKUP #标识角色状态
- interface eth0 #网卡绑定接口
- virtual_router_id 50 #虚拟路由id
- priority 100 #优先级
- advert_int 1 #监测间隔时间
- authentication { #认证
- auth_type PASS #认证方式
- auth_pass 1111 #认证密码
- }
- virtual_ipaddress {
- 10.0.0.3 #虚拟的VIP地址
- }
- }
复制代码 keepalived配置区别Master节点配置Backup节点配置router_idlb01lb02stateMASTERBACKUPpriority150100- 3.启动master和backup上的keepalived
- systemctl start keepalived.service
- 4.查看master虚拟ip地址
复制代码- 5.停掉master上的keepalived查看虚拟ip是否到backup服务器上
- [root@lb01 ~]# systemctl stop keepalived.service
复制代码
非抢占式配置
- 1、两个节点的state都必须配置为BACKUP
- 2、两个节点都必须加上配置 nopreempt
- 3、其中一个节点的优先级必须要高于另外一个节点的优先级。
- # keepalived配置
- [root@lb01 ~]# vim /etc/keepalived/keepalived.conf
- global_defs { #全局配置
- router_id lb01 #标识身份->名称
- }
- vrrp_instance VI_1 {
- state BACKUP #标识角色状态
- interface eth0 #网卡绑定接口
- nopreempt
- virtual_router_id 50 #虚拟路由id
- priority 150 #优先级
- advert_int 1 #监测间隔时间
- authentication { #认证
- auth_type PASS #认证方式
- auth_pass 1111 #认证密码
- }
- virtual_ipaddress {
- 10.0.0.3 #虚拟的VIP地址
- }
- }
- [root@lb02 ~]# vim /etc/keepalived/keepalived.conf
- global_defs { #全局配置
- router_id lb02 #标识身份->名称
- }
- vrrp_instance VI_1 {
- state BACKUP #标识角色状态
- interface eth0 #网卡绑定接口
- nopreempt
- virtual_router_id 50 #虚拟路由id
- priority 150 #优先级
- advert_int 1 #监测间隔时间
- authentication { #认证
- auth_type PASS #认证方式
- auth_pass 1111 #认证密码
- }
- virtual_ipaddress {
- 10.0.0.3 #虚拟的VIP地址
- }
- }
复制代码 keepalived结合nginx做高可用
主机名WanIPLanIP角色应用lb0110.0.0.5172.16.1.5Master keepalived主节点、nginx负载均衡keepalived、nginxlb0210.0.0.6172.16.1.6Backup keepalived备节点、nginx负载均衡keepalived、nginxweb0110.0.0.7172.16.1.7web网站nginx、phpweb0210.0.0.8172.16.1.8web网站nginx、php关联nginx
- 1.编写脚本
- nginx_count=$(ps -ef|grep [n]ginx|wc -l)
- #1.判断Nginx是否存活,如果不存活则尝试启动Nginx
- if [ $nginx_count -eq 0 ];then
- systemctl start nginx
- sleep 3
- #2.等待3秒后再次获取一次Nginx状态
- nginx_count=$(ps -ef|grep [n]ginx|wc -l)
- #3.再次进行判断, 如Nginx还不存活则停止Keepalived,让地址进行漂移,并退出脚本
- if [ $nginx_count -eq 0 ];then
- systemctl stop keepalived
- fi
- fi
- 简化脚本
- [root@lb01 ~]# vim check_web.sh
- # /bin/sh
- nginx_count=$(ps -ef |grep [n]ginx}|wc -l)
- if [ $nginx_count -eq 0 ];then
- systemctl stop keepalived
- fi
- 2.配置两台负载均衡
- [root@lb01 ~]# vim /etc/nginx/conf.d/wordpress.jl.com.conf
- upstream blog.jl.com{
- server 172.16.1.7;
- server 172.16.1.8;
- }
- server {
- listen 80;
- server_name wordpress.jl.com;
- location / {
- proxy_pass http://blog.jl.com;
- include proxy_params;
- }
- }
- [root@lb02 ~]# vim /etc/nginx/conf.d/wordpress.jl.com.conf
- upstream blog.jl.com{
- server 172.16.1.7;
- server 172.16.1.8;
- }
- server {
- listen 80;
- server_name wordpress.jl.com;
- location / {
- proxy_pass http://blog.jl.com;
- include proxy_params;
- }
- }
复制代码 keepalived关联nginx
- 1.修改keepalived配置文件
- [root@lb01 ~]# vim /etc/keepalived/keepalived.conf
- global_defs { #全局配置
- router_id lb01 #标识身份->名称
- }
- vrrp_script check_web {
- script "/root/check_web.sh"
- interval 5
- }
- vrrp_instance VI_1 {
- state BACKUP #标识角色状态
- interface eth0 #网卡绑定接口
- virtual_router_id 50 #虚拟路由id
- priority 150 #优先级
- advert_int 1 #监测间隔时间
- authentication { #认证
- auth_type PASS #认证方式
- auth_pass 1111 #认证密码
- }
- virtual_ipaddress {
- 10.0.0.3 #虚拟的VIP地址
- }
- track_script {
- check_web
- }
- }
- 2.给脚本添加执行权限
- chmod +x check_web
- 3.将域名解析到vip上
- 10.0.0.3 wordpress.jl.com
- 4.浏览器访问网站
复制代码- 5.停掉lb01的nginx服务
- systemctl stop nginx
- 6.继续访问网站
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |