03_Nginx搭建高可用的集群
- 一、Nginxde 高可用
- 二、Keepalived
- Keepalived的安装
- 三、keepalived的配置
- 3.1.三个配置文件:
- 3.1.1.nginx_check.sh
- 3.1.2.keepalived(BACKUP).conf
- 3.1.3.keepalived(MASTER).conf
- 3.2.将配置文件传入:
一、Nginxde 高可用
使用如下的nginx配置
user root; #运行用户
worker_processes 1; #启动进程,通常设置成和cpu的数量相等
#全局错误日志及PID文件
error_log /usr/local/nginx/logs/error.log;
error_log /usr/local/nginx/logs/error.log notice;
error_log /usr/local/nginx/logs/error.log info;
pid /usr/local/nginx/logs/nginx.pid;
# 工作模式及连接数上线
events
{
use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
worker_connections 1024; #单个后台worker process进程的最大并发链接数
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http
{
include mime.types;
default_type application/octet-stream;
#设定请求缓冲
server_names_hash_bucket_size 128;
client_header_buffer_size 32K;
large_client_header_buffers 4 32k;
# client_max_body_size 8m;
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
tcp_nopush on;
tcp_nodelay on;
#连接超时时间
keepalive_timeout 65;
#开启gzip压缩,降低传输流量
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#添加tomcat列表,真实应用服务器都放在这
upstream tomcat_pool
{
#server tomcat地址:端口号 weight表示权值,权值越大,被分配的几率越大;
server 192.168.230.132:8080 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.230.133:8080 weight=4 max_fails=2 fail_timeout=30s;
}
server
{
listen 80; #监听端口
server_name localhost;
#默认请求设置
location / {
proxy_pass http://tomcat_pool; #转向tomcat处理
}
#所有的jsp页面均由tomcat处理
location ~ \.(jsp|jspx|dp)?$
{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://tomcat_pool; #转向tomcat处理
}
#所有的静态文件直接读取不经过tomcat,nginx自己处理
location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
#定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
克隆一台Nginx服务器 两台nginx采用完全相同的配置 此时Nginx服务器没有主从之分。同等地位
当配置了keepalived之后 此时就会有主从之分
二、Keepalived
是一款开源免费的,用c语言编写的交换机制的软件 具备我们所认知的网络7层架构中的第3 4 7层的交换机功能。主要提供负载均衡和高可用功能。负载均衡的实现 需要依赖于linxu的虚拟服务 高可用需要通过VRRR协议实现多台机器之间的故障转移。
一句话:keepalived就是集群管理中保证集群高可用的一个服务软件。
模式:一主多备 master存在一个对外提供服务的虚拟Ip (VIP) master宕机 此时会根据VRRR来采用选举机制 在备机中 选举产生一个master 这样就可以保证高可用
keepalived 所有功能的实现 都是通过配置文件来实现
Keepalived的安装
- 下载
- 上传
- 解压
tar -zxvf keepalived-2.0.20.tar.gz -C /opt/programfiles/
- 安装
需要安装的辅助软件
[root@localhost programfiles]# yum install -y openssl openssl-devel
[root@localhost programfiles]# yum -y install libnl libnl-devel
运行配置
[root@localhost keepalived2]# ./configure --prefix=/usr/local/keepalived
编译
make
安装
make install
将keepalived安装成Linux的系统服务 使得keepalived可以随着Linux系统进行初始化及启动
[root@localhost keepalived]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
将keepalived主程序加入到环境变量
[root@localhost sbin]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived
将keepalived启动脚本 复制到目录 就可以使用service命令来调用
[root@localhost etc]# cp /opt/programfiles/keepalived2/keepalived/etc/init.d/keepalived /etc/init.d/keepalived
将配置文件放置到默认路径下
[root@localhost etc]# mkdir /etc/keepalived
[root@localhost etc]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
设置开机启动
[root@localhost etc]# chkconfig keepalived on
keepalived 的常用命令
三、keepalived的配置
3.1.三个配置文件:
3.1.1.nginx_check.sh
#!/bin/bash
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
3.1.2.keepalived(BACKUP).conf
! Configuration File for keepalived
global_defs {
router_id lvs2
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
interval 2 #检测时间间隔
weight -20 #如果条件成立的话,则权重 -20
}
# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state BACKUP #来决定主从
interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
virtual_router_id 51 # 虚拟路由的 ID 号, 两个节点设置必须一样
mcast_src_ip 192.168.230.134#填写本机ip
# 非抢占模式,与state BACKUP 同用
nopreempt
priority 100 # 节点优先级,主要比从节点优先级高
advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
authentication {
auth_type PASS
auth_pass 1111
}
# 将 track_script 块加入 instance 配置块
track_script {
chk_nginx #执行 Nginx 监控的服务
}
virtual_ipaddress {
192.168.230.110 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
}
}
3.1.3.keepalived(MASTER).conf
! Configuration File for keepalived
global_defs {
router_id lvs1
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
interval 2 #检测时间间隔
weight -20 #如果条件成立的话,则权重 -20
}
# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state MASTER #来决定主从
interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
virtual_router_id 51 # 虚拟路由的 ID 号, 两个节点设置必须一样
mcast_src_ip 192.168.230.131#填写本机ip
priority 100 # 节点优先级,主要比从节点优先级高
advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
authentication {
auth_type PASS
auth_pass 1111
}
# 将 track_script 块加入 instance 配置块
track_script {
chk_nginx #执行 Nginx 监控的服务
}
virtual_ipaddress {
192.168.230.110 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
}
}
3.2.将配置文件传入:
主机的配置文件:
从机的配置文件:
对nginx_check.sh赋予权限:
当将主机的keepalived停掉时对访问无影响