Nginx笔记(四)----Nginx+keepalived双主配置(双机双主热备)

567 阅读31分钟
原文链接: blog.csdn.net

简介

这种方案,使用两个VIP地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合于生产架构环境。

一、网络拓扑


四台虚拟机如下所示:


二、配置

软件安装配置和前篇文章是一样的,只不过keepalived的配置文件有些区别,将两台机器上的/etc/keepalived/keepalived.conf配置文件修改成如下:

Nginx-A:

[html] view plain copy print?
  1. [root@Nginx-A src]# vim /etc/keepalived/keepalived.conf     
  2. ! Configuration File for keepalived    
  3.     
  4. ############################ 全局配置 #############################    
  5.       
  6. global_defs {    
  7.     
  8.     # 定义管理员邮件地址,表示keepalived在发生诸如切换操作时需要发送email通知,以及email发送给哪些邮件地址,可以有多个,每行一个    
  9.     notification_email {        
  10.         #设置报警邮件地址,可以设置多个,每行一个。 需开启本机的sendmail服务     
  11.         13020176132@163.com    
  12.     }    
  13.     #keepalived在发生诸如切换操作时需要发送email通知地址,表示发送通知的邮件源地址是谁    
  14.     notification_email_from 13020176132@163.com     
  15.         
  16.     #指定发送email的smtp服务器    
  17.     smtp_server 127.0.0.1          
  18.         
  19.     #设置连接smtp server的超时时间    
  20.     smtp_connect_timeout 30        
  21.         
  22.     #运行keepalived的机器的一个标识,通常可设为hostname。故障发生时,发邮件时显示在邮件主题中的信息。    
  23.     router_id swarm01       
  24. }    
  25.     
  26.     
  27. ############################ VRRPD配置 #############################    
  28.     
  29. # 定义chk_http_port脚本,脚本执行间隔10秒,权重-5,检测nginx服务是否在运行。有很多方式,比如进程,用脚本检测等等    
  30. vrrp_script chk_http_port {      
  31.     
  32.     #这里通过脚本监测        
  33.     script "/opt/chk_nginx.sh"       
  34.         
  35.     #脚本执行间隔,每2s检测一次    
  36.     interval 2        
  37.         
  38.     #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5       
  39.     weight -5         
  40.         
  41.     #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)        
  42.     fall 2         
  43.         
  44.     #检测1次成功就算成功。但不修改优先级     
  45.     rise 1                        
  46. }    
  47.     
  48. #定义vrrp实例,VI_1 为虚拟路由的标示符,自己定义名称,keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后次priority将会接管    
  49. vrrp_instance VI_1 {     
  50.     
  51.     #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。注意这里的state指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,    
  52.     #但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,    
  53.     #那么他会就回抢占为MASTER       
  54.     state MASTER     
  55.         
  56.     #指定HA监测网络的接口。与本机 IP 地址所在的网络接口相同,可通过ip addr 查看    
  57.     interface ens33          
  58.     
  59.     # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在哪个地址上发送VRRP通告,这个非常重要,    
  60.     #一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址        
  61.     mcast_src_ip 192.168.182.110    
  62.         
  63.     #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的    
  64.     virtual_router_id 51        
  65.     
  66.     #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级       
  67.     priority 101     
  68.     
  69.     #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒       
  70.     advert_int 1            
  71.     
  72.     #设置验证类型和密码。主从必须一样    
  73.     authentication {        
  74.         
  75.         #设置vrrp验证类型,主要有PASS和AH两种    
  76.         auth_type PASS               
  77.             
  78.         #设置vrrp验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信    
  79.         auth_pass 1111               
  80.     }    
  81.         
  82.     #VRRP HA 虚拟地址 如果有多个VIP,继续换行填写    
  83.     #设置VIP,它随着state变化而增加删除,当state为master的时候就添加,当state为backup的时候则删除,由优先级决定    
  84.     virtual_ipaddress {              
  85.         192.168.182.156    
  86.     }    
  87.         
  88.     #执行nginx检测脚本。注意这个设置不能紧挨着写在vrrp_script配置块的后面(实验中碰过的坑),否则nginx监控失效!!    
  89.     track_script {       
  90.     
  91.        #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。     
  92.        chk_http_port                        
  93.     }    
  94. }    
  95.   
  96. #定义vrrp实例,VI_2 为虚拟路由的标示符,自己定义名称,keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后次priority将会接管    
  97. vrrp_instance VI_2 {     
  98.     
  99.     #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。注意这里的state指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,    
  100.     #但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,    
  101.     #那么他会就回抢占为MASTER       
  102.     state BACKUP     
  103.         
  104.     #指定HA监测网络的接口。与本机 IP 地址所在的网络接口相同,可通过ip addr 查看    
  105.     interface ens33          
  106.     
  107.     # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在哪个地址上发送VRRP通告,这个非常重要,    
  108.     #一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址        
  109.     mcast_src_ip 192.168.182.110    
  110.         
  111.     #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的    
  112.     virtual_router_id 52       
  113.     
  114.     #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级       
  115.     priority 100     
  116.     
  117.     #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒       
  118.     advert_int 1            
  119.     
  120.     #设置验证类型和密码。主从必须一样    
  121.     authentication {        
  122.         
  123.         #设置vrrp验证类型,主要有PASS和AH两种    
  124.         auth_type PASS               
  125.             
  126.         #设置vrrp验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信    
  127.         auth_pass 1111               
  128.     }    
  129.         
  130.     #VRRP HA 虚拟地址 如果有多个VIP,继续换行填写    
  131.     #设置VIP,它随着state变化而增加删除,当state为master的时候就添加,当state为backup的时候则删除,由优先级决定    
  132.     virtual_ipaddress {              
  133.         192.168.182.157  
  134.     }    
  135.         
  136.     #执行nginx检测脚本。注意这个设置不能紧挨着写在vrrp_script配置块的后面(实验中碰过的坑),否则nginx监控失效!!    
  137.     track_script {       
  138.     
  139.        #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。     
  140.        chk_http_port                        
  141.     }    
  142. }  
[root@Nginx-A src]# vim /etc/keepalived/keepalived.conf	  
! Configuration File for keepalived  
  
############################ 全局配置 #############################  
    
global_defs {  
  
    # 定义管理员邮件地址,表示keepalived在发生诸如切换操作时需要发送email通知,以及email发送给哪些邮件地址,可以有多个,每行一个  
    notification_email {      
        #设置报警邮件地址,可以设置多个,每行一个。 需开启本机的sendmail服务   
        13020176132@163.com  
    }  
    #keepalived在发生诸如切换操作时需要发送email通知地址,表示发送通知的邮件源地址是谁  
    notification_email_from 13020176132@163.com   
      
    #指定发送email的smtp服务器  
    smtp_server 127.0.0.1        
      
    #设置连接smtp server的超时时间  
    smtp_connect_timeout 30      
      
    #运行keepalived的机器的一个标识,通常可设为hostname。故障发生时,发邮件时显示在邮件主题中的信息。  
    router_id swarm01     
}  
  
  
############################ VRRPD配置 #############################  
  
# 定义chk_http_port脚本,脚本执行间隔10秒,权重-5,检测nginx服务是否在运行。有很多方式,比如进程,用脚本检测等等  
vrrp_script chk_http_port {    
  
    #这里通过脚本监测      
    script "/opt/chk_nginx.sh"     
      
    #脚本执行间隔,每2s检测一次  
    interval 2      
      
    #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5     
    weight -5       
      
    #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)      
    fall 2       
      
    #检测1次成功就算成功。但不修改优先级   
    rise 1                      
}  
  
#定义vrrp实例,VI_1 为虚拟路由的标示符,自己定义名称,keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后次priority将会接管  
vrrp_instance VI_1 {   
  
    #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。注意这里的state指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,  
    #但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,  
    #那么他会就回抢占为MASTER     
    state MASTER   
      
    #指定HA监测网络的接口。与本机 IP 地址所在的网络接口相同,可通过ip addr 查看  
    interface ens33        
  
    # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在哪个地址上发送VRRP通告,这个非常重要,  
    #一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址      
    mcast_src_ip 192.168.182.110  
      
    #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的  
    virtual_router_id 51      
  
    #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级     
    priority 101   
  
    #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒     
    advert_int 1          
  
    #设置验证类型和密码。主从必须一样  
    authentication {      
      
        #设置vrrp验证类型,主要有PASS和AH两种  
        auth_type PASS             
          
        #设置vrrp验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信  
        auth_pass 1111             
    }  
      
    #VRRP HA 虚拟地址 如果有多个VIP,继续换行填写  
    #设置VIP,它随着state变化而增加删除,当state为master的时候就添加,当state为backup的时候则删除,由优先级决定  
    virtual_ipaddress {            
        192.168.182.156  
    }  
      
    #执行nginx检测脚本。注意这个设置不能紧挨着写在vrrp_script配置块的后面(实验中碰过的坑),否则nginx监控失效!!  
    track_script {     
  
       #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。   
       chk_http_port                      
    }  
}  

#定义vrrp实例,VI_2 为虚拟路由的标示符,自己定义名称,keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后次priority将会接管  
vrrp_instance VI_2 {   
  
    #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。注意这里的state指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,  
    #但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,  
    #那么他会就回抢占为MASTER     
    state BACKUP   
      
    #指定HA监测网络的接口。与本机 IP 地址所在的网络接口相同,可通过ip addr 查看  
    interface ens33        
  
    # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在哪个地址上发送VRRP通告,这个非常重要,  
    #一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址      
    mcast_src_ip 192.168.182.110  
      
    #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的  
    virtual_router_id 52     
  
    #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级     
    priority 100   
  
    #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒     
    advert_int 1          
  
    #设置验证类型和密码。主从必须一样  
    authentication {      
      
        #设置vrrp验证类型,主要有PASS和AH两种  
        auth_type PASS             
          
        #设置vrrp验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信  
        auth_pass 1111             
    }  
      
    #VRRP HA 虚拟地址 如果有多个VIP,继续换行填写  
    #设置VIP,它随着state变化而增加删除,当state为master的时候就添加,当state为backup的时候则删除,由优先级决定  
    virtual_ipaddress {            
        192.168.182.157
    }  
      
    #执行nginx检测脚本。注意这个设置不能紧挨着写在vrrp_script配置块的后面(实验中碰过的坑),否则nginx监控失效!!  
    track_script {     
  
       #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。   
       chk_http_port                      
    }  
}

Nginx-B:

[html] view plain copy print?
  1. [root@Nginx-B src]# vim /etc/keepalived/keepalived.conf  
  2. ! Configuration File for keepalived      
  3.     
  4. global_defs {  
  5.     notification_email {                  
  6.         13020176132@163.com  
  7.     }  
  8.         
  9.     notification_email_from 13020176132@163.com    
  10.     smtp_server 127.0.0.1                      
  11.     smtp_connect_timeout 30                   
  12.     router_id swaram02                   
  13. }  
  14.     
  15. vrrp_script chk_http_port {           
  16.     script "/opt/chk_nginx.sh"     
  17.     interval 2                        
  18.     weight -5                         
  19.     fall 2                     
  20.     rise 1                    
  21. }  
  22.     
  23. vrrp_instance VI_1 {              
  24.     state BACKUP             
  25.     interface ens33              
  26.     mcast_src_ip 192.168.182.111  
  27.     virtual_router_id 51          
  28.     priority 90                 
  29.     advert_int 1                 
  30.     authentication {              
  31.         auth_type PASS           
  32.         auth_pass 1111            
  33.     }  
  34.     virtual_ipaddress {          
  35.         192.168.182.156  
  36.     }  
  37.    
  38.     track_script {                       
  39.        chk_http_port                   
  40.     }  
  41.   
  42. }  
  43.   
  44. vrrp_instance VI_2 {              
  45.     state MASTER             
  46.     interface ens33              
  47.     mcast_src_ip 192.168.182.111  
  48.     virtual_router_id 52          
  49.     priority 100                 
  50.     advert_int 1                 
  51.     authentication {              
  52.         auth_type PASS           
  53.         auth_pass 1111            
  54.     }  
  55.     virtual_ipaddress {          
  56.         192.168.182.157  
  57.     }  
  58.    
  59.     track_script {                       
  60.        chk_http_port                   
  61.     }  
  62.   
  63. }  
[root@Nginx-B src]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived    
  
global_defs {
	notification_email {                
		13020176132@163.com
	}
	  
	notification_email_from 13020176132@163.com  
	smtp_server 127.0.0.1                    
	smtp_connect_timeout 30                 
	router_id swaram02                 
}
  
vrrp_script chk_http_port {         
	script "/opt/chk_nginx.sh"   
	interval 2                      
	weight -5                       
	fall 2                   
	rise 1                  
}
  
vrrp_instance VI_1 {            
	state BACKUP           
	interface ens33            
	mcast_src_ip 192.168.182.111
	virtual_router_id 51        
	priority 90               
	advert_int 1               
	authentication {            
		auth_type PASS         
		auth_pass 1111          
	}
	virtual_ipaddress {        
		192.168.182.156
	}
 
	track_script {                     
	   chk_http_port                 
	}

}

vrrp_instance VI_2 {            
	state MASTER           
	interface ens33            
	mcast_src_ip 192.168.182.111
	virtual_router_id 52        
	priority 100               
	advert_int 1               
	authentication {            
		auth_type PASS         
		auth_pass 1111          
	}
	virtual_ipaddress {        
		192.168.182.157
	}
 
	track_script {                     
	   chk_http_port                 
	}

}

然后修改两台机器上的nginx首页

[html] view plain copy print?
  1. [root@Nginx-A html]# vim  /usr/local/nginx/html/index.html   
  2. <!DOCTYPE html>  
  3. <html>  
  4.  <head>   
  5.   <title>Welcome to Nginx-Master!</title >   
  6.   <style>  
  7.         body {  
  8.                 width: 35em;  
  9.                 margin: 0 auto;  
  10.                 font-family: Tahoma, Verdana, Arial, sans-serif;  
  11.          }  
  12.  </style>   
  13.  </head>  
  14.  <body>  
  15.   <h1>Welcome to Nginx-A!</h1 >       
  16.   <h1><b>Nginx-A:192.168.182.110 </b></h1>       
  17.   <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required. </p>  
  18.   <p>For online documentation and support please refer to  <a href="http://nginx.org/">nginx.org </a>.<br /> Commercial support is available at  <a href="http://nginx.com/">nginx.com </a>.</p>  
  19.   <p><em>Thank you for using nginx. </em></p>  
  20.  </body>  
  21. </html>  
  22.   
  23. [root@Nginx-B html]# vim  /usr/local/nginx/html/index.html   
  24. <!DOCTYPE html>  
  25. <html>  
  26.  <head>   
  27.   <title>Welcome to Nginx-Master!</title >   
  28.   <style>  
  29.         body {  
  30.                 width: 35em;  
  31.                 margin: 0 auto;  
  32.                 font-family: Tahoma, Verdana, Arial, sans-serif;  
  33.          }  
  34.  </style>   
  35.  </head>  
  36.  <body>  
  37.   <h1>Welcome to Nginx-B!</h1 >       
  38.   <h1><b>Nginx-B:192.168.182.111 </b></h1>       
  39.   <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required. </p>  
  40.   <p>For online documentation and support please refer to  <a href="http://nginx.org/">nginx.org </a>.<br /> Commercial support is available at  <a href="http://nginx.com/">nginx.com </a>.</p>  
  41.   <p><em>Thank you for using nginx. </em></p>  
  42.  </body>  
  43. </html>  
[root@Nginx-A html]# vim  /usr/local/nginx/html/index.html 
<!DOCTYPE html>
<html>
 <head> 
  <title>Welcome to Nginx-Master!</title> 
  <style>
        body {
                width: 35em;
                margin: 0 auto;
                font-family: Tahoma, Verdana, Arial, sans-serif;
         }
 </style> 
 </head>
 <body>
  <h1>Welcome to Nginx-A!</h1>     
  <h1><b>Nginx-A:192.168.182.110</b></h1>     
  <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p>
  <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br /> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p>
  <p><em>Thank you for using nginx.</em></p>
 </body>
</html>

[root@Nginx-B html]# vim  /usr/local/nginx/html/index.html 
<!DOCTYPE html>
<html>
 <head> 
  <title>Welcome to Nginx-Master!</title> 
  <style>
        body {
                width: 35em;
                margin: 0 auto;
                font-family: Tahoma, Verdana, Arial, sans-serif;
         }
 </style> 
 </head>
 <body>
  <h1>Welcome to Nginx-B!</h1>     
  <h1><b>Nginx-B:192.168.182.111</b></h1>     
  <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p>
  <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br /> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p>
  <p><em>Thank you for using nginx.</em></p>
 </body>
</html>

chk_nginx.sh脚本也不用改,然后重启keepalived

[html] view plain copy print?
  1. [root@Nginx-A keepalived]# systemctl start keepalived.service  
  2. [root@Nginx-A keepalived]# systemctl status keepalived.service  
  3. ● keepalived.service - LVS and VRRP High Availability Monitor  
  4.    Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)  
  5.    Active: active (running) since 二 2018-05-29 14:46:25 CST; 4s ago  
  6.   Process: 10590 ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS (code= exited, status=0/SUCCESS)  
  7.  Main PID: 7396 (keepalived)  
  8.     Tasks: 6  
  9.    Memory: 3.0M  
  10.    CGroup: /system.slice/keepalived.service  
  11.            ├─  7396 /usr/local/keepalived/sbin/keepalived -D  
  12.            ├─  7397 /usr/local/keepalived/sbin/keepalived -D  
  13.            ├─  7398 /usr/local/keepalived/sbin/keepalived -D  
  14.            ├─ 99999 nginx: master process /usr/local/nginx/sbin/nginx  
  15.            ├─100001 nginx: worker process  
  16.            └─100002 nginx: worker process  
  17.   
  18. 5月 29 14:46:25 Nginx-A systemd[1]: Starting LVS and VRRP High Availability Monitor...  
  19. 5月 29 14:46:25 Nginx-A Keepalived[10590]: Starting Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2  
  20. 5月 29 14:46:25 Nginx-A Keepalived[10590]: Unable to resolve default script username  
  21.   
  22. [root@Nginx-B conf]# /etc/init.d/keepalived status  
  23. ● keepalived.service - LVS and VRRP High Availability Monitor  
  24.    Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)  
  25.    Active: active (running) since 二 2018-05-29 14:45:34 CST; 4min 17s ago  
  26.   Process: 5770 ExecStart=/usr/local/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited,  status=0/SUCCESS)  
  27.  Main PID: 2771 (keepalived)  
  28.     Tasks: 3  
  29.    Memory: 960.0K  
  30.    CGroup: /system.slice/keepalived.service  
  31.            ├─2771 /usr/local/sbin/keepalived -D  
  32.            ├─2772 /usr/local/sbin/keepalived -D  
  33.            └─2773 /usr/local/sbin/keepalived -D  
  34.   
  35. 5月 29 14:45:34 Nginx-B systemd[1]: Starting LVS and VRRP High Availability Monitor...  
  36. 5月 29 14:45:34 Nginx-B Keepalived[5770]: Starting Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2  
  37. 5月 29 14:45:34 Nginx-B systemd[1]: Started LVS and VRRP High Availability Monitor.  
[root@Nginx-A keepalived]# systemctl start keepalived.service
[root@Nginx-A keepalived]# systemctl status keepalived.service
● keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
   Active: active (running) since 二 2018-05-29 14:46:25 CST; 4s ago
  Process: 10590 ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 7396 (keepalived)
    Tasks: 6
   Memory: 3.0M
   CGroup: /system.slice/keepalived.service
           ├─  7396 /usr/local/keepalived/sbin/keepalived -D
           ├─  7397 /usr/local/keepalived/sbin/keepalived -D
           ├─  7398 /usr/local/keepalived/sbin/keepalived -D
           ├─ 99999 nginx: master process /usr/local/nginx/sbin/nginx
           ├─100001 nginx: worker process
           └─100002 nginx: worker process

5月 29 14:46:25 Nginx-A systemd[1]: Starting LVS and VRRP High Availability Monitor...
5月 29 14:46:25 Nginx-A Keepalived[10590]: Starting Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2
5月 29 14:46:25 Nginx-A Keepalived[10590]: Unable to resolve default script username

[root@Nginx-B conf]# /etc/init.d/keepalived status
● keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
   Active: active (running) since 二 2018-05-29 14:45:34 CST; 4min 17s ago
  Process: 5770 ExecStart=/usr/local/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 2771 (keepalived)
    Tasks: 3
   Memory: 960.0K
   CGroup: /system.slice/keepalived.service
           ├─2771 /usr/local/sbin/keepalived -D
           ├─2772 /usr/local/sbin/keepalived -D
           └─2773 /usr/local/sbin/keepalived -D

5月 29 14:45:34 Nginx-B systemd[1]: Starting LVS and VRRP High Availability Monitor...
5月 29 14:45:34 Nginx-B Keepalived[5770]: Starting Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2
5月 29 14:45:34 Nginx-B systemd[1]: Started LVS and VRRP High Availability Monitor.
三、keepalived+nginx的高可用测试

3.1 查看服务器上的IP地址

查看Nginx-A的地址:
[html] view plain copy print?
  1. [root@Nginx-A keepalived]# ip addr  
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000  
  3.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  
  4.     inet 127.0.0.1/8 scope host lo  
  5.        valid_lft forever preferred_lft forever  
  6.     inet6 ::1/128 scope host   
  7.        valid_lft forever preferred_lft forever  
  8. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000  
  9.     link/ether 00:0c:29:e0:69:a0 brd ff:ff:ff:ff:ff:ff  
  10.     inet 192.168.182.110/24 brd 192.168.182.255 scope global noprefixroute ens33  
  11.        valid_lft forever preferred_lft forever  
  12.     inet 192.168.182.156/32 scope global ens33  
  13.        valid_lft forever preferred_lft forever  
  14.     inet 192.168.182.157/32 scope global ens33  
  15.        valid_lft forever preferred_lft forever  
  16.     inet6 fe80::3064:9b6a:9819:180a/64 scope link noprefixroute   
  17.        valid_lft forever preferred_lft forever  
[root@Nginx-A keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:e0:69:a0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.182.110/24 brd 192.168.182.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.182.156/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.182.157/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::3064:9b6a:9819:180a/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
查看Nginx-B的地址:
[html] view plain copy print?
  1. [root@Nginx-B keepalived]# ip addr  
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000  
  3.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  
  4.     inet 127.0.0.1/8 scope host lo  
  5.        valid_lft forever preferred_lft forever  
  6.     inet6 ::1/128 scope host   
  7.        valid_lft forever preferred_lft forever  
  8. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000  
  9.     link/ether 00:0c:29:25:44:71 brd ff:ff:ff:ff:ff:ff  
  10.     inet 192.168.182.111/24 brd 192.168.182.255 scope global noprefixroute ens33  
  11.        valid_lft forever preferred_lft forever  
  12.     inet6 fe80::2818:83f9:1989:3130/64 scope link noprefixroute   
  13.        valid_lft forever preferred_lft forever  
  14.     inet6 fe80::3064:9b6a:9819:180a/64 scope link tentative noprefixroute dadfailed   
  15.        valid_lft forever preferred_lft forever  
[root@Nginx-B keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:25:44:71 brd ff:ff:ff:ff:ff:ff
    inet 192.168.182.111/24 brd 192.168.182.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::2818:83f9:1989:3130/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::3064:9b6a:9819:180a/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever

会多出两个虚拟IP

[html] view plain copy print?
  1. inet 192.168.182.156/32 scope global ens33  
  2.    valid_lft forever preferred_lft forever  
  3. inet 192.168.182.157/32 scope global ens33  
    inet 192.168.182.156/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.182.157/32 scope global ens33

首先通过两个VIP地址访问如下:



3.2、关闭Nginx-A上的nginx,keepalived将在2s内将它重新启动

[html] view plain copy print?
  1. [root@Nginx-A keepalived]# /usr/local/nginx/sbin/nginx -s stop  
[root@Nginx-A keepalived]# /usr/local/nginx/sbin/nginx -s stop

3.3、关闭Nginx-A上的keepalived,VIP会切换到Nginx-B上

[html] view plain copy print?
  1. [root@Nginx-A keepalived]# service keepalived stop  
[root@Nginx-A keepalived]# service keepalived stop

不管访问的是:http://192.168.182.157/ 还是http://192.168.182.156/ 都将导到Nginx-B上去。



同时会发现Nginx-A上的虚拟IP会消失

[html] view plain copy print?
  1. [root@Nginx-A keepalived]# ip addr  
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000  
  3.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  
  4.     inet 127.0.0.1/8 scope host lo  
  5.        valid_lft forever preferred_lft forever  
  6.     inet6 ::1/128 scope host   
  7.        valid_lft forever preferred_lft forever  
  8. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000  
  9.     link/ether 00:0c:29:e0:69:a0 brd ff:ff:ff:ff:ff:ff  
  10.     inet 192.168.182.110/24 brd 192.168.182.255 scope global noprefixroute ens33  
  11.        valid_lft forever preferred_lft forever  
  12.     inet6 fe80::3064:9b6a:9819:180a/64 scope link noprefixroute   
  13.        valid_lft forever preferred_lft forever  
[root@Nginx-A keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:e0:69:a0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.182.110/24 brd 192.168.182.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::3064:9b6a:9819:180a/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever