Nginx简单介绍:
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。具体的介绍大家可以参见百度百科
Nginx安装
1.1 环境准备
选两台节点部署Nginx,如:192.169.213.128 Nginx1,192.169.213.129 Nginx2,两台节点Nginx的安装完全相同。
创建下载及安装目录,进入创建目录
[root@yanhl1 ~]# mkdir -p /usr/local/nginx/src && cd /usr/local/nginx/src
安装c++编译环境,请确保yum服务正常
[root@localhost src]# yum install gcc-c++
下载nginx及相关依赖组件 (请确保wget服务正常 )
[root@localhost src]# wget http://nginx.org/download/nginx-1.10.2.tar.gz
[root@localhost src]# wget http://www.openssl.org/source/openssl-fips-2.0.10.tar.gz
[root@localhost src]# wget http://zlib.net/zlib-1.2.11.tar.gz
[root@localhost src]# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
依赖软件安装:
注:以下命令中,./config or ./configure为执行配置脚本,make 为编译文件,make install为安装文件
&&为串行执行其连接命令。
openssl安装:
[root@localhost src]# tar zxvf openssl-fips-2.0.10.tar.gz
[root@localhost src]# cd openssl-fips-2.0.10
[root@localhost openssl-fips-2.0.10]# ./config && make && make install
pcre安装
[root@localhost src]# tar zxvf pcre-8.40.tar.gz
[root@localhost src]# cd pcre-8.40
[root@localhost pcre-8.40]# ./configure && make && make install
zlib安装
[root@localhost src]# tar zxvf zlib-1.2.11.tar.gz
[root@localhost src]# cd zlib-1.2.11
[root@localhost zlib-1.2.11]# ./configure && make && make install
1.2 Nginx安装(之前选定测试的两台机子上的安装步骤和配置均相同)
指定安装路径:./configure --prefix=path
如果不指定--prefix=path,默认安装路径为usr/local/nginx
[root@localhost src]# tar zxvf nginx-1.10.2.tar.gz
[root@localhost src]# cd nginx-1.10.2
[root@localhost nginx-1.10.2]# ./configure --prefix=usr/local/nginx && make && make install
配置nginx系统环境变量,这样执行ngnix脚本命令就不用切到nginx的安装目录下
[root@localhost nginx]# vim /etc/profile
加入安装路径到系统环境中
export NGINX_HOME=/opt/software/nginx
export PATH=$PATH:$NGINX_HOME/sbin
使系统环境变量生效
[root@localhost nginx]# source /etc/profile
启动nginx并查看是否启动成功,查询到nginx进程即为启动成功
[root@localhost nginx]# nginx
[root@localhost nginx]# ps aux | grep nginx | grep -v grep
nginx命令:
nginx -s reload|reopen|stop|quit #重新加载配置|重启|停止|退出 nginx
nginx -t #测试配置是否有语法错误
nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]
-?,-h : 打开帮助信息
-v : 显示版本信息并退出
-V : 显示版本和配置选项信息,然后退出
-t : 检测配置文件是否有语法错误,然后退出
-q : 在检测配置文件期间屏蔽非错误信息
-s signal : 给一个 nginx 主进程发送信号:stop(停止), quit(退出), reopen(重启), reload(重新 加载配置文件)
-p prefix : 设置前缀路径(默认是:/usr/local/Cellar/nginx/1.2.6/)
-c filename : 设置配置文件(默认是:/usr/local/etc/nginx/nginx.conf)
-g directives : 设置配置文件外的全局指令
1.3 Nginx负载均衡配置及启动
修改nginx配置文件
events
{
use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大 提高nginx的性能
worker_connections 1024; #单个后台worker process进程的最大并发链接数
}
#HTTP服务器
http {
#设定mime类型,类型由mime.type文件定义
include mime.types;
default_type application/octet-stream;
#设定日志格式
access_log /var/log/nginx/access.log;
#设定负载均衡的服务器列表
upstream load_balance_server {
#weigth参数表示权值,权值越高被分配到的几率越大
server 192.168.213.128:8080 weight=5;
server 192.168.213.129:8080 weight=5;
}
server {
#侦听80端口
listen 80;
#定义使用www.xx.com访问,须将www.helloworld.com加到/etc/hosts中
#server_name www.helloworld.com;
root /opt/software/apache-tomcat-8.5.35/webapps;
#对所有请求进行负载均衡请求
location / {
index index.html index.htm; #定义首页索引文件的名称
proxy_pass http://load_balance_server ;#请求转向load_balance_server 定义的服务器列表
#以下是一些反向代理的配置(可选择性配置)
#proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
}
}
}
重启nginx
nginx -s reopen
1.4 nginx负载均衡测试
安装Tomcat 进行负载均衡验证测试(两台机子上的tomca安装要完全相同)
#下载、解压(保证已安装JDK,我的tomcat安装目录:/opt/software/apache-tomcat-8.5.35/)
wget https://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.35/bin/apache-tomcat-8.5.35.tar.gz
tar -xzvf apache-tomcat-8.5.35.tar.gz
进入解压目录下的webapp/examples目录下,编辑index.html(另一台机子同样根据本机ip修改)
[root@localhost bin]# vim apache-tomcat-8.5.35/webapps/examples/index.html
安装好tomcat,进入tomcat安装目录的bin目录启动tomcat,保证tomat服务启动成功
[root@localhost bin]# sh startup.sh
进入页面验证nginx负载均衡功能:
快速刷新页面,页面的ip会交替变化,说明nginx将请求发送到了不同的服务器上的tomcat上,实现了服务的负载均衡。
Keepalived安装
关于Keepalived的介绍及nginx与其组成高可用结构的原理可以看网友的这篇博客,感谢这位大佬,博客里说的很清楚
https://www.cnblogs.com/kevingrace/p/6138185.html
下面我们继续Keepalived的安装。
我们选择192.169.213.128作为Keepalived的MASTER,192.169.213.129为BACKUP
2.1 环境准备
安装依赖包、下载Keepalived
#之前如果安装过某些依赖包,可以再安装一次,防止安装Keepalived出错
[root@localhost src]# cd /usr/local/nginx/src
[root@localhost src]# yum install -y libnl*
[root@localhost src]# yum install -y libnfnetlink-devel zlib zlib-devel gcc gcc-c++ openssl openssl-devel openssh
[root@localhost src]# wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz
2.2 安装Keepalived
[root@localhost src]# tar xvf keepalived-1.3.5.tar.gz
[root@localhost src]# cd keepalived-1.3.5
[root@localhost keepalived-1.3.5]# ./configure --prefix=/usr/local/keepalived
[root@localhost keepalived-1.3.5]# make
[root@localhost keepalived-1.3.5]# make install
2.3 配置、启动Keepalived
安装完成后,一般会将Keepalived注册为系统服务,设置为开机启动,防止服务挂掉。
进入安装目录的etc目录下,将keepalived相应的配置文件拷贝到系统相应的目录当中。keepalived启动时会从/etc/keepalived目录下查找keepalived.conf配置文件,如果没有找到则使用默认的配置。/etc/keepalived目录安装时默认是没有创建的,需要手动创建。
[root@localhost keepalived]# mkdir -p /etc/keepalived
[root@localhost keepalived]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
# init.d/keepalived这个文件在解压包的目录下
[root@localhost keepalived]# cp /usr/local/nginx/src/keepalived-1.3.5/keepalived/etc/init.d/keepalived /etc/init.d/keepalived
[root@localhost keepalived]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
增加nginx状态检测脚本:
[root@localhost ~]# cd /usr/local/keepalived/
[root@localhost keepalived]# touch check_nginx.sh
[root@localhost keepalived]# chmod 755 check_nginx.sh
[root@localhost keepalived]# vim check_nginx.sh
#!/bin/bash
COUNT=$(ps -C nginx --no-header |wc -l)
echo $COUNT
#判断Nginx 是否都挂掉了
if [ $COUNT -eq 0 ]
then
#nginx安装地址,如果挂掉了,就启动nginx(nginx命令的地址要写对)
/usr/local/nginx/sbin/nginx
echo "重启nginx"
#等5秒钟后,再次查看是否 启动成功
sleep 5
#如果nginx没有启动起来,就直接干掉keepalived
COUNT=$(ps -C nginx --no-header |wc -l)
if [ $COUNT -eq 0 ]
then
echo "干掉keepalived"
#如果killall命令不能使用,就需要安装psmisc工具了
#yum install -y psmisc
killall keepalived
fi
fi
编辑配置文件:
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
192.169.213.128 主节点:
````
#配置文件
! Configuration File for keepalived
global_defs {
#唯一标识,一般为用户名
router_id username1
}
#监控服务.NGINX mysql等
vrrp_script chk_nginx {
script "/usr/local/keepalived/check_nginx.sh"
#每2s检查一次
interval 2
#每次检查-20
weight -20
}
vrrp_instance VI_1 {
##主从设置 MASTER/BACKUP
state MASTER
#网卡名称
interface eth0
#同一个集群下这个 router_id是一样的
virtual_router_id 51
#本机的ip,需要修改
mcast_src_ip 192.168.213.129
#优先级,从节点 配置,需要小于主节点
priority 100
#设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
advert_int 1
#认证的密码
authentication {
auth_type PASS
#设定授权密码,密码相同的为一个集群
auth_pass 1111
}
#触发的脚本
track_script {
chk_nginx #检测脚本,上面配置的
}
#虚拟ip地址(同一个集群中的虚拟ip必须得相同,可配置多个)
virtual_ipaddress {
192.168.213.135
192.168.213.136
}
}
192.169.213.129 从节点:
#配置文件
! Configuration File for keepalived
global_defs {
#唯一标识,一般为用户名
router_id username2
}
#监控服务.NGINX mysql等
vrrp_script chk_nginx {
script "/usr/local/keepalived/check_nginx.sh"
#每2s检查一次
interval 2
#每次检查-20
weight -20
}
vrrp_instance VI_1 {
##主从设置 MASTER/BACKUP
state BACKUP
#网卡名称
interface eth0
#同一个集群下这个 router_id是一样的
virtual_router_id 51
#本机的ip,需要修改
mcast_src_ip 192.168.213.129
#优先级,从节点 配置,需要小于主节点
priority 80
#设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
advert_int 1
#认证的密码
authentication {
auth_type PASS
#设定授权密码,密码相同的为一个集群
auth_pass 1111
}
#触发的脚本
track_script {
chk_nginx #检测脚本,上面配置的
}
#虚拟ip地址
virtual_ipaddress {
192.168.213.135
192.168.213.136
}
}
设置keepalived服务开机启动:
[root@localhost ~]# chmod 755 /etc/init.d/keepalived #权限
[root@localhost ~]# chkconfig keepalived on #开机启动
[root@localhost ~]# chkconfig --add keepalived #加为系统服务
[root@localhost ~]# service keepalived start #启动服务
[root@localhost ~]# service keepalived status #查看服务状态
想要停止服务,执行:
[root@localhost ~]# service keepalived stop #查看服务状态
查看keepalived 虚拟出来的ip
[root@localhost keepalived]# ip a
通过虚拟ip访问nginx,依然可以实现nginx的请求转发
如果一台机子上的nginx挂了而且无法启动成功,检测脚本会停止这台机子上的keepalived服务,虚拟ip就会切到集群的另一台机子上,使用服务正常的这台机子上的keepalived和nginx,实现nginx高可用。
2.4 测试Nginx高可用
先是两台都开启keepalived,然后通过虚拟ip(192.168.213.135)访问, 再关掉第一台的keepalived
service keepalived stop
再通过虚拟ip(192.168.213.135)访问,如果一切正常,依然可以访问到tomcat的测试页面。
启动失败问题:
执行 journalctl -xe 查看失败信息,也可查看/var/log/messages文件查看相关信息
vim /lib/systemd/system/keepalived.service
/usr/local/program/keepalived/var/run/keepalived.pid不存在,写入失败,修改为默认路径:
PIDFile=/var/run/keepalived.pid
systemctl daemon-reload #重新载入 systemd,扫描新的或有变动的单元
2.(VI_1): ip address associated with VRID 25 not present in MASTER advert : 192.168.213.136
配置文件中的evirtual_router_id 设置问题。同个集群中的virtual_router_id 必须相同 ,默认为51,不同集群的中的virtual_router_id必须不同。
参考文章:https://www.cnblogs.com/taiyonghai/p/6728707.html