nginx+keepalived 高可用方案
nginx+keepalived 高可用方案
准备工作
- 192.168.157.11
- 192.168.157.12
安装nginx
跟新yum源文件
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
安装nginx
yum -y install nginx
操作命令
systemctl start nginx; # 启动nginx
systemctl stop nginx; # 停止nginx
什么是高可用
- 高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。如果一个系统能够一直提供服务,那么这个可用性则是百分之百,但是天有不测风云。所以我们只能尽可能的去减少服务的故障。
解决的问题
在生产环境上很多时候是以
Nginx做反向代理对外提供服务,但是一天Nginx难免遇见故障,如:服务器宕机。当Nginx宕机那么所有对外提供的接口都将导致无法访问。虽然我们无法保证服务器百分之百可用,但是也得想办法避免这种悲剧,今天我们使用
keepalived来实现Nginx的高可用
双机热备方案
- 这种方案是国内企业中最为普遍的一种高可用方案,双机热备其实就是指一台服务器在提供服务,另一台为某服务的备用状态,当一台服务器不可用另外一台就会顶替上去。
keepalived是什么?
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件
安装keepalived
yum方式安装,该方式会自动安装依赖:
yum -y install keepalived
yum 安装产生的配置文件在/etc/keepalived/keepalive.conf
编译安装
yum install -y openssl-devel
cd /usr/local/src
wget http://www.keepalived.org/software/keepalived-2.0.16.tar.gz
tar zxf keepalived-2.0.16.tar.gz
cd keepalived-2.0.16
./configrue --prefix=/usr/local/keepalived
make
make install clean
cp /usr/local/src/keepalived-2.0.16/keepalived/etc/init.d/keepalived /etc/init.d/keepalived
chmod +x /etc/init.d/keepalived
echo "/etc/init.d/keepalived start " >> /etc/rc.local
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/sbin/keepalived /usr/sbin
启动命令
service keepalived start # 启动
service keeplived stop # 停止
systemctl start keeplived #启动(与1相同)
实现过程
修改192.168.157.11中的keepalived, 编辑/etc/keepalived/keepalive.conf (MASTER为主)
#检测脚本nginx
vrrp_script chk_http_port {
script "/etc/keepalived/script/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
interval 2 #(检测脚本执行的间隔,单位是秒)
weight 2 #权重
} #检测tomcat的
vrrp_script chk_tomcat {
script "etc/keepalived/script/tomcat.sh"
interval 2
weight 2 #权重
} #vrrp 实例定义部分
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备
interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
virtual_router_id 51 # 虚拟路由编号,主从要一直
priority 150 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
#授权访问
authentication {
auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}
track_script {
chk_http_port # nginx脚本
chk_tomcat # tomcat脚本
}
virtual_ipaddress {
192.168.157.130/24 # 定义虚拟ip(VIP),可多设,每行一个
}
}
virtual_ipaddress里面可以配置vip,在线上通过vip来访问服务。interface
需要根据服务器网卡进行设置通常查看方式ip addrauthentication配置授权访问后备机也需要相同配置
修改192.168.157.12中的keepalived配置文件, (BACKUP为备用)
#检测脚本nginx
vrrp_script chk_http_port {
script "/etc/keepalived/script/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
interval 2 #(检测脚本执行的间隔,单位是秒)
weight 2 #权重
} #检测tomcat的
vrrp_script chk_tomcat {
script "etc/keepalived/script/tomcat.sh"
interval 2
weight 2 #权重
} #vrrp 实例定义部分
vrrp_instance VI_1 {
state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备
interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
virtual_router_id 51 # 虚拟路由编号,主从要一直
priority 140 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
#授权访问
authentication {
auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}
track_script {
chk_http_port # nginx脚本
chk_tomcat # tomcat脚本
}
virtual_ipaddress {
192.168.157.130/24 # 定义虚拟ip(VIP),可多设,每行一个
}
}
检测脚本:
#!/bin/bash
#检测nginx是否启动了
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then #如果nginx没有启动就启动nginx
systemctl start nginx #重启nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败,则停掉keepalived服务,进行VIP转移
killall keepalived
fi
fitomcat脚本
#!/bin/bash
JAVA_PROCESS=`ps -C java --no-heading| wc -l`
if [ $JAVA_PROCESS -eq 0 ];then
echo "tomcat is stop"
sleep 2
if [ `ps -C java --no-heading| wc -l` -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi脚本授权
chmod 775 check_nginx_pid.sh chmod 775 tomcat.sh
验证
启动157.11和157.12中的nginx和keepalived
systemctl start nginx; #启动
service keepalived start # 启动访问网址http://192.168.157.130 ,正常查看,
ip a # 进行验证是否存在虚拟主机
模拟宕机, 关闭157.11的服务器 reboot 关机
再次访问网址, http://192.168.157.130,正常查看
查看ip 正常, 则配置成功
ip a
修改配置文件
配置文件路径/etc/sysconfig/keepalived
KEEPALIVED_OPTIONS=”-D -d -S 0” 保存退出修改日志文件
vim /etc/rsyslog.conf #### GLOBAL DIRECTIVES #### # Where to place auxiliary files
$WorkDirectory /var/lib/rsyslog # Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on
local0.* /var/log/keepalived.log #添加该句代码, 注意不要注释重启rsyslog服务和keepalived
service rsyslog restart
service keepalived restart查看日志信息
tail /var/log/keepalived.log
报错
默认日志存放在系统日志:/var/log/messages下查看报错
如果配置日志文件 可以在/var/log/keepalived.log进行查看
通过查看日志错误进行修改即可,
其他功能
百度搜索keepalived配置文件详解查看
线上参考配置
! Configuration File for keepalived vrrp_instance ka_192_168_128_204 {
state BACKUP
interface eth0
virtual_router_id 204
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 128204
}
virtual_ipaddress {
192.168.128.204/24 brd 192.168.128.255 dev eth0 label eth0:1
} } virtual_server 192.168.128.204 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP real_server 192.168.128.119 80 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
} real_server 192.168.128.120 80 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
} real_server 192.168.128.121 80 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
} real_server 192.168.128.122 80 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
借鉴博客
- 借鉴博客: http://www.uml.org.cn/zjjs/201808214.asp
- keepalived各个配置项和术语说明:https://blog.csdn.net/wzyzzu/article/details/50787042
- 高并发场景 LVS 安装及高可用实现:https://www.cnblogs.com/clsn/p/7920637.html#_label7
nginx+keepalived 高可用方案的更多相关文章
- nginx keepalived 高可用方案(转)
转自: https://www.cnblogs.com/leeSmall/p/9356535.html 一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含 ...
- Nginx+Keepalived高可用集群应用实践
Nginx+Keepalived高可用集群应用实践 1.Keepalived高可用软件 1.1 Keepalived服务的三个重要功能 1.1.1管理LVS负载均衡软件 早期的LVS软件,需要通过命令 ...
- Nginx知多少系列之(十四)Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)
目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...
- Nginx入门篇(七)之Nginx+keepalived高可用集群
一.keepalived介绍 keepalived软件最开始是转为负载均衡软件LVS而设计,用来管理和监控LVS集群系统中各个服务节点的状态,后来又加入了可实现高可用的VRRP功能.所以Keepali ...
- 使用Ansible实现nginx+keepalived高可用负载均衡自动化部署
本篇文章记录通过Ansible自动化部署nginx的负载均衡高可用,前端代理使用nginx+keepalived,端web server使用3台nginx用于负载效果的体现,结构图如下: 部署前准备工 ...
- Nginx+keepalived(高可用主备模式)
Nginx+keepalived(高可用主备模式) 环境:centos6.7 准备:两台服务器(虚拟机).两台应用(Tomcat).Nginx.keepalived server1:192.168.2 ...
- Nginx+keepalived(高可用双主模式)
Nginx+keepalived(高可用双主模式) tips:前面已经介绍了nginx+keepalived高可用主从模式,今天补充下高可用的双主模式,均可以作为主机使用 server1:192.16 ...
- nginx+keepalived高可用及双主模式
高可用有2中方式. 1.Nginx+keepalived 主从配置 这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候, ...
- nginx Keepalived高可用集群
一.Keepalived高可用 1.简介 Keepalived软件起初是专为LvS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此, ...
随机推荐
- swpu新生赛ctf wp
WEB:gift_F12 没啥好说的 直接F12得了 NSSCTF{We1c0me_t0_WLLMCTF_Th1s_1s_th3_G1ft} RE 简简单单的解密 import base64, url ...
- Solution -「洛谷 P5325」Min_25 筛
\(\mathcal{Description}\) Link. 对于积性函数 \(f(x)\),有 \(f(p^k)=p^k(p^k-1)~(p\in\mathbb P,k\in\mathbb ...
- MyBatis源码环境搭建
之前研究mybatis都是参考前面学习的人的一些经验,并没有自己搭建源码环境进行.现在以mybatis3.4.6版本搭建,搭建过程中各种failed,下面大致记录环境搭建过程. 1.mybatis3. ...
- mysql学习+再复习
mysql 函数 单行函数 exists 是否存在 字符函数 concat(a,b)拼接两个字符串 ifnull(a+b,0) 如果a+b等于null,则返回0 upper,lower 大小写 ...
- demo_2_27
#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <string.h> int count_bit_one ...
- Vulhub-漏洞环境的搭建(详细版)
安装Vulhub需要的基础环境 更新现有的软件 复制代码 1 2 sudo apt-get update sudo apt-get upgrade 安装Docker 复制代码 1 2 3 4 5 6 ...
- NET命令入侵实例
实验目的 了解NET入侵的过程 掌握NET命令的使用方法和它的参数搭配 实验内容 NET命令的使用方法和它的参数搭配 实验环境描述 XP作为客户端,Windows server 2003作为远程服务器 ...
- Spring Cloud Gateway现高风险漏洞,建议采取措施加强防护
大家好,我是DD 3月1日,Spring官方博客发布了一篇关于Spring Cloud Gateway的CVE报告. 其中包含一个高风险漏洞和一个中风险漏洞,建议有使用Spring Cloud Gat ...
- UML 包图 详细介绍
6.1 包图的概念 包是一种常规用途的组合机制.UML中的一个包直接对应于Java中的一个包,C#中的命名空间.在Java中,一个包可能含有其他包.类或者同时含有这两者.进行建模时,通常使用逻辑性 ...
- java变量的初始化之后的默认值
对于类的成员变量 不管程序有没有显示的初始化,Java 虚拟机都会先自动给它初始化为默认值. 1.整数类型(byte.short.int.long)的基本类型变量的默认值为0. 2.单精度浮点型(f ...