在上一篇写给后端的Nginx初级入门教程:实战篇文章中咱们从实际的代码出发,比较粗略地讲解了Nginx配置文件的结构,以及经常使用的功能好比复杂均衡,反向代理,动静分离的简单配置,事情到这里就结束了吗,固然没有,就拿负载均衡为例,还记得咱们基础篇关于反向代理给的那张图吗?咱们将它作一个小小的修改,变成咱们的负载均衡图,以下图所示:linux
刚开始这么一看,也没发现什么问题啊,请求通过咱们的负载均衡服务器,经过不一样的策略分发到不一样的服务器上进行处理,就算一台服务器挂了,也会有其余的服务器继续顶上,这个逻辑简直满分有木有,妈妈不再用担忧巨大的请求把个人服务器累崩啦。nginx
等等,看似平静的湖面下面其实每每波涛汹涌,知识点呐,朋友们,面试可能要考的git
但是,,万一,,咱们负载均衡服务器挂了,,那不就完全GG了?github
卧槽,卧槽,卧槽,我怎么没有想到,那怎么办?面试
别慌,上有上策,下有对策,兵来将挡,水来土掩,为了防止这种被人掐脖子状况的发生,就有人提供了另一种思路,是什么呢? 其实很简单,你原来不是只有一个负载均衡服务器么,挂了玩不起,我弄两台负载均衡服务器不就得了,一台挂了,我继续用另一台不就行了吗,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,臭弟弟,没招了吧,因而上面的那张图就变成了这样:shell
当咱们向服务端发起请求的时候,用的地址并非咱们配置的两台Nginx服务器的IP地址,而是咱们设置的虚拟IP地址,而两台Nginx服务器的地址则称为咱们的工做IP,当好比5个请求(看我这没见过大场面的样子)来到咱们的主Nginx服务器,咱们主Nginx服务器一看来了这么多请求,因而。数据库
啊,好多请求,我死了。后端
而后,因为两台Nginx服务器都是设置的这一个虚拟IP,当主Nginx服务器挂了以后,当咱们再次访问的时候,实际上就是访问咱们的从Nginx服务器来作具体的负载均衡了,具体提供服务的IP地址也从主Nginx服务器的IP切换到了从Nginx服务器的Ip,整个IP切换的过程对于用户来讲是无感知的,其实有点相似于咱们常常说的主从数据库。centos
而后整个工做IP地址变化的过程,业界起了一个特cool的名字,叫IP漂移。浏览器
固然,这个虚拟IP也不是说句话就配置好的,一样也须要第三方软件的支持,在这里咱们使用的是keepalived这个软件来保证咱们的nginx实现高可用集群配置的。
keepalived是什么?
keepalived是集群管理中保证集群高可用的一个服务软件,其功能相似于heartbeat,主要用来防止单点故障。
你这不是脱裤子xx,画蛇添足吗,是,Nginx服务器挂了是没事了,但是你keepalived挂了怎么办?
卧,我早就想到可能会有人问这个问题,首先,咱们的keepalived只是简单的作一个负载均衡的做用,真实的请求仍是交给Nginx来负责的,因此,keepalived挂的几率要远远小于Nginx挂的几率,若是真挂了,那也真的没办法了。
说了这么多,具体怎么玩?好,那接下来,咱们不废话,直接看东西。
既然咱们说的是nginx高可用集群的配置,首先,有不少先决条件咱们得有吧,集群集群,你只有一台linux服务器搞不成啊,固然也不要求你准备几十台服务器出来,两台就好,毕竟成本高昂,固然对于朱一旦那样的劳力士男人这点服务器并不在话下,其次,最最最基本的,咱们两台服务器要把Nginx装好,具体Nginx怎么装的,能够去看我以前的实战篇,因此为了实现Nginx的高可用集群配置,咱们须要准备:
过程略,骗你的,按照咱们以前的习惯,这里只列举最简单的安装方法,打开咱们两台虚拟机的命令行终端,输入yum命令进行安装:
yum install keepalived –y
复制代码
装好了以后呢,就是说配置了,咱们keepalived的配置文件在哪呢?一般来讲在etc/keepalived/keepalived.conf这个文件下,咱们打开这个文件,因为内容实在太多,我这里就不一一列举了,可是这么多的配置并不都是须要我咱们去配置的,相反,咱们简单的配置主从Nginx服务器只须要其中的一小部分就能够了,因而呢,咱们对keepalived.conf这个文件进行精简,精简事后的内容以下,你们能够直接把这部份内容替换掉原来的配置文件:
! Configuration File for keepalived
global_defs {
##邮件相关的配置
notification_email {
###设置报警邮件地址,能够设置多个,每行一个。 需开启本机的sendmail服务
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
#keepalived在发生诸如切换操做时须要发送email通知地址,表示发送通知的邮件源地址是谁
notification_email_from Alexandre.Cassen@firewall.loc
#指定发送email的smtp服务器
smtp_server 192.168.17.129
#设置链接smtp server的超时时间
smtp_connect_timeout 30
##这个比较重要, router_id 用来标识咱们这台主机,故障发生时,发邮件时显示在邮件主题中的信息
router_id Master_Nginx
}
##检测脚本和权重参数
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" ##配置脚本的路径
interval 2 #(检测脚本执行的间隔)
weight 2 ##权重
}
vrrp_instance VI_1 {
#指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。注意这里的state指 定 instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,
#但这里指定的不算,仍是得要经过竞选经过优先级来肯定。若是这里设置为MASTER,但如若他的优先级不及另一 台,那么这台在发送通告时,会发送本身的优先级,另一台发现优先级不如本身的高,
#那么他会就回抢占为MASTER
state MASTER # 备份服务器上将 MASTER 改成 BACKUP
interface eth0 ###指定HA监测网络的接口。与本机 IP 地址所在的网络接口相同,可经过ip addr 查看
virtual_router_id 51 #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用惟一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
priority 100 # 主、备机取不一样的优先级,主机值较大,备份机值较小,通常来讲,主100 备 80
advert_int 1 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置验证类型和密码。主从必须同样
auth_type PASS #设置vrrp验证类型,主要有PASS和AH两种
auth_pass 123456 #设置vrrp验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通讯
}
virtual_ipaddress {
192.168.17.50 ## VRRP H 虚拟地址
}
}
复制代码
在咱们本例子中,配置文件主要分为三大块,分别是global_defs ,vrrp_script chk_http_port和
vrrp_instance VI_1,下面咱们一个一个来讲明它们具体在其中起到的做用:
全局配置,邮件通知等配置都在这里完成,比较重要的是这个router_id 这个选项,他用来标识咱们这台主机,
那本例中Master_Nginx 是怎么来的呢,在个人host文件中:
127.0.0.1 Master_Nginx
复制代码
固然Master_Nginx 是我本身取的,你们也能够根据本身的习惯给本身的主机起名字。
看到script ,这不是脚本的意思么,是的,这一块呢,就主要是们的keepalived脚本配置,以前不是说了吗,我得有个方法知道你Nginx服务器挂了啊,这样我才能去切换成备用的服务器,这个脚本就是干这个事儿的。具体每一行是什么意思,看注释:
##检测脚本和权重参数
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" ##配置脚本的路径
interval 2 #检测脚本执行的间隔,脚本每隔两秒执行一次,
weight 2 ##权重,这个权重是什么意思呢,就是当咱们主Nginx服务器挂了以后,就把该服务器的权重设置成2
}
复制代码
而nginx_check.sh中的内容,咱们会在配置文件的最后会贴出来。
第三块就比较重要了,这个主要用来咱们虚拟IP的配置,具体的解释呢,我已经放在了上文代码注释中,惟一须要额外补充的一点是什么呢,virtual_ipaddress 咱们的虚拟IP地址是能够有多个的,好比我有两个虚拟IP怎么写,直接换行就行:
virtual_ipaddress {
192.168.17.50 ## VRRP H 虚拟地址
192.168.17.51
}
复制代码
在/usr/local/src/ 路径下建立咱们的nginx_check.sh 脚本。
脚本内容大体意思是,当咱们发现咱们当前nginx服务器挂了的时候,就顺便把keepalived也干没了,由于咱们两台nginx服务器都同时装了keepalived,一台挂了,因此天然就切换到另一台备用服务器上了,这跟古代皇帝驾崩了,重任天然就落到太子身上是一个道理。
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
复制代码
弄完以后,记得这个脚本的路径要和配置文件中 script 值一致,别回来写好了keepalived找不着。
讲到这里,就已经把keepalived配置文件比较简单的部分讲完了,你们千万不要说看了个人教程以后觉得学到了所有精髓,其实没有,这只是一部分,后面更多详细的配置须要你们在往后的使用过程当中学习和了解。
其实,在上面讲解配置文件的过程当中,咱们已经不知不觉间把咱们主Nginx服务器的keepalived给悄咪咪配置好了,是吧,简单的配置其实没那么复杂的,下面就是配置咱们的备用Nginx服务器了。大致上步骤依然是同样的。
依旧是替换咱们的配置文件,不过须要你们主要的是,备用Nginx服务器和主Nginx服务器配置文件仍是有那么一点点须要改动的地方,在本例中主要须要将 state 从MASTER 改成 BACKUP ,优先级 priority 从100 改成 90 ,改过以后的内容以下:
vrrp_instance VI_1 {
state BACKUP # 备份服务器上将 MASTER 改成 BACKUP
interface eth0 ##网卡,能够从ipconfig这个命令查到
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 90 # 主、备机取不一样的优先级,主机值较大,备份机值较小,通常来讲,主100 备 80
advert_int 1 ##心跳,秒,每隔一秒发送一个心态确认咱们的Nginx服务器的存活状况
authentication { ##密码验证
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.17.50 ## VRRP H 虚拟地址
}
}
复制代码
脚本内容是不须要修改的,直接上传到指定目录就行。
配置过程当中须要注意的是,主服务器和备服务器之间的虚拟IP 地址也就是virtual_ipaddress 必定要是同一个。
#两台服务器分别启动nginx
nginx
#分别启动keepalived 服务
#centos 7
systemctl start keepalived.service
#centos 6+
service keepalived start
复制代码
在浏览器地址输入192.168.17.50 ,能够看到咱们熟悉的Nginx欢迎界面。
为了验证keepalived在其中确实是起了做用的,咱们手动把主Nginx服务器的keepalived和nginx服务关掉,而后再访问192.168.17.50
因而咱们发现依然是能够正常访问的,熟悉的Nginx界面又出如今了咱们眼中,可见咱们的备用Nginx服务器排上用场了。
到这里就大功告成啦。
本篇文章呢,咱们经过使用keepalived简单实现了Nginx服务的高可用集群的配置,虽然配置很简陋,可是对于初学者我想已经能够实现经过keepalive和Nginx来实现本身项目的高可用运行了。但这并不意味着这就是所有,keepalived同时支持双主模式,碍于本文的篇幅,这里就不额外补充了,可是掌握了主备模式的配置,对于双主模式的配置我想也是很容易学会的事情,最后,很是感谢阅读本篇文章的小伙伴们,可以帮助到大家对于我来讲是一件很是开心的事儿,若是有什么疑问或者批评欢迎留言到本篇文章下方,有时间的话我会一一回复。
韩数的学习笔记目前已经悉数开源至github,必定要点个star啊啊啊啊啊啊啊
万水千山老是情,给个star行不行
欢迎点赞,关注我,有你好果子吃(滑稽)