Keepalived 实现LVS-DR和nginx的同时高可用集群
第一步:安装LVS和Nginx,keepalived
Yum–y install ipvsadm keepalived
编译安装nginx
./configure–prefix= ,make&&makeinstall
第二步:设置ipvsadm规则
Ipvsadm–A –t 10.10.1.62:3380 –s rr
Ipvsadm–a –t 10.10.1.62:3380 –r 10.10.1.60 –g –w1
Ipvsadm–a –t 10.10.1.62:3380 –r 10.10.1.61 –g –w1
Ipvsadm–a –t 10.10.1.62:3380 –r 10.10.1.63 –g –w1
Ipvsadm–A –t 10.10.1.88:80 –s rr
Ipvsadm–a –t 10.10.1.88:80 –r 10.10.1.80 –g –w1
Ipvsadm–a –t 10.10.1.88:80 –r 10.10.1.81 –g –w1
保存规则:ipvsadm –S< /jiaoben/ipvsadm.txt
第三步:配置nginx的配置文件。
#user nobody;
worker_processes 4; #启动的进程数,建议cpu的核数
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
use epoll;
worker_connections 65535; #进程的最大连接数
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user[$time_local] "$request" '
#'$status $body_bytes_sent"$http_referer" '
# '"$httpuser_agent""$http_x_forwarded_for"';
#access_log logs/access.log main;
server_tokens off; #隐藏版本信息
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream tomcat {
ip_hash;
server 10.10.1.60:8080 max_fails=2 fail_timeout=10s;
server10.10.1.61:8080 max_fails=2fail_timeout=10s;
server10.10.1.63:8080 max_fails=2fail_timeout=10s;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /tms;
index login.jsp
proxy_set_header X-Frworded-For$remote_addr;
proxy_set_header Host $host;
proxy_pass http://tomcat;
}
}
第四步:keepalived的配置文件的修改
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP #从机
interface eth0
virtual_router_id 51
priority 150 #定义优先级,数字大优先极高
advert_int 1
nopreempt #不抢占
authentication {
auth_type PASS #简单的连接样式
auth_pass 1111 #简单的密码
}
virtual_ipaddress {
10.10.1.62/32 dev eth0
10.10.1.88/32 dev eth1
}
}
virtual_server 10.10.1.62 3380 {
delay_loop 6
lb_algo rr #LVS调度算法
lb_kind DR #LVS集群模式
nat_mask 255.255.255.255
# persistence_timeout 50 #绘画保持时间/秒
protocol TCP #使用的协议
real_server 10.10.1.60 3380 {
weight 1 #默认为1,0为失效
inhibit_on_failure #健康检查失败,将weight设为0失效,而不在ipvs里删除
TCP_CHECK {
connect_port 3380 #连接端口
bindto 10.10.1.60 #绑定Ip
# url { 可以检测多个url
# path /mrtg/
# digest9b3a0c85a887a256d6939da88aabd8cd
# }
connect_timeout 3 #连接超时
nb_get_retry 3 #重试次数
delay_before_retry 3 #重连间隔时间
}
}
real_server 10.10.1.61 3380 {
weight 1
inhibit_on_failure #健康检查失败,将weight设为0失效,而不在ipvs里删除
TCP_CHECK {
connect_port 3380 #连接端口
bindto 10.10.1.61 #绑定Ip
# url { 可以检测多个url
# path /mrtg/
# digest9b3a0c85a887a256d6939da88aabd8cd
# }
connect_timeout 3 #连接超时
nb_get_retry 3 #重试次数
delay_before_retry 3 #延迟时间
}
}
real_server 10.10.1.63 3380 {
weight 1
inhibit_on_failure #健康检查失败,将weight设为0失效,而不在ipvs里删除
TCP_CHECK {
connect_port 3380 #连接端口
bindto 10.10.1.63
# url { 可以检测多个url
# path /mrtg/
# digest9b3a0c85a887a256d6939da88aabd8cd
# }
connect_timeout 3 #连接超时
nb_get_retry 3 #重试次数
delay_before_retry 3 #延迟时间
}
}
#=================nginx的HA========啊万恶的分割线啊!!==================================
virtual_server 10.10.1.88 80 {
delay_loop 6
nat_mask 255.255.255.255
# persistence_timeout 50
protocol TCP
real_server 10.10.1.80 80 {
weight 1
inhibit_on_failure #健康检查失败,将weight设为0失效,而不在ipvs里删除
TCP_CHECK { #tcp检测
connect_port 80 #连接端口
# url { 可以检测多个url
# path /mrtg/
# digest9b3a0c85a887a256d6939da88aabd8cd
# }
connect_timeout 3 #连接超时
nb_get_retry 3 #重试次数
delay_before_retry 3 #延迟时间
}
}
real_server 10.10.1.81 80 {
weight 1
inhibit_on_failure #健康检查失败,将weight设为0失效,而不在ipvs里删除
TCP_CHECK { #tcp检测
connect_port 80 #连接端口
# url { 可以检测多个url
# path /mrtg/
# digest9b3a0c85a887a256d6939da88aabd8cd
# }
connect_timeout 3 #连接超时
nb_get_retry 3 #重试次数
delay_before_retry 3 #延迟时间
}
}
}
注意:keepalived.conf的配置
stateBACKUP 的状态均为从,
priority100 #定义优先级,数字大优先极高,决定主从。
唯一的不足时当nginx的宕掉是,keepalived是不会漂移的,需要增加检测脚本,当nginx挂掉时,强制keepalived stop。