Keepalived是为Nginx集群提供高可用的解决方案,传统的Nginx集群搭建一台Nginx服务器和多个web服务器(tomcat,jboss……),单台的Nginx假如出现单点故障,整个集群就容易瘫痪,无法提供服务
一,传统Nginx+Tomcat集群搭建
使用Nginx和3个Tomcat服务器组成集群
我只准备两台服务器192.168.68.133和192.168.68.153,192.168.68.133安装nginx,192.168.68.153安装Tomcat,我使用不同的端口号启动3台tomcat
192.168.68.153安装Tomcat和区别端口启动3台不进行描述
nginx配置:
http{ upstream wql{ ip_hash; server 192.168.68.153:8080; server 192.168.68.153:8081; server 192.168.68.153:8082; } server{ listen 9999; server_name localhost; location /{ proxy_pass http://wql }}}
二,VRRP协议
Keepalived软件是由C语言编写的,最初是专门为LVS负载均衡设计的,Keepalived软件主要是基于VRRP协议实现高可用的
VRRP(Virtual Route Redundancy Protocol)协议,译为虚拟路由冗余协议,VRRP协议将两台或者多台路由设备虚拟成一个设置,对外提供虚拟的虚拟的路由器IP,而在路由器内部,如果实际拥有这个对外IP的路由器工作正常就是为MASTER,MASTER实现针对虚拟路由器IP的各种网络功能,其他设备不拥有该虚拟IP则为BACKUP,BACKUP负责接收MASTER的VRRP状态通告信息,但不具备对外的网络功能,当MASTER失效后BACKUP将接管原来的MASTER,负责对外提供网络服务
VRRP的重要概念(虚拟路由IP):虚拟路由IP解决了使用多台Nginx提供高可用服务时,多台Nginx监听端口冲突,请求处理不一样,编码混乱的问题,通过从多台nginx抽取一个虚拟IP地址作为服务访问地址,运行只有一台nginx提供访问,当出现有单点故障服务有备用机顶替
VRRP协议的两个子协议:
1,选择协议:VRRP可以把虚拟路由器的责任动态分配到局域网上的真实VRRP路由器的其中一台,其中的虚拟路由即virtual路由群主创建一个不真实存在的路由,这个虚拟路由也是有对应的IP地址,而且VRRP路由1和VRRP路由2之前会有竞争选择,通过竞争选择来产生MASTER和BACKUP
2,路由容错协议:MASTER路由和BACKUP路由之间会有一个心跳检测,MASTER会定时告知BACKUP自己的状态,如果在指定时间内,BACKUP没有接收到通知内容,BACKUP就会取代MASTER,
MASTER的特权:虚拟路由和后端服务器都是通过MASTER进行数据传递交互的,而备份降低则会直接丢弃这些请求和数据,不做处理,只是去监听MASTER的状态
VRRP协议的两个重要角色:
- MASTER:提供实际的网络服务
- BACKUP:相当于备用机,MASTER正常运行时,它不负责任何网络请求,当MASTER挂了它将接替MASTER
注:判断MASTER是否存活,主要提供心跳机制,MASTER运行会隔一段时间发生一个信息段给BACKUP证明自己存活,当超时未发送说明MASTER宕机(很多分布式高可用框架都采用这种机制)
三,Keepalived的安装和配置
一,Keepalived的安装
① 从官网下载Keepalived(地址:https://keepalived.org/)
下载版本自选,我下载keepalived-2.0.20.tar.gz
② 将源码包上传到服务器并解压
上传方式:
- rz命令
- XFTP文件传输客户端
- winscp传输软件
#解压 tar -zxvf keepalived-2.0.20.tar.gz
③ 对文件进行配置
#进入解压后的keepalived源码目录找到configure cd /home/keepalived-2.0.20 #配置命令(sysconf是指定系统配置文件目录,指定make安装后启动文件保存的位置) ./configure --sysconf=/etc --prefix=/usr/local
④ 对keepalived进行编译安装
make && make install
安装完成后:
- 系统配置文件:/etc/keepalived/keepalived.conf
- 启动文件:/usr/local/sbin/keepalived
二,Keepalived的配置文件
keepalived的配置文件主要分为三个部分:
- 第一部分:global全局配置
- 第二部分:vrrp相关配置
- 第三部分:LVS相关配置
注:主要使用keepalived实现nginx高可以部署,没有用到LVS,所以重点侧重配置文件前两部分
一,global全局块配置
global_defs { #通知邮件,当keepalived发生切换时需要发送email给具体的邮箱 notification_email { #发送的邮箱地址 acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } #设置发件人的邮箱信息 notification_email_from Alexandre.Cassen@firewall.loc #指定smpt服务地址 smtp_server 192.168.200.1 #指定smpt服务连接超时时间 smtp_connect_timeout 30 #运行keepalived服务器的一个标识,可以用做发送邮件的主题信息 router_id LVS_DEVEL #VRRP配置 #默认是不跳过检查,检查收到的VRRP通告中的所有地址可能会比较耗时,设置此命令的意思是,如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查) vrrp_skip_check_adv_addr #严格遵循VRRP协议 vrrp_strict #在一个接口发送的两个免费ARP之间延迟,可以精确到毫秒级,默认为0 vrrp_garp_interval 0 #在一个网卡上每组消息之间的延迟时间,默认为0 vrrp_gna_interval 0 }
二,VRRP相关配置
vrrp_instance VI_1 { #设置当前的keepalived是MASTER还是BACKUP state MASTER #主要用于VRRP实例绑定的接口,原来发送VRRP数据包,需要填写当前的网卡名称(ens33,eth0) interface eth0 #设置虚拟的路由ID,0-255之间 virtual_router_id 51 #指定优先级,多个VRRP路由节点,都会有一个竞争关系,谁的优先级越高,谁就是master priority 100 #发送心跳机制的时间间隔 advert_int 1 #认证相关 authentication { #认证类型,使用PASS(简单的密码认证) auth_type PASS #认证的密码 auth_pass 1111 } #虚拟主机,让用户实际原来访问的,下面可以提供多个虚拟主机IP virtual_ipaddress { 192.168.200.16 192.168.200.17 192.168.200.18 } }
四,keepalived案例
案例要求:使用两台服务器192.168.68.133和192.168.68.153它们分别安装keepalived和nginx,keepalived提供虚拟主机ip192.168.68.199,其中192.168.68.133为MASTER,192.168.68.153为BACKUP,用户访问192.168.68.199,由MASTER提供服务,但MASTER宕机后,BACKUP接替MASETRE提供服务
一,192.168.68.133配置
keepalived.conf的配置:
global_defs { notification_email { #邮箱可以随便添 fq@qq.com } #邮箱可以随便添 notification_email_from wql@qq.com #必须填写同一个网段 smtp_server 192.168.68.1 smtp_connect_timeout 30 #名称改为keepalived1 router_id keepalived1 #使用默认 vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { #标记为MASTER state MASTER #填写自己的网卡,我的为ens33,有些为eth0需要根据自己的linux虚拟机而定 interface ens33 #两台keepalived用同一个id virtual_router_id 51 #优先级,MASTER要比BACKUP的数字大 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { #虚拟的主机IP,也可以填写多个 192.168.68.199 } }
nginx的配置(主要是为了有直接可演示效果来配置的):
server { listen 8888; server_name location; location / { default_type text/html; return 200 "<h1>真实主机IP:192.168.68.133<br>虚拟ip:192.168.68.199<h1>"; }}
一,192.168.68.153配置
keepalived.conf的配置:
global_defs { notification_email { fq@qq.com } notification_email_from wql@qq.com smtp_server 192.168.68.1 smtp_connect_timeout 30 router_id keepalived2 vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.68.199} }
nginx的配置(主要是为了有直接可演示效果来配置的):
server {
listen 8888; server_name localhost; location /{ default_type text/html; return 200 "<h1>真实主机IP:192.168.68.153<br>虚拟IP:192.168.68.199<h1>"; } }
三,启动keepalived测试虚拟IP是否绑定
一,启动前查看两台服务器的IP
命令:ip a
192.168.68.133:
192.168.68.153:
一,启动后查看两台服务器的IP
命令:ip a
192.168.68.133:
192.168.68.153:
四,启动keepalived测试虚拟IP是否绑定
浏览器访问虚拟IP:192.168.68.199:8888
把192.168.68.133的keepalived进程杀死后,再进行访问虚拟IP:
Comments | 1 条评论
博主 匿名
Thank You
Warning: Undefined variable $return_smiles in /www/wwwroot/wql_luoqin_ltd/wp-content/themes/Sakura/functions.php on line 1109