Linux 虚拟机中安装Nginx + Keepalived

Nginx

nginx & tomcat & jsp & keepalived 下载路径:
链接:https://pan.baidu.com/s/1oeCPd6mH5TbKQvDjD4j4YA
提取码:abcd

一、Nginx 的简介

1 反向代理

指定是用户访问服务器, 但是服务器悄悄地把这些请求交给后台N台服务器中的其中一台来做, 这种方式就是反向代理.

2 负载均衡策略

类型:

  • 硬件
    • F5;
    • Array;
  • 软件
    • 阿里云服务器均衡SLB;
    • Nginx+Keepalived
    • LVS(Linux Virtual Server);
    • haproxy。

3 Nginx优点

  • Nginx 可以在大多数 UnixLinux OS 上编译运行, 并有 Windows 移植版.
  • Nginx 的1.4.0稳定版已经于2013年4月24日发布, 一般情况下, 对于新建站点, 建议使用最新稳定版作为生产版本, 已有站点的升级急迫性不高.
  • Nginx 的源代码使用 2-clause BSD-like license。
  • Nginx 是一个很强大的高性能Web和反向代理服务器, 它具有很多非常优越的特性:
  • 在连接高并发的情况下, Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一.能够支持高达 50,000 个并发连接数的响应, 感谢Nginx为我们选择了 epoll and kqueue作为开发模型.

4 环境搭建

Linux 安装步骤:

1 进行安装:
tar -zxvf /usr/local/nginx-1.6.2.tar.gz

2 下载所需要的依赖库文件:
yum install pcre -y
yum install pcre-devel -y
yum install zlib -y
yum install zlib-devel -y

3 进行configure配置, 查看是否报错
cd nginx-1.6.2
./configure --prefix=/usr/local/nginx
注意:
如果出现这个错误:
./configure: error: C compiler cc is not found,
执行这个命令:
yum -y install gcc gcc-c++ autoconf automake make

4 编译安装: make && make install

5 在 /usr/local/nginx目录下,可以看到如下4个目录
conf: 配置文件,
html: 网页文件,
logs: 日志文件,
sbin: 主要二进制程序.

6 命令
启动命令:
/usr/local/nginx/sbin/nginx
关闭命令:
/usr/local/nginx/sbin/nginx -s stop
重启命令:
/usr/local/nginx/sbin/nginx -s reload

7 启动nginx:
/usr/local/nginx/sbin/nginx

8 打开浏览器: 输入你虚拟机的IP:端口(默认是80) (看到欢迎页面说明没问题)

9 访问不到说明防火墙没关, 关闭防火墙命令:

systemctl stop firewalld

二、常用配置

1 虚拟主机配置

编辑配置文件:

1 在/usr/local/nginx下添加一个test 文件夹, 然后在test 目录下添加一个index.html

2 首先进入到配置文件中:
vi /usr/local/nginx/conf/nginx.conf

3 找到一个server {内容省略, 很多行}, 进入编辑模式

4 在server 之前添加:

server {
        listen       8080;
        server_name  localhost;

        location / {
            root   test;
            index  index.html index.htm;
        }
}

5 重启nginx:

/usr/local/nginx/sbin/nginx -s reload

打开浏览器: 输入你虚拟机的IP:端口(端口是8080, 此处和上面配置的要一致, 也可以配置其它的)

2 日志文件

1 首先进入到配置文件中:
vi /usr/local/nginx/conf/nginx.conf

2 找到下面这段配置, 将**#**删掉: |

#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';

3 然后在需要配置单独输出日志的服务配置:

就拿刚刚添加的那个服务来说,在那个服务中添加这行代码
access_log logs/access_test.log main;

效果:

server {
    listen	    8080;
    access_log  logs/access_test.log main;
    server_name localhost;
	location / {
		root test;
		index index.html;
	}
}

3 location配置

语法规则

语法规则: location [=|~|~*|^~] /uri/ { … }

= 开头表示精确匹配

^~ 开头表示uri以某个常规字符串开头, 理解为匹配 url路径即可.
开头表示区分大小写的正则匹配

~* 开头表示不区分大小写的正则匹配

!和!*分别为区分大小写不匹配及不区分大小写不匹配 的正则

/ 通用匹配, 任何请求都会匹配到.

首先匹配 =, 其次匹配^~, 其次是按文件中顺序的正则匹配, 最后是交给 / 通用匹配.当有匹配成功时候, 停止匹配, 按当前匹配规则处理请求.

实际应用: 通过location 的规则找到静态文件, 通过location 规则能达到动静分离.

4 反向代理配置

1 克隆虚拟机

2 需要修改mac 地址

在这里插入图片描述

3 修改虚拟机IP(每次克隆都需要修改)
首先执行命令 ip addr 查看网卡是ens32 还是ens33, 这里以ens32为例, 如果是ens33手动修改即可,然后执行 命令进入配置文件:
vi /etc/sysconfig/network-scripts/ifcfg-ens32

TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
IPADDR=192.168.149.131     #ip 根据自己设置,
NETMASK=255.255.255.0
GATEWAY=192.168.149.2	   #149根据虚拟机网段设置
DNS1=8.8.8.8
BROADCAST=192.168.149.255  #149根据虚拟机网段设置
NAME="ens32"
UUID="4b57d868-4ef8-4d39-aad2-4e82bb249423"
DEVICE="ens32"
ONBOOT="yes"

4 重启网络服务:
systemctl restart network

5 将tomcat 复制到克隆虚拟机_1中/usr/local 目录中, 然后解压:
tar -zxvf apache-tomcat-7.0.78.tar.gz

3 在克隆虚拟机中, 将test.jsp 添加到 /usr/local/apache-tomcat-7.0.78/webapps/ROOT

4 启动tomcat(克隆虚拟机):
/usr/local/apache-tomcat-7.0.78/bin/startup.sh

5 打开浏览器: 输入克隆虚拟机的IP:端口/test.jsp (端口是8080, tomcat 默认是8080)
效果:

Test1 Page!!!
remote ip :
nginx server ip : 192.168.xxx.1

6 配置第一台虚拟机编辑配置文件:
vi /usr/local/nginx/conf/nginx.conf

在你添加的server 中添加代码:

location ~\.jsp$ {
	proxy_pass http://192.168.xxx.xxx:8080;
}

http://192.168.xxx.xxx:8080 是克隆虚拟机的IP, 端口是tomcat 的

实际效果:

server {
	listen      8080;
	access_log  logs/access_test.log main;
	server_name localhost;
	location ~\.jsp$ {
		proxy_pass http://192.168.xxx.xxx:8080;
	}
	location / {
		root test;
		index index.html;
	}
}

重启nginx:
/usr/local/nginx/sbin/nginx -s reload

打开浏览器: 输入第一台虚拟机的IP:端口/test.jsp (端口是8080, tomcat 默认是8080)

访问效果:

Test1 Page!!!
remote ip :
nginx server ip : 192.168.xxx.1xxx -- 第一台虚拟机的IP

7 在刚刚配置的 proxy_pass http://192.168.xxx.xxx:8080;前面添加配置:
proxy_set_header X-real-ip $remote_addr;
重启nginx:
/usr/local/nginx/sbin/nginx -s reload

8 编辑克隆虚拟机:
vi /usr/local/apache-tomcat-7.0.78/webapps/ROOT/test.jsp
找到<%-- <%=request.getHeader("X-real-ip") %> --%> 把注释解开

9 重启tomcat
先关掉tomcat, 使用kill,然后启动:
/usr/local/apache-tomcat-7.0.78/bin/startup.sh

10 打开浏览器: 输入第一台虚拟机的IP:端口/test.jsp (端口是8080, tomcat 默认是8080)
访问效果:

Test1 Page!!!
remote ip :192.168.xxx.1 -- 访问的电脑IP
nginx server ip : 192.168.xxx.1xxx -- 第一台虚拟机的IP

5 负载均衡配置

1 克隆多一台虚拟机, 克隆的是第二台,有tomcat 那台

2 配置第一台虚拟机:
vi /usr/local/nginx/conf/nginx.conf
添加内容是:

upstream myapp {   
 server 192.168.122.133:8080 weight=1 max_fails=2 fail_timeout=30s;   
 server 192.168.122.134:8080 weight=1 max_fails=2 fail_timeout=30s;   
} 

3 修改IP 端口

location ~\.jsp$ {
 proxy_pass http://myapp;
}

4 重启nginx:
/usr/local/nginx/sbin/nginx -s reload
这是没有设置. 默认是轮巡的方式

5 权重

设置upstream myapp{} 中的weight属性

6 ip_hash;

第一访问之后一直都不发生变化

upstream myapp {   
    ip_hash;
	server 192.168.122.133:8080 weight=1 max_fails=2 fail_timeout=30s;   
	server 192.168.122.134:8080 weight=1 max_fails=2 fail_timeout=30s;   
} 

三、搭建高可用环境

我们是通过Nginx进行反向代理,如果Nginx关了的话就没有其他服务支撑.所以我们需要来实现Nginx的高可用,高可用就是我们一台机器挂了可以切换到另外一台机器.我们使用Nginx+keepalived搭建高可用环境

1 安装keepalived

需要先把keepalived 拖进虚拟机中

第一步:安装keepalived依赖的包
yum install -y gcc yum install -y openssl-devel yum install -y libnl3-devel yum install -y popt-devel yum install -y iptables-devel yum install -y libnfnetlink-devel yum install -y psmisc
第二步:编译安装keepalived
将keepalived的安装包 上传到/usr/local/software 目录下
cd /usr/local/software tar -zxvf keepalived-1.2.19.tar.gz -C /usr/local cd /usr/local/keepalived-1.2.19 ./configure --prefix=/usr/local/keepalived make && make install
第三步:将 keepalived 安装成 Linux 系统服务
安装完成之后, 需要做一些工作复制默认配置文件到 默认路径
mkdir /etc/keepalived cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ cd /usr/local/keepalived-1.2.19 cp ./keepalived/etc/init.d/keepalived.init /etc/init.d/ chmod 755 /etc/init.d/keepalived.init
第四步:编写nginx检测脚本:
vi /etc/keepalived/nginx_check.sh
内容如下:

A=`ps -C nginx –no-header |wc -l`  
if [ $A -eq 0 ];then  
    /usr/local/nginx/sbin/nginx  
    sleep 2  
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then  
        killall keepalived  
    fi  
fi  

赋予执行权限
chmod +x /etc/keepalived/nginx_check.sh

2 修改Master配置

修改keepalived的Master配置文件:vi /etc/keepalived/keepalived.conf 
! Configuration File for keepalived       
global_defs {      
   router_id wolfcode                           ##路由器标志    
}    
# 集群资源监控,组合track_script进行    
vrrp_script check_haproxy {    
	script "/etc/keepalived/nginx_check.sh"  #检测 nginx 状态的脚本路径  
	interval 2  #检测时间间隔  
	weight -20  #条件成立 权重减20  
}    
vrrp_instance PROXY {    
	# 设置当前主机为主节点,如果是备用节点,则设置为BACKUP   
	state MASTER
	# 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个    
	interface ens32
	# 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机    
	virtual_router_id 80    
	# 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文  如果VRRP组播没问题,以下这块的内容可以注释掉。  
	# 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP    
	# 主节点时,内容为:(需要配置为虚拟机的IP)    
	unicast_src_ip 192.168.232.129
	# 设置优先级,确保主节点的优先级高过备用节点  
	priority 100    
	# 用于设定主备节点间同步检查时间间隔    
	advert_int 2    
	# 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致    
	authentication {    
		auth_type PASS    
		auth_pass wolfcode
	}    
	# 集群资源监控,组合vrrp_script进行    
	track_script {    
		check_haproxy    
	}    
	# 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中    
	# 当状态切换到BACKUP时,此IP会自动从系统中删除    
	# 可以通过命令ip add查看切换后的状态    
	virtual_ipaddress {    
		# 网段需要配置和虚拟机一样
		192.168.232.110  #虚拟ip配置完之后就用它访问    
	}    
}  

3 修改Slave配置(与Master 的配置差不多)

克隆Master 的虚拟机,然后修改IP

修改keepalived的Slave配置文件:vi /etc/keepalived/keepalived.conf 
! Configuration File for keepalived       
global_defs {      
   router_id wolfcode                           ##路由器标志    
}    
# 集群资源监控,组合track_script进行    
vrrp_script check_haproxy {    
	script "/etc/keepalived/nginx_check.sh"  #检测 nginx 状态的脚本路径  
	interval 2  #检测时间间隔  
	weight -20  #条件成立 权重减20  
}    
vrrp_instance PROXY {    
	# 设置当前主机为主节点,如果是备用节点,则设置为BACKUP   
	state BACKUP
	# 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个    
	interface ens32
	# 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机    
	virtual_router_id 80    
	# 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文  如果VRRP组播没问题,以下这块的内容可以注释掉。  
	# 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP    
	# 主节点时,内容为:    
	unicast_src_ip 192.168.232.132
	# 设置优先级,确保主节点的优先级高过备用节点  
	priority 90    
	# 用于设定主备节点间同步检查时间间隔    
	advert_int 2    
	# 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致    
	authentication {    
		auth_type PASS    
		auth_pass wolfcode
	}    
	# 集群资源监控,组合vrrp_script进行    
	track_script {    
		check_haproxy    
	}    
	# 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中    
	# 当状态切换到BACKUP时,此IP会自动从系统中删除    
	# 可以通过命令ip add查看切换后的状态    
	virtual_ipaddress {    
		192.168.232.110  #虚拟ip配置完之后就用它访问    
	}    
}
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页