nginx负载均衡+keepalived高可用
nginx负载均衡+keepalived高可用
环境准备
- 192.168.88.111:nginx + keepalived MASTER
- 192.168.88.112:nginx + keepalived BACKUP
- 192.168.88.113:JDK+Tomcat(运行Tomcat需要JDK),index.html内容“88.113”
- 192.168.88.114:JDK+Tomcat(运行Tomcat需要JDK),index.html内容“88.114”
- 192.168.88.115:vip
上述机器要先行安装一些常用软件,如vim,lrzsz(rz在本地上传文件,sz下载文件到本地),gcc等等。
Nginx、JDK和Tomcat均采用源码包(*.tar.gz)安装,最新的稳定版本到各自的官网下载。把软件包和安装脚本(脚本UTF8格式编写,上传到linux上记得要用vim编辑器:set ff=unix)放到机器指定的文件夹下方便寻找,如我的是:mkdir /root/install_packages。
88.113-114安装JDK+Tomcat
安装JDK
#进入安装包所在目录
cd /root/install_packages
#编写安装jdk的脚本
vim install_java.sh
#!/bin/bash
#定义变量PKN,记录安装包名PKN=jdk-8u131-linux-x64.tar.gz
#解压安装包到指定路径
tar -xf $PKN -C /usr/local/
#在/etc/profile下追加全局变量JAVA_HOME=/usr/local/jdk1.8.0_131,并让改动立即生效
echo "export JAVA_HOME=/usr/local/jdk1.8.0_131" >> /etc/profile
source /etc/profile
#等待4秒后再往下执行脚本
sleep 4
#在/etc/profile中追加环境变量,并立即生效
echo "export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$JAVA_HOME/bin:$JAVA_HOME/db/bin:$JAVA_HOME/jre/bin" >> /etc/profile
source /etc/profile
#测试java是否安装成功,若成功则会显示版本信息
java -version sh install_java.sh #执行脚本,脚本要和安装包放在同一路径下
source /etc/profile #使得/etc/profile的改动立即生效,虽然脚本最后已经执行过,但确保改动能生效,这里再执行一次
java -version #测试jdk是否安装成功
安装Tomcat(比较简单,解压了就能启动,不用刻意写成脚本)
cd /root/install_packages
#解压缩安装包到指定路径下
tar xf apache-tomcat-8.5..tar.gz -C /usr/local/
进入安装包解压路径,改个名字
#cd /usr/local/
mv apache-tomcat-8.5. tomcat8
cd
#启动tomcat
sh /usr/local/tomcat8/bin/startup.sh
#分别在88.113和88.114编写两个index.html,放到网站根目录下
echo "<h1>88.113</h1>" > /usr/local/tomcat8/webapps/ROOT/index.html
echo "<h1>88.114</h1>" > /usr/local/tomcat8/webapps/ROOT/index.html
88.111-88.112安装Nginx+keepalived
安装Nginx(脚本有缺陷,重启机器后,nginx启动报找不到“/var/run/nginx/...”的错,但脚本中明明就已经创建了对应的路径,有待考究)。
cd /root/install_packages
#编写安装nginx脚本
vim install_nginx.sh
#定义变量,记录tomcat压缩包名
PKN=nginx-1.16..tar.gz
#安装依赖包,创建用户和用户组
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
groupadd -r nginx
useradd -s /sbin/nologin -g nginx -r nginx
#解压压缩包
tar xf $PKN
cd nginx-1.16.
mkdir /var/run/nginx/;chown nginx.nginx /var/run/nginx/
./configure \ #生成makefile文件
--prefix=/usr/local \ #指定安装路径
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \ #指定主配置文件的路径
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx/nginx.pid \
--user=nginx \
--group=nginx \
--with-http_ssl_module
make && make install #编译,安装
#启动nginx
nginx
nginx负载均衡配置(加粗字体即为负载均衡配置)
worker_processes ; #nginx进程数,一般设置等于cpu核心数
#工作模式及连接数上限
events {
use epoll; #epoll工作模式比select好
worker_connections ; #单个进程连接数上限
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on; #开启高效文件传输模式
keepalive_timeout ; #长连接超时时间,单位为秒
upstream tomcatserver{ #weight是权重,数值越大,轮询的几率越大。若服务器在fail_timeout时间内出现max_fails次连接失败,则nginx认为该服务器已挂掉,在fail_timeout时间内不再轮询该服务器
server 192.168.88.113: weight= max_fails= fail_timeout=30s;
server 192.168.88.114: weight= max_fails= fail_timeout=30s;
}
server {
listen ;
server_name www.kamin.com; #域名
location / {
proxy_pass http://tomcatserver; #http后的名字要和upstream一样,且需要注意,名字不能带“_”号
}
}
}
安装并配置keepalived
yum install -y keepalived vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs {
notification_email { #基本不用,一般使用zabbix监控
@qq.com
}
notification_email_from @qq.com
smtp_server 192.168.200.1
smtp_connect_timeout
router_id nginx_master #keepalived机器的id,不同机器要不同(114:nginx_backup)
} vrrp_instance VI_1 {
state MASTER #一台MASTER主,一台BACKUP备(114:BACKUP),vip只会绑定在keepalived的其中一台,且总是绑在MASTER上
interface ens32 #网卡名
virtual_router_id 51 #同一组keepalived里的该参数必须相同
priority 150 #优先级,数值越大, 优先级越大,优先获得资源(抢vip),BACKUP的优先级数值应比MASTER小
advert_int 1 #心跳间隔
authentication { #两台机器之间的通讯密码
auth_type PASS
auth_pass
}
virtual_ipaddress { vip地址
192.168.88.115/
}
}
装了keepalived的服务器切记要关闭防火墙什么的,保证它们互相之间能连通,不然容易发生裂脑状况。具体百度。
测试
1.访问192.168.88.115,正常情况下一定能通且流量一定是走MASTER机,因为vip总是会绑在keepalived服务没挂的MASTER机上;
2.MASTER关,BACKUP开,正常情况下还是能访问192.168.88.115,因为keepalived检测到MASTER上的keepalived服务没有启动,因此vip转移到BACKUP上;
有待考虑的问题
1.keepalived是通过检测keepalived进程是否存在判断服务器是否宕机,如果keepalived进程在但是nginx进程不在了那么keepalived是不会做主备切换,所以我们需要写个脚本来监控nginx进程是否存在,如果nginx不存在就将keepalived进程杀掉;
2.宕机的机器重启后,要悉数重启nginx服务和keepalived服务,keepalived服务是通过yum安装的,可以设置开机自启动,nginx呢?
nginx负载均衡+keepalived高可用的更多相关文章
- Keepalived+LVS+Nginx负载均衡之高可用
Keepalived+LVS+Nginx负载均衡之高可用 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常 ...
- Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用
上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ...
- HAProxy+keepalived+MySQL 实现MHA中slave集群负载均衡的高可用
HAProxy+keepalived+MySQL实现MHA中slave集群的负载均衡的高可用 Ip地址划分: 240 mysql_b2 242 mysql_b1 247 haprox ...
- net core 实战之 redis 负载均衡和"高可用"实现
net core 实战之 redis 负载均衡和"高可用"实现 1.概述 分布式系统缓存已经变得不可或缺,本文主要阐述如何实现redis主从复制集群的负载均衡,以及 redis的& ...
- 本文介绍如何使用 Docker Swarm 来部署 Nebula Graph 集群,并部署客户端负载均衡和高可用
本文作者系:视野金服工程师 | 吴海胜 首发于 Nebula Graph 论坛:https://discuss.nebula-graph.com.cn/t/topic/1388 一.前言 本文介绍如何 ...
- [转载]nginx负载均衡+keepalived三主(多主)配置
nginx负载均衡+keepalived三主(多主)配置 1.实验环境,实现目标三台主机分别配置nginx负载均衡对后端多台主机做转发,同时配置keepalived实现HA,保证任意主机出现故障时其他 ...
- dubbo服务层面上的负载均衡和高可用
dubbo上的服务层可以做集群,来达到负载均衡和高可用,很简单,只需要在不同的服务器节点上向同一个zk(内网环境)注册相同的服务 注意就是,消费者不能在同一个zk做这种集群操作的 转载请注明博客出处: ...
- nginx 实现反向代理、负载均衡、高可用
转自:https://blog.csdn.net/zy1471162851/article/details/91795712 tip: nginx是一款高性能的http 服务器/反向代理服务器及电 ...
- 15套java互联网架构师、高并发、集群、负载均衡、高可用、数据库设计、缓存、性能优化、大型分布式 项目实战视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...
随机推荐
- vue中如果在页面中v-model的是字典,那么在定义字典的时候,需要明确定义键值为''或者[],否则给字典的键值赋值后页面不显示
如题 在template模板中 {{}} {{form_temp.blOwnerMemberList}} #是字典的形式哦 {{}} 在return的属性中 form_temp: { blOwnerM ...
- https网站部署成功 CA证书申请 IIS配置
https://www.cnblogs.com/lichunting/p/9274422.html#4276645 参考文档解决方案
- vue-cli的安装及版本查看更新
vue-cli安装 npm install vue-cli -g vue-cli的版本查看 vue -V vue-cli的3.0+以后使用的不是vue-cli了,如果用以上的安装命令安装的并不是最新版 ...
- maven 学习---Maven中央存储库
当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载. 首先,Maven 将从本地资源库获得 Maven 的本地资源库依赖资源, 如果没有找到,然后把它会 ...
- SAP常见查询组合
做SAP开发的,SELECT是必不可少的.新语法出了不少'新鲜'的语法,用法也是五花八门. 新语法有新语法的好处,老语法有老语法的优势. 新语法里把很多的逻辑处理,分组,排重,内表处理全都放到一些关键 ...
- 分库分表的情况下生成全局唯一的ID
分库分表情况下 跨库的问题怎么解决? 分布式事务怎么解决? 查询结果集集合合并的问题? 全局唯一的id怎么解决? 一般要求:1.保证生成的ID全局唯一,不可重复 2.生成的后一个Id必须大于前一个Id ...
- Nginx+lamp构建动静分离项目
一.nginx代理的概述 概述:nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个内部网络代理上网的代理 ...
- Python程序 #!/usr/bin/python 的解释
关于脚本第一行的 #!/usr/bin/python 的解释,相信很多不熟悉 Linux 系统的同学需要普及这个知识,脚本语言的第一行,只对 Linux/Unix 用户适用,用来指定本脚本用什么解释器 ...
- Android开发:为什么你的学习效率如此低,为什么你很迷茫?
一天一天的过的真的是太快了,常常感到时间在前进,而我们还在停滞不前,看似每天努力的工作学习着,仔细想想其实又会发现,一天下来我们好像还真的什么都没干,看似忙碌的一天,我们把时间都用在哪了?学习!可是为 ...
- js语法中一些容易被忽略,但会造成严重后果的细节
一.复杂数据类型-“对象”的地址引用方式,不理解清楚,会出大乱子 复习一下基础概念(老司机略过): JS的数据可以分为简单类型(数字.字符串.布尔值.null和undefined)和 复杂数据类型(对 ...