Nginx+Keepalived实现负载均衡和高可用 在ubuntu(乌班图)上--(转)

Nginx+keepalived实现负载均衡和高可用性 in ubuntu

使用Nginx已经有很长一段时间,但是最近才去实践利用Nginx做负载均衡和高可用性。

大致思路:根据keepalived的特性,通过一个虚拟ip来实现主从服务器的切换,如果一台服务器宕机,可以自动切换到另一台备份服务器,从而不影响用户的访问。

以下是我的安装配置步骤,请大家参考指正。

1:服务器准备

准备两台ubuntu虚拟主机服务器,对应的IP分别是 192.168.1.100   192.168.1.200

两台主机的ip一定要在相同的网段

2:虚拟IP准备

sudo ifconfig  eth0:0 192.168.1.150 netmask 255.255.255.0

然后查看ifconfig,不难发现与之前的ifconfig 的不同。也可以通过ip a查看,对应的网卡eth0有两个ipaddress

两台虚拟主机要使用相同的虚拟IP: 192.168.1.150

 

3:安装nginx

sudo apt-get install nginx

安装完成之后,ps -ef|grep nginx 查看nginx的进程,如果没问题,可以查看http://192.168.1.100  如果显示正常,说明nginx服务正常启动。

两台服务器的nginx配置一致

 

4:安装keepalived

sudo apt-get install keepalived

安装完成之后,查看进程发现并没有keepalived的进程,这是因为keepalived配置文件不存在,需要用户自己创建一个keepalived.conf文件存放到/etc/keepalived目录

 

Sh代码 
  1. vrrp_script chk_nginx {  
  2.  script "/etc/keepalived/check_nginx.sh" //检测nginx进程的脚本  
  3.  interval 2  
  4.  weight 2  
  5. }  
  6.   
  7. global_defs {  
  8.  notification_email {  
  9.       //可以添加邮件提醒  
  10.  }  
  11. }  
  12. vrrp_instance VI_1 {  
  13.  state MASTER //主服务器  
  14.  interface eth0  
  15.  virtual_router_id 51   
  16.  mcast_src_ip 192.168.1.100  
  17.  priority 250  
  18.  advert_int 1  
  19.   
  20.  authentication {  
  21.         auth_type PASS  
  22.         auth_pass 123456  
  23.  }  
  24.  track_script {  
  25.         chk_nginx  
  26.  }  
  27.  virtual_ipaddress {  
  28.         192.168.1.150  
  29.  }  
  30. }  

 

 

两台服务器的keepalived.conf文件除了优先级,state和mcast_src_ip不一样,其他的完全一致,但是需要注意的几点是:

  • 主服务器的state为MASTER,从服务器的state为BACKUP
  • 主服务器的priority一定要比从服务器的priority大
  • mcast_src_ip就是对应服务器的局域网ip
  • “{”前面一定要有个空格,不能跟前面的字符连起来,否则出现问题很难发现
  • check_nginx.sh脚本文件的执行权限一定要正确。
  • check_nginx.sh的代码如下:
    Sh代码 
    1. #more /etc/keepalived/check_http.sh  
    2. #!/bin/bash  
    3. #代码一定注意空格,逻辑就是:如果nginx进程不存在则启动nginx,如果nginx无法启动则kill掉keepalived所有进程  
    4. A=`ps -C nginx --no-header |wc -l`  
    5. if [ $A -eq 0 ];then  
    6.  /etc/init.d/nginx start  
    7. sleep 3  
    8. if [ `ps -C nginx --no-header |wc -l`-eq 0 ];then  
    9.  killall keepalived  
    10. fi  
    11. fi  

配置文件完成之后,sudo /etc/init.d/keepalived start,然后再查看下keepalived的进程是否存在,如果存在,再检查keepalived的log(sudo tail /var/log/syslog),如果看到nginx Keepalived_vrrp: VRRP_Script(chk_nginx) succeeded,则说明配置成功。

两台服务器的keepalived配置和启动命令是一致的

 

5:测试

因为check_nginx的缘故,当启动keepalived是,nginx也会同时被启动,所以此时,查看nginx和keepalived的进程应该都是存在的,否则就是配置有问题。

现在访问http://192.168.1.150,如果访问正常,此时应该显示的是主服务器的页面,也就是192.168.1.100的页面,否则也是配置有问题。

然后在关闭主服务器的nginx访问,访问http://192.168.1.150页面应该正常,因为check_nginx的缘故。

再关闭主服务器的keepalived进程,则此时访问http://192.168.1.150应该显示的是从服务器的页面,也就是192.168.1.200的页面,否则也是配置不正确。

如果再关闭从服务器的nginx和keepalived则http://192.168.1.150无法访问。

 

以上就是我的配置步骤,很粗略,还希望大家多指点。

另外,以下是版本信息

ubuntu:Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-generic x86_64)

Keepalived: v1.2.2

nginx version: nginx/1.1.19

 

 

 

posted @ 2013-07-07 13:21  牛肉羊杂汤  阅读(1460)  评论(0)    收藏  举报