7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.
#
./etc/rc.d/init.d/functions
VIP=132.96.138.36
case\in start)
/sbin/ifconfig lo down /sbin/ifconfig lo up
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
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up /sbin/route add -host $VIP dev lo:0 ;;
stop)
/sbin/ifconfig lo:0 down
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 ;;
status)
islothere=`/sbin/ifconfig lo:0 | grep $VIP` isrothere=`netstat -rn | grep \ if[!\-o !\];then
echo \ else
echo \ fi ;;
*)
echo \ exit 1 ;; esac
curl命令选项:
--cacert
--capath
--compressed 要求返回是压缩的形势 (using deflate or gzip) --connect-timeout
--interface
-u/--user
可以参考以下脚本
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
RS健康状态检查脚本示例第二版: #!/bin/bash #
VIP=192.168.10.3 CPORT=80
FAIL_BACK=127.0.0.1
RS=(\) declare -a RSSTATUS RW=(\) RPORT=80 TYPE=g CHKLOOP=3
LOG=/var/log/ipvsmonitor.log
addrs(){
ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2 [ $?-eq 0]&&return0||return1 }
delrs(){
ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT [ $?-eq 0]&&return0||return1 }
checkrs(){ local I=1
while[ $I -le $CHKLOOP ];do
if curl --connect-timeout 1 http://$1 &>/dev/null;then return0 fi
let I++ done
33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56.
$LOG
return1 }
initstatus(){ local I local COUNT=0; for I in ${RS[*]};do
if ipvsadm -L -n | grep \&&>/dev/null ;then RSSTATUS[$COUNT]=1 else
RSSTATUS[$COUNT]=0 fi
let COUNT++ done }
initstatus while:;do let COUNT=0 for I in ${RS[*]};do if checkrs $I;then
if[ ${RSSTATUS[$COUNT]}-eq 0];then addrs $I ${RW[$COUNT]}
[ $?-eq 0]&& RSSTATUS[$COUNT]=1&& echo \+'%F %H:%M:%S'`, $I is back.\>> fi else
if[ ${RSSTATUS[$COUNT]}-eq 1];then delrs $I
[ $?-eq 0]&& RSSTATUS[$COUNT]=0&& echo \+'%F %H:%M:%S'`, $I is gone.\>> fi fi
let COUNT++ done sleep 5 done
57.
58. 59. 60. 61.
$LOG
62. 63. 64. 65. 66. 67.
健康检查脚本,亲测ok
1. 2. 3. 4. 5.
[root@lvs ~]# cat healteh_check.sh #!/bin/bash #
VIP=132.96.138.36 CPORT=80
6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48.
RPORT=80
declare -a RS=(\) declare -a RSS=(\) declare -a RSW=(\) TYPE=g
LOG=/var/log/ipvsmonitor.log
### Add a node into Cluster addrs(){
if ipvsadm -L -n | grep ${RS[$1]}&>/dev/null ;then
echo \>>$LOG else
ipvsadm -a -t $VIP:$CPORT -r ${RS[$1]}:$RPORT -$TYPE -w ${RSW[$1]} if[ $?-eq 0];then fi fi }
RSS[$1]=online
echo \>>$LOG echo \`date +'%F %H:%M:%S'` ,Add ${RS[$1]} into Cluster
else
failed!!!\>>$LOG
### Del a node from Cluster delrs(){
if ipvsadm -L -n | grep ${RS[$1]}&>/dev/null ;then ipvsadm -d -t $VIP:80-r ${RS[$1]} if[ $?-eq 0];then fi else fi }
echo \>>$LOG
RSS[$1]=offline
echo \>>$LOG echo \`date +'%F %H:%M:%S'` ,Del ${RS[$1]} from Cluster failed!\>>$LOG
else
### Init cluster status initstatus(){
for((i=0;i<${#RS[@]};i++));do
if ipvsadm -L -n | grep ${RS[$i]}&>/dev/null ;then
RSS[$i]=online
49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66.
}
else fi
RSS[$i]=offline
done
initstatus
while:;do
for((i=0;i<${#RS[@]};i++));do
if curl --connect-timeout 1 http://${RS[$i]}&>/dev/null;then fi done sleep 2 done
addrs $i delrs $i else
LVS的持久连接 LVS持久连接:
无论使用算法,LVS持久都能实现在一定时间内,将来自同一个客户端请求派发至此前选定的RS。
持久连接模板(内存缓冲区):
每一个客户端 及分配给它的RS的映射关系; ipvsadm -A|E ... -p timeout:
timeout: 持久连接时长,默认300秒;单位是秒; 在基于SSL,需要用到持久连接;
PPC:将来自于同一个客户端对同一个集群服务的请求,始终定向至此前选定的RS; 持久端口连接
PCC:将来自于同一个客户端对所有端口的请求,始终定向至此前选定的RS; 持久客户端连接
把所有端口统统定义为集群服务,一律向RS转发; PNMPP:持久防火墙标记连接 80: RS1 23: 同一个RS 防火墙标记: PREROUTING 80: 10