目标:基于LVS的DR模型实现keepalived高可用负载集群
拓扑图:
一、准备好DR模型的Real server1和Realserver2两个节点
1、此处我就用脚本来快速的部署这两个节点,脚本内容如下:
#!/bin/bash vip=192.168.1.100 interface="lo:0" case $1 in start) echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce ifconfig $interface $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip dev $interface ;; stop) echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce ifconfig $interface down ;; status) if ifconfig lo:0 |grep $vip &> /dev/null; then echo "ipvs is running." else echo "ipvs is stopped." fi ;; *) echo "Usage: `basename $0` {start|stop|status}" exit 1 esac
2、分别为两个节点配置web服务,用于测试使用。
[root@bogon ~]# yum -y install httpd [root@bogon ~]# echo "Rserver111" > /var/www/html/index.html [root@bogon ~]# service httpd start #######Realserver2同样操作即可
二、配置director1和director2为keepalived的,并且为主和从模式:
Director1:
[root@bogon ~]# yum -y install keepalived ###安装keepalived程序包
! Configuration File for keepalived global_defs { ###全局配置段 notification_email { ###通知邮件发送给哪个地址 root@localhost } notification_email_from keepalived@localhost###发件人地址 smtp_server 127.0.0.1 ##邮件服务器监听地址 smtp_connect_timeut 30 ##超时时间 router_id node1 ##路由id标识 vrrp_mcast_group4 224.0.0.100 ###组播地址,几个director需要相同 } vrrp_instance VI_1 { state MASTER ##当前节点虚拟路由的初始状态 interface eno16777736 ###vrrp绑定的接口 virtual_router_id 51 ##虚拟路由的vrid好,范围是0-255 priority 100 ###优先级别,范围是1-254 advert_int 1 ###vrrp通告间隔时间,单位秒 authentication { ###定义认证类型和具体的方式 auth_type PASS ###基于简单密码认证 auth_pass 121212 ###密码,一般不超过8个字符串,主从需要相同 } virtual_ipaddress { 定义vip地址,需要同RS相同 192.168.1.100 } virtual_server 192.168.1.100 80 { ###定义Vs的IP地址和端口号 delay_loop 3 ##设定RS的检测试剂间隔,默认单位为s lb_algo rr ##指定地址分配的算法 lb_kind DR ##指定RS的模型 # persistence_timeout 50 ##连接超时时长 net_mask 255.255.255.0 protocol TCP sorry_server 127.0.0.1 80 ####sorry服务器地址,如果服务都挂了,那么sorry服务器将响应 real_server 192.168.1.102 80 { ##定义Rs1的IP地址及端口号 weight 1 ###设置RS的权重 HTTP_GET { ###设置Rs的健康检测方式 url { path /index.html ###设置检测资源路径 #digest 640205b7b0fc66c1ea91c463fac6334d status_code 200 ##设置采用status_conde方式验证健康 } connect_timeout 3 连接超时时长 nb_get_retry 3 ##重试次数 delay_before_retry 3 ###重试前延迟时长 } } real_server 192.168.1.108 80 { ####定义RS2的地址和端口号 weight 1 HTTP_GET { url { path /index.html #digest 640205b7b0fc66c1ea91c463fac6334d status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
ok,director1就基本上搞定了,现在复制本配置文件到director2中做下修改就可以了,此处我就省了。等两边修改好了启动服务,就可以测试了。。
三、简单的监控脚本的使用配置;
a)监控vip流动状态的通知脚本:
1、建立vip状态通知脚本,内容如下:
#!/bin/bash contact='root@localhost' ##定义收件人 notify() { mailsubject="$(hostname) to be $1, vip floating." mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1" echo "$mailbody" | mail -s "$mailsubject" $contact } case $1 in master) notify master ;; backup) notify backup ;; fault) notify fault ;; *) echo "Usage: $(basename $0) {master|backup|fault}" exit 1 ;; esac
2、编辑配置文件添调用通知脚本:
vrrp_instance VI_2 { notify_master "/etc/keepalived/notify.sh master" notify_backup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" }
此脚本和配置访问需要Director1和Director2两边都需要配置
b)通过定义vrrp_script脚本来完成资源监控,实现动态调整director的优先级别
脚本定义在vrrp_instance以外就可以:
首先是定义我么的监控脚本
定义通过资源监控来实现调整: vrrp_script chk_down { script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" interval 1 weight -5 } 定义通过服务监控来实现调整: vrrp_script chk_httpd { script "killall -0 httpd && exit 0 || exit 1" interval 1 weight -5 }
调用定义好的vrrp脚本,,##此脚本需要放在vrrp_instance内
track_script { chk_down chk_httpd }
此脚本和配置访问需要Director1和Director2两边都需要配置
ok!此处我么及可以来测试哦,测试省略;