Keepalived实现Nginx负载均衡高可用的示例代码_nginx

来源:脚本之家  责任编辑:小易  

keepalived不是一个负载均衡软件 主要作用是对服务器状态检测和故障隔离。对于在keepalived中配置lvs模块,我理解是对补充lvs的配置,keepalived属于lvs的扩展项目www.zgxue.com防采集请勿采集本网。

第一章:keepalived介绍

可实现整个系统的不间断运行,从而保证整个系统对外服务的正常,为企业24小时×365天的关键业务应用提供了强大的保障。Veritas Storage Foundation,它提供了业界领先的异构存储管理和高可用性的软件解决

VRRP协议

原理:keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的

目的就是为了解决静态路由单点故障问题的

谈谈如何学习Linux 1、假如你从来接触过Linux的话,首先要做的就找一本指导书来学习 2、现在公认的Linux的入门书籍是“鸟哥的私房菜”,讲的很全面 鸟哥的私房菜一共分为两部,一部是基础篇,一

第二章: keepalived工作原理

9、企业级?可用集群-?可用集群原理,实现以keepalived为核?的?可用集群,以及主从高可用、双主 10、运维监控zabbix-企业级监控体系以及zabbix流?开源监控系统的功用及架构 11、云计算运维自动化-

2.1 作为系统网络服务的高可用功能(failover)

一般培训机构Linux学习时长在4至6个月左右,我校是5个月,包括Linux基础、综合架构、shell编程、数据库、云计算以及网络安全等内容

keepalived高可用功能实现的基本原理为:

两台主机同时安装好keepalived软件并启动服务,开始正常工作时

角色为Master的主机获得所有资源并对用户提供服务

角色为Backup的主机作为Master主机的热备;

当角色为Master的主机失效或出现故障时

角色为Backup的主机将自动接管Master主机的所有工作,包括接管VIP资源及相应资源服务

而当角色为Master的主机故障修复后,又会自动接管回他原来处理的工作

角色为Backup的主机则同时释放Master主机失效时他接管的工作

此时,两台主机将恢复到启动时各自的原始角色及工作状态

2.2 什么是VRRP

VRRP,全称Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议

 VRRP的出现就是为了解决静态路由的单点故障问题

 VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的.

VRRP通过竞选机制来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(Multicast)包(默认的多播地址224.0.0.18)形式发送的

 虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址,:00-00-5E-00-01-{VRID}.

 所以,在一个虚拟路由器中,不管谁是Master,对外都是相同的MAC和IP(称之为VIP).

 客户端主机并不需要因Master的改变修改自己的路由配置.对它们来说,这种切换是透明的.

在一组虚拟路由器中,只有作为Master的VRRP路由器会一直发送VRRP广播包,此时Backup不会抢占Master

 当Master不可用时,Backup就收不到来自Master的广播包了,此时多台Backup中优先级最高的路由器会抢占为Master.

 这种抢占是非常快速的(可能只有1秒甚至更少),以保证服务的连续性,处于安全性考虑,VRRP数据包使用了加密协议进行了加密.

2.3 面试的时候怎么说

解答:

keepalived高可用对之间是通过VRRP通信的,因此,我从VRRP开始给您讲起.

1)VRRP,全称Virtual Router Reduancy Protocol,中文名为虚拟路由器冗余协议,VRRP的出现是为了解决静态路由的单点故障,

2)VRRP是通过一种竞选协议来将路由任务交给某台VRRP路由器的,

3)VRRP用IP多播的方式,(默认多播地址(224.0.0.18))实现高可用对之间通信.

4)工作时主节点发包,备节点接包,当备节点接收不到主节点发的包的时候,就启动接管程序接管主节点的资源.备节点可以有多个,通过优先级竞选,但一般keepalived系统运维工作中都是一对.

5)VRRP使用了加密协议加密数据,但keepalived官方目前还是推荐用明文的方式配置认证类型和密码.

介绍完了VRRP,接下来我在介绍一下keepalived服务的工作原理;

keepalived高可用对之间是通过VRRP进行通信的,VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务.

在keepalived服务对之间,只有作为主的服务器会一直发送VRRP广播包,告诉备他还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性,接管速度最快可以小于一秒

第三章: VRRP协议

VRRP通过竞选机制来实现虚拟路由器的功能

所有的协议报文都是通过IP多播(Multicast)包

默认的多播地址224.0.0.18

VIP前提条件:

1.虚拟公网IP必须是真实可用的

2.虚拟公网IP不能重复

3.组播地址必须是可以通讯的

第四章:keepalived安装配置

1.安装keepalived

yum install keepalived -y

2.配置文件解释

global_defs { router_id lb01 #设置路由ID,每个主机不一样} vrrp_instance VI_1 { #设置VRRP组名,同一组组名相同 state MASTER #设置角色状态,分为MASTER BACKUP interface eth0 #VIP绑定的网卡 virtual_router_id 50 #虚拟路由id,同一组一样 priority 150 #权重,权重越高,优先级越高 advert_int 1 #发送组播间隔 authentication { #设置验证,密码为明文 auth_type PASS auth_pass 1111 } virtual_ipaddress { #设定的虚拟IP,这个虚拟IP必须是存在且合法且没有被使用的。 10.0.0.3 }}

3.lb01配置

[root@lb01 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb01}vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 50 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 }}

4.lb02配置

[root@lb02 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb02}vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 50 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 }}

5.启动

systemctl start keepalived

6.测试

关掉任意一台,观察VIP是否会漂移

恢复MASTER观察BACKUP的VIP是否会消失

第五章:脑裂现象

1.安装抓包工具

yum install tcpdump -y

2.lb02抓包查看

tcpdump -nn -i any host 224.0.0.18

3.lb02新开一个终端,然后开启防火墙

systemctl start firewalld.service

4.lb02观察抓包现象

观察是否两边都有VIP

5.添加放行规则

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPTfirewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface eth1 --destination 224.0.0.18 --protocol vrrp -j ACCEPTsystemctl reload firewalld

6.lb02观察抓包现象

观察是否两边都有VIP

第六章:keepalived双主实验

1.lb01配置文件

[root@lb01 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb01}vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 50 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 }}vrrp_instance VI_2 { state BACKUP interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 2222 } virtual_ipaddress { 10.0.0.4 }}

2.lb02配置文件

[root@lb02 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb02}vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 50 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 }}vrrp_instance VI_2 { state MASTER interface eth0 virtual_router_id 51 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 2222 } virtual_ipaddress { 10.0.0.4 }}

3.重启keepalived并观察现象

systemctl restart keepalived

第七章:keepalived结合nginx反向代理负载均衡

lb服务器的Nginx配置:

注意!两台lb服务器的Nginx配置一模一样

1.备份原有配置

mkdir /backupcd /etc/nginx/conf.dmv * /backup

2.编写Nginx配置文件

[root@lb01 /etc/nginx/conf.d]# cat proxy.conf upstream web_pools { server 172.16.1.7; server 172.16.1.8;}server { listen 80; server_name (www|bbs).mysun.com ; location / { proxy_pass http://web_pools; include proxy_params; }}

3.测试并重启nginx

nginx -tsystemctl restart nginx

lb服务器的keepalived配置:

1.lb01的keepalived配置

[root@lb01 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb01}vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 50 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 }}

2.lb02的keepalived配置

[root@lb02 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb02}vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 50 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 }}

web服务器配置:

注意!两台web服务器配置一模一样

1.nginx配置

[root@web01 ~]# cat /etc/nginx/conf.d/www.conf server { listen 80; server_name www.mysun.com; location / { root /code; index www.html; }}

2.写入测试文件

echo "$(hostname)" >/code/index.html

第八章: 防裂脑脚本

1.问题现象:

1.nginx挂了,但是keep还活着

2.两边都有VIP

2.思路:

解决nginx挂了问题:

1.编写一个脚本 启动nginx 如果启动2次都失败了,停掉自己的keepalived

2.keepalived定时去调用这个脚本

3.实现:

1.命令如何实现

systemctl start nginx

2.检查nginx进程

[root@lb01 ~]# ps -ef|grep nginx|grep -v "grep"root 1210 1 0 11:21 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.confnginx 1211 1210 0 11:21 ? 00:00:00 nginx: worker process[root@lb01 ~]# ps -ef|grep nginx|grep -v "grep"|wc -l2[root@lb01 ~]# ps -ef|grep nginx|grep -v "grep"|wc -l0

脚本内容:

[root@lb01 ~]# cat check_web.sh !/bin/bashnginx_status=$(ps -C nginx --no-header|wc -l)if [[ ${nginx_status} == 0 ]]then systemctl start nginx &> /dev/null sleep 1 nginx_status=$(ps -C nginx --no-header|wc -l) if [[ ${nginx_status} == 0 ]] then systemctl stop keepalived fifi

keepalived调用脚本:

[root@lb01 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb01}vrrp_script check_web { script "/server/scripts/check_web.sh" interval 5 weight 50}vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 50 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 } track_script { check_web }}

4.第二个问题:脑裂问题

两边都有VIP

现象:

2边都有VIP

2边Nginx都活着

对面的MASTER的Nginx还活着

curl -I -s -w "%{http_code}\n" -o /dev/null 10.0.0.5

但是我又有了VIP

ip a |grep "10.0.0.3"|wc -l

我就把自己干掉

systemctl stop nginx systemctl stop keepalived

脚本内容:

[root@lb02 /server/scripts]# cat check_vip.sh #!/bin/bashmaster_status=$(curl -I -s -w "%{http_code}\n" -o /dev/null 10.0.0.5)my_vip=$(ip a |grep "10.0.0.3"|wc -l)if [ ${master_status} == 200 -a ${my_vip} == 1 ]then systemctl stop nginx systemctl stop keepalived fi

keepalived配置:

[root@lb02 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb02}vrrp_script check_web { script "/server/scripts/check_web.sh" interval 5 weight 50}vrrp_script check_vip { script "/server/scripts/check_vip.sh" interval 5 weight 50}vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 50 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 } track_script { check_web check_vip }}

到此这篇关于Keepalived实现Nginx负载均衡高可用的示例代码的文章就介绍到这了,更多相关Keepalived Nginx负载均衡高可用内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

汗,你先看看nginx,lvs,keepalived都干嘛的。集群不是把机器连一块就算集群了内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • nginx 作为反向代理实现负载均衡的例子
  • nginx负载均衡的4种方案配置实例
  • windows安装nginx部署步骤图解(反向代理与负载均衡)
  • 详解nginx服务器之负载均衡策略(6种)
  • nginx做nodejs应用负载均衡配置实例
  • nginx geoip模块实现地区性负载均衡
  • nginx 负载均衡 多站点共享session
  • nginx基于tcp做负载均衡的方法
  • 详解nginx中的geo模块与利用其配置负载均衡的示例
  • nginx stub_status 监控模块的功能实现
  • 一次nginx 504 gateway time-out错误排查、解决记录
  • nginx中运行php框架laravel的配置文件分享
  • nginx反向代理配置去除前缀
  • nginx fastcgi错误primary script unknown解决办法
  • nginx服务器实现数据静态压缩的方法
  • linux下nginx负载均衡多个tomcat配置的方法步骤
  • nginx 虚拟主机设置实例(多网站配置)
  • nginx 启动、停止、重启、升级操作命令收集
  • ubuntu 下的nginx服务器配置详解
  • 关于linux集群,nginx,lvs,keepalived这三个软件都可以实现负载均衡,如何选择?
  • lvs 和 keepalived的有什么区别
  • 学习Linux难吗
  • lvs 和 keepalived的有什么区别谢谢了,大神帮忙啊
  • ha软件,谁有用,帮忙推荐几个?
  • keepalived工作原理是什么?怎么保证高可用
  • 新手如何自学linux
  • 系统运维工程师是干什么的?
  • 学习linux要多久
  • lvs 和 keepalived的有什么区别
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全星外虚拟主机华众虚拟主机linuxwin服务器ftp服务器dns服务器tomcat nginxzabbix云和虚拟化服务器其它首页服务器nginxnginx 作为反向代理实现负载均衡的例子nginx负载均衡的4种方案配置实例windows安装nginx部署步骤图解(反向代理与负载均衡)详解nginx服务器之负载均衡策略(6种)nginx做nodejs应用负载均衡配置实例nginx geoip模块实现地区性负载均衡nginx 负载均衡 多站点共享sessionnginx基于tcp做负载均衡的方法详解nginx中的geo模块与利用其配置负载均衡的示例nginx stub_status 监控模块的功能实现一次nginx 504 gateway time-out错误排查、解决记录nginx中运行php框架laravel的配置文件分享nginx反向代理配置去除前缀nginx fastcgi错误primary script unknown解决办法nginx服务器实现数据静态压缩的方法linux下nginx负载均衡多个tomcat配置的方法步骤nginx 虚拟主机设置实例(多网站配置)nginx 启动、停止、重启、升级操作命令收集ubuntu 下的nginx服务器配置详解nginx提示:500 internal servernginx 多站点配置方法集合权限问题导致nginx 403 forbiddenginx fastcgi错误primary scripnginx服务器的反向代理proxy_pasnginx 403 forbidden的解决办法nginx伪静态配置和常用rewrite伪nginx下301重定向域名的方法小结详解nginx服务器中配置超时时间的windows下nginx+php5的安装与配置nginx隐藏服务器端各类信息的方法详解nginx中http的keepalive相关配置18个运维必知的nginx代理缓存配置技巧(你nginx在mac上的安装、启动、重启和关闭wordpress与drupal的nginx配置rewrite重写nginx下支持thinkphp url rewrite的配置示nginx 出现 403 forbidden 最终解决方法laravel的nginx重写规则实例代码nginx+rsync+inotify实现负载均衡配置方法详解用elk来分析nginx服务器日志的方法
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved