keepalived lvs 的配置先贴一下,给自己做一个记号
master 的配置:
global_defs { notification_email { 125698756@qq.com } notification_email_from admin@qq.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } #vrrp_sync_group VG_1 { #group { #VI_1 #} #notify_master /usr/local/master.sh #notify_backup /usr/local/backup.sh #} vrrp_script check_running { script /home/check.sh interval 3 weight -10 fall 1 rise 1 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 152 debug nopreempt advert_int 2 preempt_delay 60 dont_track_primary track_interface { eth0 } authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.168.10.200 } track_script { check_running } notify_master /usr/local/master.sh notify_backup /usr/local/backup.sh notify_fault /usr/local/fault.sh } virtual_server 172.168.10.200 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 60 protocol TCP # real_server 172.168.10.24 80 { weight 5 HTTP_GET { url { path /test.html status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 172.168.10.34 80 { weight 1 HTTP_GET { url { path /test.html status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
配置的部份解释:
virtualserver(虚拟服务)的定义:
virtual_server IP port #定义虚拟主机IP地址及其端口 virtual_server fwmark int #ipvs的防火墙打标,实现基于防火墙的负载均衡集群 virtual_server group string #将多个虚拟服务器定义成组,将组定义成虚拟服务 lb_algo{rr|wrr|lc|wlc|lblc|lblcr} #定义LVS的调度算法 lb_kind {NAT|DR|TUN} #定义LVS的模型 presitence_timeout<INT> #定义支持持久连接的时长 protocol TCP #规则所能支持的协议 sorry_server <IPADDR><PORT> #如果所有real_server都出现故障了,利用此返回信息
real_server(真实服务器)的定义:
real_server<IPADDR><PORT> #定义地址和端口 { #每一组都要用花括号定义自有的属性的 weight <INT> #定义权重 notify_up<STRING>|<QUOTED-STRING> #通知脚本,一旦脚本up就通知 notify_down<STRING>|<QUOTED-STRING> #通知脚本,一旦脚本down就通知 HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK #定义健康状态检测(HTTP_GET:使用此方法检测的;SSL_GET:如果是HTTPS使用此方式检测;TCP_CHECK:检测TCP协议的服务器健康状况;SMTP_CHECK:用来专门检测SMTP服务器;MISC_CHECK:其他检测机制很少使用一般只使用前三种检测方法) }
健康状态检测的常见的两种方法做阐述了解:
############HTTP_GET|SSL_GET############# { # Aurlto test, can have multiple entries here url{ #url字段 path<STRING> #指明检查哪个url #healthcheckneedsstatus_codeor status_codeand digest .Digest computed with genhash, egdigest9b3a0c85a887a256d6939da88aabd8cd digest<STRING> #获取检测那个url的校验码 status_code<INT> #明确指定那个url的校验码和上面的digest不可同时存在 } connect_port<PORT> #期望连接后端服务器的哪些端口 bindto<IPADDR> #检测哪个IP的哪个端口,若不指定应和外围的real_server指定的端口地址是一致 connect_timeout<INT> #超时时间 nb_get_retry<INT> #重试次数 delay_before_retry<INT> #重试之前等待的时间 } ##############3TCK_CHECK############## { connect_port <PORT> #连接哪个端口 bindto <IPADDR> #连接哪个地址 connect_timeout <INT> #超时时间是多少 }
后端服务器绑定下VIP:
#!/bin/bash VIP=172.168.10.200 source /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo $VIP netmask 255.255.255.255 broadcast $VIP /sbin/route add -host $VIP dev lo echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Start OK" ;; stop) ifconfig lo down route del $VIP >/dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" ifconfig lo up ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0
转载于:https://blog.51cto.com/dingmh/1406825