环境准备(继续服用hadoop节点)

slave1  192.168.2.201(CentOs 7)

slave2  192.168.2.202(CentOs 7)

slave1 和 slave2 上都安装nginx+keepalived

web 192.168.2.100 再iis上启动了9011/9012/9013三个端口的web应用

------------------------------------------------------------------------------------------------------

1.首先在slave节点上安装nginx(slave节点安装相同,需要修改的地方我会注释出来) 或者通过 rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 后yum -y install nginx进行安装,免除编译

  1. #安装编译nginx需要的相关依赖
  2. yum -y install pcre-devel openssl-devel perl-ExtUtils-Embed
  1. cd /usr/local/src
  2.  
  3. #获取nginx
  4. wget http://nginx.org/download/nginx-1.5.3.tar.gz
  5.  
  6. #解压
  7. tar -zxvf nginx-1.5.3.tar.gz
  8.  
  9. cd nginx-1.5.3

  10. #创建www组下www用户
    useradd -s /sbin/nologin -M www
  1. #配置路径及参数(注意最后那部分标红色的参数)
    ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_gzip_static_module --without-http_uwsgi_module --without-http_scgi_module --without-http_upstream_ip_hash_module --with-http_perl_module --with-pcre --with-ld-opt="-Wl,-E"
  2.  
  3. #编译及安装
    make && make install
  1. #测试用默认配置文件是否成功
  2. [root@slave1 nginx-1.5.3]# /usr/local/nginx/sbin/nginx -t
  3. nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
  4. nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
  1. #修改nginx配置文件
  2. vi /usr/local/nginx/conf/nginx.conf
  1. user www www;
  2. worker_processes 8;
  3. error_log logs/error.log;
  4. pid logs/nginx.pid;
  5.  
  6. events {
  7. worker_connections 1024;
  8. }
  9.  
  10. http {
  11. include mime.types;
  12. default_type application/octet-stream;
  13. sendfile on;
  14. tcp_nopush on;
  15. keepalive_timeout 65;
  16. gzip on;
  17.  
  18. upstream web_server_pool {
  19. #ip_hash; #如果需要保持session一致,需要开启这个选项,可以保证同一台机器每次访问都分配到同一服务器
  20. server 192.168.2.100:9011 weight=4 max_fails=2 fail_timeout=30s;
  21. server 192.168.2.100:9012 weight=4 max_fails=2 fail_timeout=30s;
  22. server 192.168.2.100:9013 weight=4 max_fails=2 fail_timeout=30s;
  23. }
  24.  
  25. server {
  26. listen 80;
  27. server_name slave1; # node2 改为slave2 或者ip地址
  28. location / {
  29. root html;
  30. index index.html index.htm;
  31. proxy_pass http://web_server_pool;
  32. proxy_set_header Host $host;
  33. proxy_set_header X-Real-IP $remote_addr;
  34. proxy_set_header X-Forwarded-For $remote_addr;
  35. }
  36. error_page 500 502 503 504 /50x.html;
  37. location = /50x.html {
  38. root html;
  39. }
  40. }
  41. }
  1. #启动nginx
  2. /usr/local/nginx/sbin/nginx #默认会加载其上级目录conf中的nginx.conf
  3.  
  4. #如果加载其他路径的配置文件按照如下方式进行
  5. /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  1. #检查运行情况
  2. [root@slave1 nginx-1.5.3]# ps -ef | grep nginx
  3. root 5112 1 0 21:34 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  4. www 5113 5112 0 21:34 ? 00:00:00 nginx: worker process
  5. www 5114 5112 0 21:34 ? 00:00:00 nginx: worker process
  6. www 5115 5112 0 21:34 ? 00:00:00 nginx: worker process
  7. www 5116 5112 0 21:34 ? 00:00:00 nginx: worker process
  8. www 5117 5112 0 21:34 ? 00:00:00 nginx: worker process
  9. www 5118 5112 0 21:34 ? 00:00:00 nginx: worker process
  10. www 5119 5112 0 21:34 ? 00:00:00 nginx: worker process
  11. www 5120 5112 0 21:34 ? 00:00:00 nginx: worker process
  12. root 5317 2537 0 21:53 pts/0 00:00:00 grep --color=auto nginx

输入slave1的IP地址 http://192.168.2.201/ 进行访问,结果如下(默认为轮训,请多次刷新浏览器)

salve2方法类似,注意配置文件中红色部分,修改为salve2即可

===========================================================================================================================================================================================================

2.安装keepalived

  1. yum -y install keepalived

顺便提下: 最初我采用和nginx一样的下载源码编译方式安装,一直没通过,甚至还修改了Makefile也不行,C语言丢了好多年了,就没继续折腾了

  1. #编辑配置文件
  2. vi /etc/keepalived/keepalived.conf
  1. global_defs {
  2. notification_email { #指定keepalived在发生事情的时候,发送邮件告知,可以有多个地址,每行一个。
  3. changw.xiao@qq.com
  4. }
  5. notification_email_from changw.xiao@qq.com #指定发件人
  6. smtp_server smtp.qq.com #发送email的smtp地址
  7. smtp_connect_timeout 30 #超时时间
  8. router_id NODEA #运行keepalived的机器的一个标识,多个节点标识可以相同,也可以不同
  9. vrrp_skip_check_adv_addr
  10. vrrp_strict #严格执行VRRP协议规范,此模式不支持节点单播
  11. vrrp_garp_interval 0
  12. vrrp_gna_interval 0
  13. }
  14.  
  15. vrrp_script chk_http_port {
  16. script "/usr/local/chk_nginx_pid.sh" #这用于keepalived检测nginx是否还在运行
  17. interval 2
  18. weight 2
  19. }
  20.  
  21. vrrp_instance VI_1 {
  22. state MASTER #主节点用master,其他都用backup
  23. interface ens33 #网卡名称
  24. virtual_router_id 50 #所有节点参数要一致
  25. priority 100 #权重,值越大,优先分派
  26. advert_int 1
  27. authentication {
  28. auth_type PASS
  29. auth_pass 1111
  30. }
  31. track_script {
  32. chk_http_port
  33. }
  34. virtual_ipaddress {
  35. 192.168.2.199/24 #虚拟ip,暴露给调用方使用的,调用方就通过这个ip获取服务,不会关心nginx和具体服务地址
  36. }
  37. }

同时我把backup节点配置信息也一并贴出来

  1. global_defs {
  2. router_id NODEB
  3. }
  4.  
  5. vrrp_script chk_http_port {
  6. script "/usr/local/chk_nginx_pid.sh"
  7. interval 2
  8. weight 2
  9. }
  10.  
  11. vrrp_instance VI_1 {
  12. state BACKUP
  13. interface ens33
  14. virtual_router_id 50
  15. priority
  16. advert_int 1
  17. authentication {
  18. auth_type PASS
  19. auth_pass 1111
  20. }
  21. track_script {
  22. chk_http_port
  23. }
  24.  
  25. virtual_ipaddress {
  26. 192.168.2.199/24
  27. }
  28. }

backup节点配置文件中少了邮件通知配置,不过邮件通知配置是错误的,没生效,具体日后研究了贴配置

配置文件中有一个shell脚本用于检测nginx是否启动

  1. vi /usr/local/chk_nginx_pid.sh
  1. #!/bin/bash
  2. if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
  3. then
  4. systemclt start nginx.service #尝试重启(通过编译方式安装的貌似不生效)
  5. sleep 5
  6. if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
  7. then
  8. killall keepalived #关掉keepalived,以便进行切换VIP指向
  9. fi
  10. fi

记得修改shell权限

  1. chmod 775 /usr/local/chk_nginx_pid.sh

启动keepalived

  1. keepalived -D -f /etc/keepalived/keepalived.conf
  1. [root@slave1 nginx-1.5.3]# ps -ef |grep keepalived
  2. root 5635 1 0 22:20 ? 00:00:00 keepalived -D -f /etc/keepalived/keepalived.conf
  3. root 5636 5635 0 22:20 ? 00:00:00 keepalived -D -f /etc/keepalived/keepalived.conf
  4. root 5637 5635 0 22:20 ? 00:00:00 keepalived -D -f /etc/keepalived/keepalived.conf
  5. root 5972 5637 0 22:22 ? 00:00:00 keepalived -D -f /etc/keepalived/keepalived.conf
  6. root 5980 2537 0 22:22 pts/0 00:00:00 grep --color=auto keepalived
  7. [root@slave1 nginx-1.5.3]#

同样的方式在salve2上配置,注意配置文件红色标记的地方

在浏览器输入虚拟ip  192.168.2.199 进行访问

此时通过ip addr 命令进行ip查询

slave1

slave2

keepalived + nginx就是为了实现高可用,如果任意一台nginx或者keepalived挂掉之后,只要环境中还有一台机器正在执行,用户都应该能对应用进行访问

下面模拟环境发生故障

根据keepalived里面配置的检测nginx的脚本,如果检测到nginx挂掉后,应该会尝试重启,如果重启不成功,就会关掉该服务器上对应的keepalived,这样就会进行VIP切换

1.由于现在slave1为VIP指向地址,现在关闭掉slave1上的nginx

  1. [root@slave1 nginx-1.5.3]# date
  2. Tue Sep 12 22:36:30 CST 2017
  3. [root@slave1 nginx-1.5.3]# ps -ef | grep nginx
  4. root 5371 1 0 21:59 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  5. www 5372 5371 0 21:59 ? 00:00:00 nginx: worker process
  6. www 5373 5371 0 21:59 ? 00:00:00 nginx: worker process
  7. www 5374 5371 0 21:59 ? 00:00:00 nginx: worker process
  8. www 5375 5371 0 21:59 ? 00:00:00 nginx: worker process
  9. www 5376 5371 0 21:59 ? 00:00:00 nginx: worker process
  10. www 5377 5371 0 21:59 ? 00:00:00 nginx: worker process
  11. www 5378 5371 0 21:59 ? 00:00:00 nginx: worker process
  12. www 5379 5371 0 21:59 ? 00:00:00 nginx: worker process
  13. root 9142 9141 0 22:36 ? 00:00:00 sh -c /usr/local/chk_nginx_pid.sh
  14. root 9143 9142 0 22:36 ? 00:00:00 vi /usr/local/chk_nginx_pid.sh
  15. root 9149 2537 0 22:36 pts/0 00:00:00 grep --color=auto nginx
  16. [root@slave1 nginx-1.5.3]# kill -quit 5371
  17. [root@slave1 nginx-1.5.3]#

在查看slave1上的ip信息(没有了199)

再查看slave2上的ip信息

再通过 http://192.168.2.199/ 进行访问,你会发现,访问一切正常,符合预期

===============================================================================================================

按照同样方式,可以部署任意多个backup节点, 如果是线上高并发环境,最好在不同机房,不同线路上均部署上,并且根据设备好坏配置对应的优先级

Linux巩固记录(9) keepalived+nginx搭建高可用负载分发环境的更多相关文章

  1. Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)

    原文:https://my.oschina.net/xshuai/blog/917097 摘要: Nginx+Keepalived搭建高可用负载均衡环境(HA) http://blog.csdn.ne ...

  2. Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)-转帖篇

    原文:https://my.oschina.net/xshuai/blog/917097 摘要: Nginx+Keepalived搭建高可用负载均衡环境(HA) http://blog.csdn.ne ...

  3. [转]搭建Keepalived+Nginx+Tomcat高可用负载均衡架构

    [原文]https://www.toutiao.com/i6591714650205716996/ 一.概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最 ...

  4. 【Linux运维-集群技术进阶】Nginx+Keepalived+Tomcat搭建高可用/负载均衡/动静分离的Webserver集群

    额.博客名字有点长.. . 前言 最终到这篇文章了,心情是有点激动的. 由于这篇文章会集中曾经博客讲到的全部Nginx功能点.包含主要的负载均衡,还有动静分离技术再加上这篇文章的重点.通过Keepal ...

  5. Keepalived+HAProxy 搭建高可用负载均衡

    转载自:https://mp.weixin.qq.com/s/VebiWftaRa26x1aA21Jqww 1. 概述 软件负载均衡技术是指可以为多个后端服务器节点提供前端IP流量分发调度服务的软件技 ...

  6. Keepalived+lvs 搭建高可用负载均衡

    本站点停止更新,请访问:blog.coocap.com 不了解负载均衡高可用的童鞋,强烈建议先看keepalived+nginx高可用负载均衡: 传送门(求粉):http://www.cnblogs. ...

  7. Keepalived+Nginx实现高可用负载均衡集群

    一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+nginx双主高可用负载均衡集群及LAMP应用keepalived-1 ...

  8. Keepalived + Nginx + Tomcat 高可用负载均衡架构

    环境: 1.centos7.3 2.虚拟ip:192.168.217.200 3.192.168.217.11.192.168.217.12上分别部署Nginx Keepalived Tomcat并进 ...

  9. KeepAlived+Nginx实现高可用负载

    一.环境及安装版本: centos6.5.Nginx1.4.7.keepalived1.3.2 虚拟IP 真是IP Nginx端口 主从分配 10.0.90.215 10.0.90.217 80 MA ...

随机推荐

  1. centos7 安装网卡

    1.虚拟机测试,先开启命令行 su systemctl set-default multi-user.target reboot 2.编辑网卡 虚拟机网络设置成桥接模式 vi /etc/sysconf ...

  2. Linux硬件信息命令大全

    硬件信息 在linux系统中,有很多命令可以用于查询主机的硬件信息,有些命令仅仅针对于特定的硬件部件,比如cpu,内存等,而有些命令可以查询很多的硬件信息. 这篇帖子简单地带大家了解一下最常用的查询各 ...

  3. Le Chapitre V

    Chaque jour j'apprennais quelque chose sur la planète, sur le départ, sur le voyage. Ca venait tout ...

  4. AngularJS实战之路由ui-view

    1. 路由(ui-router) 1.1. 环境 1) angular.min.js 2) angular-ui-router-0.2.10.js 3) 确保确保包含ui.router为模块依赖关系. ...

  5. 编译时:virtual memory exhausted: Cannot allocate memory,常见于VPS

    原文链接:http://blog.csdn.net/taiyang1987912/article/details/41695895 一.问题 当安装虚拟机时系统时没有设置swap大小或设置内存太小,编 ...

  6. Word图片上传控件-eWebEditor9x整合教程-Xproer.WordPaster

    示例下载(JSP):eWebEditor9x, 示例下载(.NET):eWebEditor9x,   1.1. 集成到eWebEditor9x 主要步骤如下: 1.增加WordPaster文件夹   ...

  7. Redis集群master选举时长测试

    在一台物理机上启动6个Redis实例,组成3主3从集群,端口号依次为:1379 ~ 1384,端口号1379.1380和1384三个为master,端口1379的进程ID为17620.现将进程1762 ...

  8. WinSockets编程(六)select模式

    select模式的思想 创建FD_SET fd_all,并初始化FD_ZERO(&fd_all); Step1  初始时: Step2   加入一个套接字之后,比如FD_SET(sServer ...

  9. 知识点:定义input type=file 样式的方法(转)

    ——“当我们想要用css美化表单的时候,有两个控件就会和前段人员作对,一个是是大名鼎鼎的select,另一个就是我现在要说说的 input type=file” 为什么要美化file控件?试想一下,别 ...

  10. Java理论学时第三节。课后作业。

    如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算? 运行结果. 根据我的总结,它们三个的优先级是:构造方法 > 字段初始值 > 初始化块. 当多个类之间有继承关系 ...