Loading... ## 前言  此前实现的LVS-DR集群都有一个人很大的问题,Director是一个单点故障,一旦出现故障,对外服务将不可用。Keepalived就很好的解决了这一问题,实现VIP自动流动,一定程度上实现了负载均衡的效果(DNS解析负载均衡)。 @> 高可用计算公式:平均无故障时间/(平均修复时间+平均无故障时间) **环境:** - OS:CentOS 7 - LVS:DR模型,两台 - Real Server:两台 ## 一、配置两台LVS调度服务器 (1). 地址配置 LVS-1: HOSTNAME:node1 DIP:172.16.20.10 #配置过程不用多说 LVS-2: HOSTNAME:node2 DIP:172.16.20.20 如下图: ![](https://blog.beijixs.cn/usr/uploads/2019/10/4149599403.png) (2). 配置keepalived 第一步需要安装以下软件: > *yum install keepalived ipvsadm -y*  这两个包是必须的,一个提供高可用服务,一个提供集群服务; **lvs-1的keepalived配置** 配置文件修改: ! Configuration File for keepalived global_defs { notification_email { root@localhost #提示邮件发给谁 } notification_email_from kpadmin@localhost #邮件发送者 smtp_server 127.0.0.1 #邮件服务地址 smtp_connect_timeout 30 router_id node1 #和刚刚设置的主机名一致(建议一致),唯一标识 vrrp_skip_check_adv_addr #vrrp_strict #此项一定要注释,否则vip不通 vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script chk_mt { script "/etc/keepalived/down.sh" interval 1 weight -2 } #手动下线脚本,后面会贴出 vrrp_instance VI_1 { #定义vrrp实例,名称为VI_1 state MASTER #定义为主服务 interface ens33 #物理网卡接口 virtual_router_id 51 #虚拟路由id priority 100 #优先级 advert_int 1 #心跳时间 authentication { auth_type PASS #认证机制,普通字符认证 auth_pass 32acb08d #pass } track_script { chk_mt } #调用手动下线脚本 virtual_ipaddress { 172.16.123.123/32 dev ens33 label ens33:0 #定义VIP地址以及绑定的接口 } notify_master "/etc/keepalived/notify.sh master" notify_backup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" #当状态变更时,发送邮件的脚本,后文会给出 } virtual_server 172.16.123.123 80 { #定义虚拟主机/Director(IP PORT) delay_loop 6 #如果六次检测失败,就定义为失效Real lb_algo wrr #调度算法 lb_kind DR #类型,DR类型 #persistence_timeout 50 #持久连接,测试的时候暂时关闭 protocol TCP #使用TCP协议 sorry_server 127.0.0.1 80 #定义sorry_server(IP PORT) real_server 172.16.10.10 80 { #定义real server(IP PORT) weight 1 #定义权重 HTTP_GET { #健康检测机制,HTTP_GET url { path / #digest ff20ad2481f97b1754ef3e12ecd3a9cc status_code 200 #健康检测,检测为跟,状态码为200即为正常 } connect_timeout 3 #检测超时时长 nb_get_retry 3 #检测等待时长 delay_before_retry 3 } } real_server 172.16.10.20 80 { #定义第二个Real Server weight 2 HTTP_GET { url { path / #digest ff20ad2481f97b1754ef3e12ecd3a9cc status_code 200 #健康检测,只看状态 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } **lvs-2的keepalived配置** 将`lvs-1`的配置文件拷贝到`lvs-2`上,修改以下配置: router_id node1 --> router_id node2 #改为lvs-2的主机名 state MASTER --> state BACKUP #改为备用主机 priority 100 --> priority 99 #降低优先级 **配置文件中的脚本** `down.sh`: 手动下线脚本 #!/bin/bash # if [ -f /etc/keepalived/down ];then exit 1 else exit 0 fi `notify.sh`: 邮件通知脚本 #!/bin/bash # vip=172.16.100.1 contact='root@localhost' #定义收件人 notify(){ mailsubject="`hostname` to be $1:$vip floating" #主题 mailbody="`date '+%F %H:%M:%S'`:vrrp transition,`hostname` changed to be $1" #主体 echo ${mailbody} | mail -s "$mailsubject" $contact } case "$1" in master) notify master exit 0 ;; backup) notify backup exit 0 ;; fault) notify fault exit 0 ;; *) echo "Usage:`basename $0` {master|backup|fault}" exit 1 ;; esac (3). 启动服务 > *systemctl start keepalived* > *systemctl enable keepalived* 启动服务,开机自动启动服务 ## 二、配置两台Real Server (1). 地址配置 Real-1:172.16.10.10 Real-2:172.16.10.20 (2). 启动httpd systemctl start httpd (3). 编辑文档首页 内容分别如下: real-1:Httpd Server-1 real-2:Httpd Server-2 (4). 配置vip #!/bin/bash # VIP=172.16.123.123 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 ip addr add ${VIP}/32 dev lo:0 ;; stop) ip addr del ${VIP}/32 dev lo:0 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 ;; esac 再两台Real Server分别运行此脚本 ~]# script_name start ![](https://blog.beijixs.cn/usr/uploads/2019/10/3817996833.png) 两台Real Server的地址详情 ## 三、进行测试 测试主机:CentOS6 ~]# for i in {1..30};do curl http://172.16.123.123;do 正常结果是这样的 ![](https://blog.beijixs.cn/usr/uploads/2019/10/3027056242.png) 可以停掉主的keepalived服务,检测是否生效 ------------ <center>END</center> 最后修改:2019 年 10 月 15 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏