转——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的配置如下:

C代码  

  1. user www-data;
  2. worker_processes 4;
  3. pid /var/run/nginx.pid;
  4. events {
  5. worker_connections 1024;
  6. # multi_accept on;
  7. }
  8. http {
  9. ##
  10. # Basic Settings
  11. ##
  12. sendfile on;
  13. tcp_nopush on;
  14. tcp_nodelay on;
  15. keepalive_timeout 65;
  16. fastcgi_buffer_size  64k;
  17. fastcgi_buffers      16  64k;
  18. types_hash_max_size 2048;
  19. # server_tokens off;
  20. # server_names_hash_bucket_size 64;
  21. # server_name_in_redirect off;
  22. include /etc/nginx/mime.types;
  23. default_type application/octet-stream;
  24. ##
  25. # Logging Settings
  26. ##
  27. access_log /var/log/nginx/access.log;
  28. error_log /var/log/nginx/error.log;
  29. upstream server_lb {
  30. server 192.168.1.100:9000; //9000为php的端口
  31. server 192.168.1.200:9000;
  32. ip_hash;
  33. }
  34. server {
  35. listen       80;
  36. server_name  _;
  37. #root /var/www/html/demo/public;
  38. #charset koi8-r;
  39. try_files $uri $uri/ $uri.php?$args /index.php;
  40. location ~ \.php$ {
  41. fastcgi_pass server_lb;//通过fastcgi进行负载均衡
  42. include fastcgi_params;
  43. }
  44. error_page   500 502 503 504  /50x.html;
  45. location = /50x.html {
  46. root   html;
  47. }
  48. }
  49. }

两台服务器的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. global_defs {
  7. notification_email {
  8. //可以添加邮件提醒
  9. }
  10. }
  11. vrrp_instance VI_1 {
  12. state MASTER //主服务器
  13. interface eth0
  14. virtual_router_id 51
  15. mcast_src_ip 192.168.1.100
  16. priority 250
  17. advert_int 1
  18. authentication {
  19. auth_type PASS
  20. auth_pass 123456
  21. }
  22. track_script {
  23. chk_nginx
  24. }
  25. virtual_ipaddress {
  26. 192.168.1.150
  27. }
  28. }

两台服务器的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

时间: 2024-08-28 19:13:35

转——Nginx+keepalived实现负载均衡和高可用性 in ubuntu的相关文章

实战:ansible自动化部署nginx+keepalived+mysql负载均衡集群

一.目的 使用ansible自动化部署nginx+keepalived+mysql负载均衡集群. 二.拓扑规划 三.详细步骤 1.环境的搭建 (1).安装ansible,同时配置私钥免密码进行通信 [[email protected] ~]# ssh-keygen  -t rsa #-t表示使用的加密类型,其中rsa1表示version1版本,rsa.dsa.ecdsa的加密对于的是version2版本 Generating public/private rsa key pair. #这里询问你

nginx keepalived 搭建负载均衡

1下载安装包 yum install -y pcre-devel wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz tar zxvf keepalived-1.2.2.tar.gz cd keepalived-1.2.2 ./configure --prefix=/usr/local/keepalived make  && make install cp /usr/local/keepalived/sbin/ke

Nginx+Keepalived实现负载均衡高可用

一.环境 5台虚拟机,分别是: 1台测试机(192.168.2.83); 2台nginx/keepalived(192.168.2.235/192.168.2.236); 2台Web Servers(192.168.2.237/192.168.2.238); 注:VIP设置为 192.168.2.229: 二.安装配置Web Server 由于Web Server的安装与配置非常简单,根据自己喜好,安装一个即可:比如:apache.nginx.tomcat等等.在此就不再详述: 三.安装配置Ng

Nginx+Keepalived实现负载均衡

OS:Centos 5.7 kernel:2.6.18-274.el5 主:10.10.8.69 备:10.10.8.70 VIP:10.10.8.71 client1:10.10.8.72 client2:10.10.8.73 一,安装gcc等环境 二,下载软件,nginx pcre nginx:nginx-1.1.11.tar.gz pcre:pcre-8.21.tar.gz keepalived-1.1.19.tar.gz 三,安装pcre 解压 tar zxvf pcre-8.21.ta

lvs+keepalived+nginx实现高性能负载均衡集群(转)

lvs+keepalived+nginx实现高性能负载均衡集群 一.为什么要使用负载均衡技术? 1.系统高可用性 2.  系统可扩展性 3.  负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查,故障转移,提高系统的可用性!采用这样的架构以后很容易对现有系统进行扩展,只要在后端添加或者减少realserver,只要更改lvs的配置文件,并能实现无缝配置变更! 二.LVS+Keepalived介绍 1.  LVS LVS是一个开源

Nginx+Tomcat+Keepalived+Memcache 负载均衡动静分离技术

一.概述 Nginx 作负载均衡器的优点许多,简单概括为: ①实现了可弹性化的架构,在压力增大的时候可以临时添加Tomcat服务器添加到这个架构里面去; ②upstream具有负载均衡能力,可以自动判断下面的机器,并且自动踢出不能正常提供服务的机器: Keepalived 可实现 Nginx负载均衡器双机互备,任意一台机器发生故障,对方都能够将虚拟IP接管过去. Memcache可以实现Tomcat服务器的Sission共享整个拓补如下: 注意: 1.由于服务器有限,IP相同的为同一台机.只是端

Nginx+Tomcat+Keepalived+Memcache负载均衡动离分离技术

一.概述 Nginx 作负载均衡器的优点许多,简单概括为: ①实现了可弹性化的架构,在压力增大的时候可以临时添加Tomcat服务器添加到这个架构里面去; ②upstream具有负载均衡能力,可以自动判断下面的机器,并且自动踢出不能正常提供服务的机器: Keepalived 可实现 Nginx负载均衡器双机互备,任意一台机器发生故障,对方都能够将虚拟IP接管过去. Memcache可以实现Tomcat服务器的Sission共享整个拓补如下: 注意: 1.由于服务器有限,IP相同的为同一台机.只是端

LVS+Keepalived实现负载均衡

一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等. 古人有云:当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来拉车. 在实际应用中,在Web服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为Web服务器流量的入口,挑选最合适的一台Web服务器,将客户

借助LVS+Keepalived实现负载均衡(转)

原文:http://www.cnblogs.com/edisonchou/p/4281978.html 一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等. 古人有云:当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来拉车. 在实际应用中,在Web服务器集群之前总会有一