用NGINX做负载均衡,keepalived高可用

实验环境,四台虚拟机,两台做负载均衡,两台做RS
IP地址:两台负载均衡分别为:10.0.0.7;10.0.0.8(高可用keepalived)
两台 RS主机地址为: 10.0.0.9;10.0.0.10
系统:centos6.6
介绍说明
实现Nginx负载均衡的组件主要有两个,
ngx_http_proxy_module proxy代理模块,用于把请求抛给服务器节点或者upstream服务池
ngx_http_unpstream_module 负载均衡模块,可以实现网站的负载均衡功能以及节点的健康检查

  1. 首先在四台机器上都安装上Nginx服务

其中安装过程如下,

#安装Nginx需要的依赖包 
yum -y install openssl openssl-devel pcre pcre-devel
#下载Nginx源码包
wget -q http://nginx.org/download/nginx-1.6.3.tar.gz
#解压Nginx源码包
tar xvf nginx-1.6.3.tar.gz
#进入解压之后的Nginx目录
cd nginx-1.6.3
#创建Nginx的组groupadd nginx
#创建Nginx的用户,并且不允许登录操作系统
useradd -s /sbin/nologin -g nginx nginx
#进行编译
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx-1.6.3 --with-http_stub_status_module --with-http_ssl_module
#编译后安装
make && make install
#创建一个软连接
ln -s /usr/local/nginx-1.6.3/sbin/nginx /etc/init.d/nginx

启动Nginx服务
/usr/local/nginx-1.6.3/sbin/nginx -c /usr/local/nginx-1.6.3/conf/nginx.conf
添加80端口到防火墙,被允许访问
sed -i ‘10i -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT’ /etc/sysconfig/iptables
重启防火墙
/etc/init.d/iptables restart

其中,两台RS的nginx.conf配置如下:

#Nginx的进程数
worker_processes  1;
events {worker_connections  1024;
}
#主配置文件
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for" ';
#进行虚拟主机等配置的模块server {listen       80;server_name  bbs.etiantian.org;location / {root   html/bbs;index  index.html index.htm;}access_log logs/access_bbs.log main;}server {listen       80;server_name  www.etiantian.org;location / {root   html/www;index  index.html index.htm;}access_log logs/access_bbs.log main;}
}

然后分别在两台上执行以下命令

[root@web01 ~]# mkdir /usr/local/nginx-1.6.3/html/{www,bbs}
[root@web01 ~]# for dir in www bbs;do echo "`ifconfig eth0|grep -o "10.0.0.[109]."` $dir " > /usr/local/nginx-1.6.3/html/$dir/index.html;done
[root@web01 ~]# for dir in www bbs;do cat /usr/local/nginx-1.6.3/html/$dir/index.html ;done

web02主机上执行以下

[root@web01 ~]# mkdir /usr/local/nginx-1.6.3/html/{www,bbs}
[root@web02 ~]# for dir in www bbs;do echo "`ifconfig eth0|grep -o "10.0.0.[109]."` $dir " > /usr/local/nginx-1.6.3/html/$dir/index.html;done
[root@web02 ~]# for dir in www bbs;do cat /usr/local/nginx-1.6.3/html/$dir/index.html ;done

然后在主备负载均衡器:10.0.0.7,8两台机器上配置nginx.conf文件

[root@lb01 ~]# vim /usr/local/nginx-1.6.3/conf/nginx.conf
worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;
#定义web服务池,其中包含了两个节点upstream www_server_pools {server 10.0.0.9:80 weight=1;server 10.0.0.10:80 weight=1;}server {listen       80;server_name  www.etiantian.org;location / {
#访问web服务器池的节点proxy_pass http://www_server_pools;}}}

测试
由于我本实验没有dns域名服务器解析IP地址,所以我们得要在hosts文件里面添加ip和对应的域名
首先在两台RS/etc/hosts分别加入

10.0.0.9     www.etiantian.org
10.0.0.9     bbs.etiantian.org10.0.0.10     www.etiantian.org
10.0.0.10     bbs.etiantian.org

然后在Nginx主负载均衡服务器上/etc/hosts

10.0.0.7     www.etiantian.org
  1. keepalive高可用之间是通过VRRP通信的,那么,什么是VRRP呢?

VRRP是虚拟路由冗余协议,它是为了解决静态路由的单点故障的
VRRP是通过一种竞选协议机制来将路由任务交给某台VRRP路由器的
VRRP用IP多播的方式实现高可用之间的通信
VRRP工作是主节点发包,备节点接包,档备节点收不到主节点发的数据包的时候,就启动接管程序接管主节点的资源。备节点可以有很多个,通过优先级竞选,但一般keepalive系统运维中都是一对存在的

1. 因此,keepalive是通过VRRP进行通信的,VRRP是通过竞选机制进行确定主备的,主的优选级高于备的优级,工作时候,主首先获得所有资源,备节点处于等待状态,当主节宕机的时候,备节点就会接管主节点的所有资源,然后顶替主节点对外提供所有服

开始安装keepalived软件
yum -y install keepalived
/etc/init.d/keepalived start
修改配置文件
主节点

1 ! Configuration File for keepalived
2
3 global_defs {
4 notification_email {
5 919497370@qq.com
6 #failover@firewall.loc
7 #sysadmin@firewall.loc
8 }
9 notification_email_from Alexandre.Cassen@firewall.loc
10 smtp_server smtp.qq.com
11 smtp_connect_timeout 30
12 router_id lb01
13 }
14
15 vrrp_instance VI_1 {
16 state MASTER
17 interface eth0
18 virtual_router_id 55
19 priority 150
20 advert_int 1
21 authentication {
22 auth_type PASS
23 auth_pass 1111
24 }
25 virtual_ipaddress {
26 #192.168.200.16
27 #192.168.200.17
28 #192.168.200.18
29 10.0.0.12/24 dev eth0 label eth0:1
30 }
31 }

备节点

  1 ! Configuration File for keepalived23 global_defs {4    notification_email {5      919497370@qq.com6      #failover@firewall.loc7      #sysadmin@firewall.loc8    }9    notification_email_from Alexandre.Cassen@firewall.loc10    smtp_server smtp.qq.com11    smtp_connect_timeout 3012    router_id lb0213 }1415 vrrp_instance VI_1 {16     state BACKUP17     interface eth018     virtual_router_id 5519     priority 10020     advert_int 121     authentication {22         auth_type PASS23         auth_pass 111124     }25     virtual_ipaddress {26         #192.168.200.1627         #192.168.200.1728         #192.168.200.1829         10.0.0.12/24 dev eth0 label eth0:130     }31 }32

转载于:https://www.cnblogs.com/sujc-blogs/p/9722485.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

collection转换为list_JAVA 集合 接口继承关系和实现,List,Set,Map(总结)

一. JAVA 集合1.接口继承关系和实现集合类存放于 Java.util 包中,主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)。1. Collection:Collection 是集合 List、Set、Queue 的最基本的接口。2. Iterator&#xff…

采用类药五规则成功设计药物的案例

在药物设计中采用类药五规则(Lipinski’s Rule of Five)的一个著名例子是非核苷类反转录酶抑制剂(NNRTI)伊法韦伦(Efavirenz)的开发。伊法韦伦是用于治疗HIV的药物,其设计过程考虑了类药五规则&…

lazarus开发android应用程序指南,Lazarus开发Android应用程序指南(2)

本指南版权由delphicn所有,QQ:1339838080(tom),转载请保留版权信息。文中难免有错,欢迎指正。2.编译运行lazarus中的Android示例程序。lazarus安装包中自带示例是在lazarus/examples/androidlcl/androidlcltest.lpi 。…

plsqldevelop安装教程

一、下载并解压压缩包,解压后有如下文件: 二、运行PLSQL Developer10.0.5.1710.exe文件,可以修改文件安装路径,然后一直下一步下一步就可以了; 三、运行软件汉化包PLSQL Developer10.0.5.1710_CHS.exe,不用管一直下一步…

android上运行java命令,Java exec()不在android上运行busybox命令

我想通过java程序运行一些shell命令 . 应用程序只接受命令在shell上执行它并返回结果 .我用过这个:进程p Runtime.getRuntime() . exec(in); p.waitFor(); BufferedReader reader new BufferedReader(new InputStreamReader(p.getInputStream())); String line r…

java优先队列_Java高级特性增强-多线程

请戳GitHub原文: https://github.com/wangzhiwubigdata/God-Of-BigData大数据成神之路系列:请戳GitHub原文: https://github.com/wangzhiwubigdata/God-Of-BigDataJava高级特性增强-集合Java高级特性增强-多线程Java高级特性增强-SynchronizedJava高级特性增强-vola…

noip模拟赛 立方数2

题目描述LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数,例如1,8,27就是最小的3个立方数。LYK还定义了一个数叫“立方差数”,若一个数可以被写作是两个立方数的差,则这个数就…

理解JS的6种继承方式

【转】重新理解JS的6种继承方式 写在前面 一直不喜欢JS的OOP,在学习阶段好像也用不到,总觉得JS的OOP不伦不类的,可能是因为先接触了Java,所以对JS的OO部分有些抵触。 偏见归偏见,既然面试官问到了JS的OOP,那…

android 滚动列表框,建立滚动列表框

另一个可代替一组单选按钮及复选框的是滚动列表框(见图6.9)。使用滚动列表框,你可以建立一个选项列表,用户可以从中选择一个或多个选项。你可以使用建立下拉式列表框的标识符来建立一个滚动列表框,只是使用不同的属性。下面是个例子&#xff…

mysql远程连接错误10038--navicat for mysql (10038)

mysql远程连接错误10038--navicat for mysql (10038) 转载:http://blog.csdn.net/chana1101/article/details/39641415 http://www.cnblogs.com/ohmydenzi/p/5521121.html ubuntu server16.04.1下安装了MySQL 5.7数据库,然后在windows下通过Navicat for …

collection集合 多少钱_面试必备-Java集合框架

Java集合框架面试题常见集合集合可以看作是一种容器,用来存储对象信息。 数组和集合的区别: (1)数组长度不可变化而且无法保存具有映射关系的数据;集合类用于保存数量不确定的数据,以及保存具有映射关系的数…

html鼠标滚动图片折叠,鼠标滑过图片3D折叠效果

本教程我们将使用CSS3 3D transforms和jQuery来制作一个神奇的3D折叠效果。在我们的demo中,图片在鼠标滑过的时候被折叠,空出来的部分将显示图片的一些信息。我们将创建一个放置图片html结构,当鼠标滑过它时,使用jQuery来将折叠或…

微信小程序开发之普通链接二维码

本文主要介绍扫普通链接二维码打开小程序, 详情请看官方文档https://mp.weixin.qq.com/debug/wxadoc/introduction/qrcode.html 配置普通链接二维码规则 生成二维码 访问https://cli.im/url,将https://test.com/linkcode?id1_2生成二维码图片 小程序接收…

python mysql实例_Python 操作MySQL详解及实例

使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MySQLdb),PyMySQL和SQLAlchemy。 Python-MySQL资格最老,核心由C语言打造,接口精炼,性能最棒,缺点是环境依赖较多…

servlet3.0注解loadOnStartup不起作用解决方案

多次尝试3.0在源码中直接用注解配置loadOnStartup1,即web应用启动时创建servlet实例,发现不起作用,但是在web.xml配置则可以正常运行。先上源码。 package lee;import javax.servlet.http.*; import javax.servlet.*; import javax.servlet.a…

html checked属性值,HTML复选框的checked属性的值是多少?

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?我们都知道如何在HTML中构成复选框输入:我不知道 - 选中复选框的技术上正确的值是多少?我已经看到了这些工作:答案是无关紧要的…

3位水仙花数计算pythonoj_Python解答蓝桥杯省赛真题之从入门到真题

若发现此文章消失,则是在等待审核中,稍等一会儿即可显示,谢谢。 另外,我会尽量晚上上传更新题目。 此文章太长了,导致MD编辑器很卡,另写了一篇接续 传送门 Python解答蓝桥杯省赛真题之从入门到真题 &#x…

js 将json字符串转换为json对象的方法解析

js 将json字符串转换为json对象的方法解析 将json字符串转换为json对象的方法。在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键例如&#…

uniapp怎么解析html字符串,uniapp富文本解析插件的详细使用教程

如果你作为文章资源类或者博客类的小程序你就会发现,很多时候你的文章数据都是html格式或md格式,这样如果不经过处理,会非常难看,所以富文本解析就显得格外重要了,今天给大家写一个uniapp怎么使用富文本解析插件的教程…

c++和python有联系吗_Python和C++交互

关键字:Python 2.7,VS 2010,swig OS:Win8.1 with update。 1.下载swig:http://www.swig.org/download.html 2.将swig的路径添加到环境变量Path,例如set pathC:\swigwin-3.0.2。 3.用VS创建一个win32 consol…