Linux巩固记录(9) keepalived+nginx搭建高可用负载分发环境
环境准备(继续服用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进行安装,免除编译
#安装编译nginx需要的相关依赖
yum -y install pcre-devel openssl-devel perl-ExtUtils-Embed
cd /usr/local/src #获取nginx
wget http://nginx.org/download/nginx-1.5.3.tar.gz #解压
tar -zxvf nginx-1.5.3.tar.gz cd nginx-1.5.3
#创建www组下www用户
useradd -s /sbin/nologin -M www
#配置路径及参数(注意最后那部分标红色的参数)
./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" #编译及安装
make && make install
#测试用默认配置文件是否成功
[root@slave1 nginx-1.5.3]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
#修改nginx配置文件
vi /usr/local/nginx/conf/nginx.conf
user www www;
worker_processes 8;
error_log logs/error.log;
pid logs/nginx.pid; events {
worker_connections 1024;
} http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on; upstream web_server_pool {
#ip_hash; #如果需要保持session一致,需要开启这个选项,可以保证同一台机器每次访问都分配到同一服务器
server 192.168.2.100:9011 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.2.100:9012 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.2.100:9013 weight=4 max_fails=2 fail_timeout=30s;
} server {
listen 80;
server_name slave1; # node2 改为slave2 或者ip地址
location / {
root html;
index index.html index.htm;
proxy_pass http://web_server_pool;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
#启动nginx
/usr/local/nginx/sbin/nginx #默认会加载其上级目录conf中的nginx.conf #如果加载其他路径的配置文件按照如下方式进行
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#检查运行情况
[root@slave1 nginx-1.5.3]# ps -ef | grep nginx
root 5112 1 0 21:34 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
www 5113 5112 0 21:34 ? 00:00:00 nginx: worker process
www 5114 5112 0 21:34 ? 00:00:00 nginx: worker process
www 5115 5112 0 21:34 ? 00:00:00 nginx: worker process
www 5116 5112 0 21:34 ? 00:00:00 nginx: worker process
www 5117 5112 0 21:34 ? 00:00:00 nginx: worker process
www 5118 5112 0 21:34 ? 00:00:00 nginx: worker process
www 5119 5112 0 21:34 ? 00:00:00 nginx: worker process
www 5120 5112 0 21:34 ? 00:00:00 nginx: worker process
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
yum -y install keepalived
顺便提下: 最初我采用和nginx一样的下载源码编译方式安装,一直没通过,甚至还修改了Makefile也不行,C语言丢了好多年了,就没继续折腾了
#编辑配置文件
vi /etc/keepalived/keepalived.conf
global_defs {
notification_email { #指定keepalived在发生事情的时候,发送邮件告知,可以有多个地址,每行一个。
changw.xiao@qq.com
}
notification_email_from changw.xiao@qq.com #指定发件人
smtp_server smtp.qq.com #发送email的smtp地址
smtp_connect_timeout 30 #超时时间
router_id NODEA #运行keepalived的机器的一个标识,多个节点标识可以相同,也可以不同
vrrp_skip_check_adv_addr
vrrp_strict #严格执行VRRP协议规范,此模式不支持节点单播
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_http_port {
script "/usr/local/chk_nginx_pid.sh" #这用于keepalived检测nginx是否还在运行
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER #主节点用master,其他都用backup
interface ens33 #网卡名称
virtual_router_id 50 #所有节点参数要一致
priority 100 #权重,值越大,优先分派
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168.2.199/24 #虚拟ip,暴露给调用方使用的,调用方就通过这个ip获取服务,不会关心nginx和具体服务地址
}
}
同时我把backup节点配置信息也一并贴出来
global_defs {
router_id NODEB
}
vrrp_script chk_http_port {
script "/usr/local/chk_nginx_pid.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 50
priority
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168.2.199/24
}
}
backup节点配置文件中少了邮件通知配置,不过邮件通知配置是错误的,没生效,具体日后研究了贴配置
配置文件中有一个shell脚本用于检测nginx是否启动
vi /usr/local/chk_nginx_pid.sh
#!/bin/bash
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
then
systemclt start nginx.service #尝试重启(通过编译方式安装的貌似不生效)
sleep 5
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
then
killall keepalived #关掉keepalived,以便进行切换VIP指向
fi
fi
记得修改shell权限
chmod 775 /usr/local/chk_nginx_pid.sh
启动keepalived
keepalived -D -f /etc/keepalived/keepalived.conf
[root@slave1 nginx-1.5.3]# ps -ef |grep keepalived
root 5635 1 0 22:20 ? 00:00:00 keepalived -D -f /etc/keepalived/keepalived.conf
root 5636 5635 0 22:20 ? 00:00:00 keepalived -D -f /etc/keepalived/keepalived.conf
root 5637 5635 0 22:20 ? 00:00:00 keepalived -D -f /etc/keepalived/keepalived.conf
root 5972 5637 0 22:22 ? 00:00:00 keepalived -D -f /etc/keepalived/keepalived.conf
root 5980 2537 0 22:22 pts/0 00:00:00 grep --color=auto keepalived
[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
[root@slave1 nginx-1.5.3]# date
Tue Sep 12 22:36:30 CST 2017
[root@slave1 nginx-1.5.3]# ps -ef | grep nginx
root 5371 1 0 21:59 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
www 5372 5371 0 21:59 ? 00:00:00 nginx: worker process
www 5373 5371 0 21:59 ? 00:00:00 nginx: worker process
www 5374 5371 0 21:59 ? 00:00:00 nginx: worker process
www 5375 5371 0 21:59 ? 00:00:00 nginx: worker process
www 5376 5371 0 21:59 ? 00:00:00 nginx: worker process
www 5377 5371 0 21:59 ? 00:00:00 nginx: worker process
www 5378 5371 0 21:59 ? 00:00:00 nginx: worker process
www 5379 5371 0 21:59 ? 00:00:00 nginx: worker process
root 9142 9141 0 22:36 ? 00:00:00 sh -c /usr/local/chk_nginx_pid.sh
root 9143 9142 0 22:36 ? 00:00:00 vi /usr/local/chk_nginx_pid.sh
root 9149 2537 0 22:36 pts/0 00:00:00 grep --color=auto nginx
[root@slave1 nginx-1.5.3]# kill -quit 5371
[root@slave1 nginx-1.5.3]#
在查看slave1上的ip信息(没有了199)

再查看slave2上的ip信息

再通过 http://192.168.2.199/ 进行访问,你会发现,访问一切正常,符合预期
===============================================================================================================
按照同样方式,可以部署任意多个backup节点, 如果是线上高并发环境,最好在不同机房,不同线路上均部署上,并且根据设备好坏配置对应的优先级


Linux巩固记录(9) keepalived+nginx搭建高可用负载分发环境的更多相关文章
- Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)
原文:https://my.oschina.net/xshuai/blog/917097 摘要: Nginx+Keepalived搭建高可用负载均衡环境(HA) http://blog.csdn.ne ...
- Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)-转帖篇
原文:https://my.oschina.net/xshuai/blog/917097 摘要: Nginx+Keepalived搭建高可用负载均衡环境(HA) http://blog.csdn.ne ...
- [转]搭建Keepalived+Nginx+Tomcat高可用负载均衡架构
[原文]https://www.toutiao.com/i6591714650205716996/ 一.概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最 ...
- 【Linux运维-集群技术进阶】Nginx+Keepalived+Tomcat搭建高可用/负载均衡/动静分离的Webserver集群
额.博客名字有点长.. . 前言 最终到这篇文章了,心情是有点激动的. 由于这篇文章会集中曾经博客讲到的全部Nginx功能点.包含主要的负载均衡,还有动静分离技术再加上这篇文章的重点.通过Keepal ...
- Keepalived+HAProxy 搭建高可用负载均衡
转载自:https://mp.weixin.qq.com/s/VebiWftaRa26x1aA21Jqww 1. 概述 软件负载均衡技术是指可以为多个后端服务器节点提供前端IP流量分发调度服务的软件技 ...
- Keepalived+lvs 搭建高可用负载均衡
本站点停止更新,请访问:blog.coocap.com 不了解负载均衡高可用的童鞋,强烈建议先看keepalived+nginx高可用负载均衡: 传送门(求粉):http://www.cnblogs. ...
- Keepalived+Nginx实现高可用负载均衡集群
一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+nginx双主高可用负载均衡集群及LAMP应用keepalived-1 ...
- Keepalived + Nginx + Tomcat 高可用负载均衡架构
环境: 1.centos7.3 2.虚拟ip:192.168.217.200 3.192.168.217.11.192.168.217.12上分别部署Nginx Keepalived Tomcat并进 ...
- KeepAlived+Nginx实现高可用负载
一.环境及安装版本: centos6.5.Nginx1.4.7.keepalived1.3.2 虚拟IP 真是IP Nginx端口 主从分配 10.0.90.215 10.0.90.217 80 MA ...
随机推荐
- mysql之索引查询1
一 备份数据 备份库: mysqldump:拷贝数据 --database:数据库 基本语法是:mysqldump -h服务器名 -u用户名 -p密码 --database 库名 > 备份路径. ...
- SQL SERVER 如果判断text类型数据不为空
一个字段Remark的数据类型设置先设置为varcharr(255),后来考虑到扩展性需要将其定义为TEXT类型,但是SQL 语句报错. SQL 语句: SELECT * FROM ...
- php 制作验证码不显示的问题
php制作验证码的代码,这里就不多说了,网上有很多的,这里说一些可能遇到的问题. 1. 首先是检查自己的php.ini文件,是否支持gd库. 2.保证代码没有出问题. 3.检查字体文件路径是否正确. ...
- 2018.12.19 atcoder Iroha and a Grid(组合数学)
传送门 组合数学好题. 给你一个hhh行www列的网格,其中左下角aaa行bbb列不能走,问从左上角走到右下角有多少种走法(每次只能向右或者向下) 我们考虑分步计数. 我们一共能走的区域是总网格区域去 ...
- 2018.11.07 NOIP训练 lzy的游戏(01背包)
传送门 考虑对于每次最后全部选完之后剩下的牌的集合都对应着一种构造方法. 一个更接地气的说法: 设消耗的牌数为ttt,如果使用的牌的lll值之和也为ttt,则对应着一种构造方式让这种情形成立. 于是做 ...
- Liferay
Liferay是一个开源公司,我们一般谈Liferay是指的Liferay Portal.Liferay Portal始创于2000年的洛杉机,当时是一个非营利性组织.于2004年建立Liferay公 ...
- 下载安装mysql的一些坑
在mysql下载安装的过程中会有一些坑,另外navicat连接mysql数据库时也存在一定的坑,总结如下: 1.计算机中丢失某个dll文件 这个问题好解决,下载个文件就搞定了,下载地址:https:/ ...
- AttributeError: type object 'testClass' has no attribute 'testMothod'
点击"Unittest for test_post_API.testClass"按钮,点击”Edit configuration...“,弹出对话框Run/Debug config ...
- Win7 VS2013环境cuda_7.5.18的一些坑
thrust库的sort算法,在x86平台使用就崩溃,x64就没问题,搜了下好像是很早的版本,4开始就有这样的问题了,原因不明. http://stackoverflow.com/questions/ ...
- 程序员面试50题—sizeof的用法(6)
以下为Windows下的32 位C++程序,请计算sizeof 的值void Func ( char str[100] ){sizeof( str ) = ?}void *p = malloc( 10 ...