https://www.keepalived.org/
./configure --prefix=/usr/local/keepalived --sysconf=/etc*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.如果出现上述提示,则执行下面命令安装libnl:yum install -y libnlmake && make install
./configure --prefix=/usr/local/keepalived --sysconf=/etc
*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.
如果出现上述提示,则执行下面命令安装libnl:
yum install -y libnl
make && make install
cd /etc/keepalivedcp keepalived.conf keepalived.conf.bakvim keepalived.conf
cd /etc/keepalived
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
配置文件内容如下:
! Configuration File for keepalived#全局配置global_defs { # 负载均衡标识,在局域网内应该是唯一的。一般为主机名。 router_id 主机名称}vrrp_script chk_http_port { # 检测心跳执行的脚本 script "/usr/local/src/nginx_check.sh" # 检测脚本执行间隔,单位:秒 interval 4 weight 2}#定义实例vrrp_instance VI_1 { # 指定keepalived的角色,MASTER为主,BACKUP为备 state MASTER # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) interface ens33 # 指定VRRP实例ID(虚拟路由编号),范围是0-255,主从要一致 virtual_router_id 202 # 优先级,数值越大,获取处理请求的优先级越高, 优先级高的将成为MASTER。 priority 100 # 指定发送VRRP通告的间隔,默认为1s(vrrp组播周期秒数) advert_int 1 # 设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信 authentication { # 指定认证方式。PASS简单密码认证(推荐),AH:IPSEC认证(不推荐)。 auth_type PASS # 指定认证所使用的密码。最多8位。 auth_pass 2020 } # 调用检测脚本 track_script { chk_http_port } # 定义虚拟ip(VIP),可多设,每行一个 virtual_ipaddress { 192.168.199.143 }}
! Configuration File for keepalived
#全局配置
global_defs {
# 负载均衡标识,在局域网内应该是唯一的。一般为主机名。
router_id 主机名称
}
vrrp_script chk_http_port {
# 检测心跳执行的脚本
script "/usr/local/src/nginx_check.sh"
# 检测脚本执行间隔,单位:秒
interval 4
weight 2
#定义实例
vrrp_instance VI_1 {
# 指定keepalived的角色,MASTER为主,BACKUP为备
state MASTER
# 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
interface ens33
# 指定VRRP实例ID(虚拟路由编号),范围是0-255,主从要一致
virtual_router_id 202
# 优先级,数值越大,获取处理请求的优先级越高, 优先级高的将成为MASTER。
priority 100
# 指定发送VRRP通告的间隔,默认为1s(vrrp组播周期秒数)
advert_int 1
# 设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
authentication {
# 指定认证方式。PASS简单密码认证(推荐),AH:IPSEC认证(不推荐)。
auth_type PASS
# 指定认证所使用的密码。最多8位。
auth_pass 2020
# 调用检测脚本
track_script {
chk_http_port
# 定义虚拟ip(VIP),可多设,每行一个
virtual_ipaddress {
192.168.199.143
cd /usr/local/srcvim nginx_check.sh
cd /usr/local/src
vim nginx_check.sh
脚本内容:
#!/bin/bashA=`ps -C nginx --no-header | wc -l`if [ $A -eq 0 ];then /usr/local/nginx-1.18.0/sbin/nginx sleep 4 if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then killall keepalived fifi
#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx-1.18.0/sbin/nginx
sleep 4
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
killall keepalived
fi
systemctl start/restart/stop/status keepalived
注:启动keepalived会执行nginx检测脚本,此时如果nginx未启动则会同时启动nginx。
tail -f /var/log/messages
worker_processes 1;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream minio-server { # weight:默认为1。weight越大,负载的权重就越大。 # backup:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。 # max_fails:允许请求失败的次数默认为1,当超过最大次数时,返回 proxy_next_upstream 模块定义的错误。 # fail_timeout:Nginx基于连接探测,如果发现后端异常,在单位周期为fail_timeout设置的时间中达到max_fails次数,这个周期次数内,如果后端同一个节点不可用,那么把节点标记为不可用,并等待下一个周期(同样时常为fail_timeout)再一次去请求,判断是否连接是否成功。 server 192.168.199.140:9000 weight=2 max_fails=3 fail_timeout=10s; server 192.168.199.141:9000 max_fails=3 fail_timeout=30s; } server { listen 80; server_name 192.168.199.143; charset utf-8; location / { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $remote_addr; # 传输文件缓存大小及单次请求大小 client_body_buffer_size 10M; client_max_body_size 1G; # 宕机检测,如果设置时间内无响应,则直接切换到其它服务 proxy_connect_timeout 4; proxy_send_timeout 4; proxy_read_timeout 4; proxy_pass http://minio-server; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }}
worker_processes 1;
events {
worker_connections 1024;
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream minio-server {
# weight:默认为1。weight越大,负载的权重就越大。
# backup:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
# max_fails:允许请求失败的次数默认为1,当超过最大次数时,返回 proxy_next_upstream 模块定义的错误。
# fail_timeout:Nginx基于连接探测,如果发现后端异常,在单位周期为fail_timeout设置的时间中达到max_fails次数,这个周期次数内,如果后端同一个节点不可用,那么把节点标记为不可用,并等待下一个周期(同样时常为fail_timeout)再一次去请求,判断是否连接是否成功。
server 192.168.199.140:9000 weight=2 max_fails=3 fail_timeout=10s;
server 192.168.199.141:9000 max_fails=3 fail_timeout=30s;
server {
listen 80;
server_name 192.168.199.143;
charset utf-8;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
# 传输文件缓存大小及单次请求大小
client_body_buffer_size 10M;
client_max_body_size 1G;
# 宕机检测,如果设置时间内无响应,则直接切换到其它服务
proxy_connect_timeout 4;
proxy_send_timeout 4;
proxy_read_timeout 4;
proxy_pass http://minio-server;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
此配置下 nginx + keepalived 在多台服务器上搭建,可以实现高可用负载均衡。
原文链接:http://www.cnblogs.com/lishen2021/p/14663936.html
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728