nginx+keepalived+tomcat实现主从高可用负载均衡
设备:
1、准备四台虚拟机,两台tomcat,两台nginx
2、两台tomcat配置相同,测试页不同
两台Tomcat配置完全相同、只有测试页面不同
安装jdk和tomcat
[root@localhost ~]# rz
导入jdk以及tomcat源码包
[root@localhost ~]# tar xf apache-tomcat-8.5.16.tar.gz
[root@localhost ~]# tar xf jdk-8u191-linux-x64.tar.gz
[root@localhost ~]# mv jdk1.8.0_191 /usr/local/java #移动jdk包到/usr/local/下并取名java
[root@localhost ~]# mv apache-tomcat-8.5.16 /usr/local/tomcat #移动tomcat包到/usr/local/下并取名tomcat
[root@localhost ~]# vi /etc/profile
在最后添加
export JAVA_HOME=/usr/local/java export PATH=$PATH:$JAVA_HOME/bin
[root@localhost ~]# source /etc/profile #生效文件
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh #开启服务
Tomcat1测试页:
[root@localhost ~]# echo “111111” > /usr/local/tomcat/webapps/ROOT/index.jsp
Tomcat2测试页:
[root@localhost ~]# echo “222222” > /usr/local/tomcat/webapps/ROOT/index.jsp
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh #启动服务
[root@localhost ~]# netstat -anpt | grep :8080 #查看8080端口
tcp6 0 0 :::8080 :::* LISTEN 9968/java
关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# netstat -anpt | grep :8080
两台nginx配置完全相同
安装keepalived
[root@localhost ~]# yum install keepalived -y
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# ls
keepalived.conf
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak #备份keeplived配置文件
[root@localhost~]# vim /etc/keepalived/keepalived.conf #修改主配置文件
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval
vrrp_gna_interval
}
vrrp_script chk_http_port { #检测nginx服务是否在运行。有很多方式,比如进程,用脚本检测等等
script "/root/nginx.sh" #这里通过脚本监测
interval #每两秒检测一次
weight - #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -
fall #检测连续2次失败才算确定是真失败。会用weight减少优先级(-255之间)
rise #检测1次成功就算成功。但不修改优先级
}
vrrp_instance VI_1 {
state BACKUP #主keepalived为master,备keeplived为backup
interface ens33
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.200.254
}
track_script { #执行监控的服务。
chk_http_port #引用VRRP脚本,即在 vrrp_script 部分指定的名字。
}
}
编写nginx心跳脚本
[root@localhost ~]# vim nginx.sh
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "" ]; then
/usr/local/nginx/sbin/nginx
sleep
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "" ]; then
systemctl stop keepalived
fi
fi
[root@localhost~]# chmod +x /root/nginx.sh
[root@localhost~]# systemctl restart keeplived #重启keepalived服务
安装Nginx
[root@localhost ~]# rz
导入Nginx源码包
[root@localhost ~]# tar xf xf nginx-1.15.9.tar.gz -C /usr/src
[root@localhost ~]# cd /usr/src/nginx-1.15.9
[root@localhost~]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --with-pcre
[root@localhost~]# ln -sf /usr/local/nginx/sbin/nginx /usr/local/sbin
[root@localhost ~]# ll /usr/local/sbin/nginx
lrwxrwxrwx. 1 root root 27 10月 21 10:50 /usr/local/sbin/nginx -> /usr/local/nginx/sbin/nginx
[root@localhost~]# vim /usr/local/nginx/conf/nginx.conf
user nginx nginx;
worker_processes ;
error_log logs/error.log;
pid logs/nginx.pid;
events {
use epoll;
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
keepalive_timeout ;
gzip on;
upstream tomcat_server {
server 192.168.200.112: weight=; #此处IP为tomcat机IP
server 192.168.200.113: weight=;
}
server {
listen 192.168.200.254:; #监听服务机192.168.200.254的80端口
server_name localhost;
charset utf-;
access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm index.jsp;
proxy_pass http://tomcat_server;
proxy_set_header Host $http_host;
}
}
}
[root@localhost~]# nginx -t #检查语法
[root@localhost~]#nginx #启动服务
[root@localhost~]#killall -HUP nginx #启动服务
[root@localhost ~]# netstat -anpt | grep :80 #检测80端口
[root@localhost ~]# ip a
inet 192.168.200.122/24 brd 192.168.200.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.200.254/32 scope global ens33 #可以看到有多了一个192.168.200.254的网卡
测试:开启多个页面依旧是111和222分配一致


nginx+keepalived+tomcat实现主从高可用负载均衡的更多相关文章
- Nginx(haproxy)+keepalived+Tomcat双主高可用负载均衡
周末的时候一个正在学Linux的朋友问我,高可用怎么玩?我和他微信了将近三个小时,把Nginx和haproxy双主高可用教给他了,今天突然想把这个给写进博客里,供给那些正在学习Linux系统的朋友们, ...
- Lvs+Keepalived+Bind+web构建高可用负载均衡系统
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://hatech.blog.51cto.com/8360868/1417899 --- ...
- LVS+keepalived DR模式配置高可用负载均衡集群
实验环境 LVS-Master 10.0.100.201 VIP:10.0.100.203 LVS-Slave 10.0.100.204 WEB1-Tomcat 10.0.2.29 gat ...
- Lvs+Keepalived+MySQL Cluster架设高可用负载均衡Mysql集群
------------------------------------- 一.前言 二.MySQL Cluster基本概念 三.环境 四.配置 1.LB-Master及LB-Backup配置 2.M ...
- Linux下Keepalived+LVS-DR模式配置高可用负载均衡集群
一.环境说明: 操作系统:Centos-6.5_x86_64 keepalived软件安装在node2和node3机器上. 实际安装之前,先关闭keepalived节点(node ...
- Linux 笔记 - 第十八章 Linux 集群之(三)Keepalived+LVS 高可用负载均衡集群
一.前言 前两节分别介绍了 Linux 的高可用集群和负载均衡集群,也可以将这两者相结合,即 Keepalived+LVS 组成的高可用负载均衡集群,Keepalived 加入到 LVS 中的原因有以 ...
- Keepalived+LVS(dr)高可用负载均衡集群的实现
一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+lvs双主高可用负载均衡集群及LAMP应用keepalived-1.2 ...
- 搭建MySQL高可用负载均衡集群
1.简介 使用MySQL时随着时间的增长,用户量以及数据量的逐渐增加,访问量更是剧增,最终将会使MySQL达到某个瓶颈,那么MySQL的性能将会大大降低.这一结果也不利于软件的推广. 那么如何跨过这个 ...
- 搭建MySQL高可用负载均衡集群(转)
阅读目录 1.简介 2.基本环境 3.配置MySQL主主复制 4.中间件简述 4.1.Haproxy介绍 4.2.keepalived介绍 5.中间件的安装与配置(haproxy.keepalived ...
随机推荐
- laravel中如何区分get数据和post数据
可能有时候会碰到这样的场景: 有一个post提交请求,请求地址为:xxx?id=10,提交的post数据为:id=20而在控制器中,我要同时得到get和post中数据get中的id为10,而post中 ...
- 每天一个linux命令--ssh的host配置用户名密码
1.在终端输入 cd ~/.ssh/ vi config 输入服务器的用户名和密码 souche@kickseed:~/.ssh$ cat config # 这是跳板机的配置,给跳板机的 IP 起个别 ...
- IntelliJ IDEA 2017.3尚硅谷-----生成 javadoc
Locale:输入语言类型:zh_CN Other command line arguments:-encoding UTF-8 -charset UTF-8
- python之路之课后作业
以下代码只包含管理员代码,用户代码和管理员相似 #!/usr/bin/env python # -*- coding: utf-8 -*- import sys import os sys.path. ...
- rancher版本问题引发的节点注册失败失败
rancher版本问题引发的节点注册失败失败 待办 https://www.cnblogs.com/Me1onRind/p/11147639.html
- 使用c#做前台页面
1.有很多组件,组件右属性,事件 2.在table中,操作用的是图片 3.打开dialog时,其他窗体不能使用 4.在子窗体编辑完,对后台操作后,在父窗体加载一下数据
- Android 获取手机的厂商、型号、Android系统版本号等工具类(转载)
Android 获取手机的厂商.型号.Android系统版本号等工具类 1.获取手机制造厂商 2.获取手机型号 3.获取手机系统当前使用的语言 4.获取Android系统版本号 5.获取手机IMEI串 ...
- 基于原生PHP的路由分配实现
对于由原生PHP写成的独立PHP框架,利用单一入口文件实现路径的访问.这时我们会遇到的首要问题是:文件的相互包含,其次就是路由分配.当我们不利用成熟的PHP框架进行web开发时,我们就会发现上述两个问 ...
- 一起了解 .Net Foundation 项目 No.3
.Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. AutoMapper Au ...
- 快速上手leetcode动态规划题
快速上手leetcode动态规划题 我现在是初学的状态,在此来记录我的刷题过程,便于以后复习巩固. 我leetcode从动态规划开始刷,语言用的java. 一.了解动态规划 我上网查了一下动态规划,了 ...