keepalived实验

keepalived实现lvs调度

实验目的:

用keepalived实现使用lvs的dr模式来做调度,调度算法使用rr模式方便测试。

实验环境:

网卡均为eth0,保证集群中每台服务器的时间时相同的,用ntpdate可以同步,然后关闭selinux和iptables。

虚拟ip为172.16.10.1和172.16.10.2(双主模型,所以需要两个虚拟ip)
两台调度器ip地址分别为172.16.200.101和172.16.200.102
两台节点ip地址为172.16.10.3和172.16.10.4

实验过程:

2.配置节点服务器,设置arp响应级别和虚拟ip,将这些配置写到一个脚本中,方便管理,如下(注意,这里要实现双主模型,而且是DR模型,所以节点主机和调度器的vip要一致,而双主模型需要两个前端的虚拟IP,所以节点主机也需要配置两个VIP):
在两个节点的/root目录下,创建文件lvs.sh,然后写入脚本
vim lvs.sh

#!/bin/bash
vip=172.16.10.2
vip2=172.16.200.100
mask=255.255.255.255
iface="lo:0"
iface2="lo:1"
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/lo/arp_announce
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    
    ifconfig $iface $vip netmask $mask broadcast $vip up
    ifconfig $iface2 $vip2 netmask $mask broadcast $vip2 up
    route add -host $vip dev $iface 
    route add -host $vip2 dev $iface2 
    ;;
stop)
    ifconfig $iface down
    ifconfig $iface2 down
    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/lo/arp_announce
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    ;;
*)
    echo "Usage: $(basename $0) start|stop"
    ;;
esac

bash lvs.sh start #执行脚本,加上start参数
执行完成后可以用ip a l命令来查看两个虚拟ip有没有创建成功。
3.在两台调度器上执行如下操作:

yum -y install keepalived nginx #安装keepalived和nginx
echo "sorry form 172.16.10.1" > /usr/share/nginx/html/index.html #这里安装nginx是为了实现sorry服务器,当节点都出问题时,调度器的nginx会放回echo的内容。调度器2上echo的是 172.16.10.2,这样方便区分是由哪个调度器工作的
service nginx start
ifconfig eth0:0 172.16.10.2 netmask 255
.255.255.255 broadcast 172.16.10.2 up #在eth0上添加vip
我们可以先装个ipvsadm,手动配置lvs来测试以下,合适了再去配置keepalived

yum -y install ipvsadm
ipvsadm -A -t 172.16.10.2:80 -s rr
ipvsadm -a -t 172.16.10.2:80 -r 172.16.10.3 -g
ipvsadm -a -t 172.16.10.2:80 -r 172.16.10.4 -g
然后访问172.16.10.2就可以调度到后端的两个节点提供服务,使用for i in {1..10};do curl http://172.16.10.2;done,就会发现3和4交替出现。 ,将这个调度器的vip删除,在另一台节点上同样上述操作,验证时候需要在客户端先arp -d 172.16.10.2`将自己的arp缓存删除,不然还是会去找之前的调度器的。
测试成功后,我们就可以去部署keepalived了:
首先,将ipvsadm手动做的lvs先清空,这样才会不影响keepalived配置,如下:

ifconfig eth0:0 down
ipvsadm -C
然后配置keepliaved:
我们先来实现lvs的dr模式,使用主备模式

vim /etc/keepalived/keepalived.conf
#配置文件中有很多virtual_server段,我们只保留第一个,剩下的给注释了就行
#下面分别为调度器1和调度器2的配置

调度器1的配置文件

! Configuration File for keepalived

global_defs {
   notification_email {
    feng@mageedu.com
   }
   notification_email_from admin@mageedu.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1
   vrrp_mcast_group4 224.224.224.224
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 16
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.10.2
    }
}

virtual_server 172.16.10.2 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.0.0
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 172.16.10.3 80 {
        weight 1
        HTTP_GET {
            url {
              path /
        status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.10.4 80 {
            weight 1
        HTTP_GET {
            url {
              path /
        status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 61
    priority 95
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.200.100
    }
}

virtual_server 172.16.200.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.0.0
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 172.16.10.3 80 {
        weight 1
        HTTP_GET {
            url {
              path /
        status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.10.4 80 {
            weight 1
        HTTP_GET {
            url {
              path /
        status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

第二台调度器配置如下

! Configuration File for keepalived

global_defs {
   notification_email {
    feng@mageedu.com
   }
   notification_email_from admin@mageedu.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node2
   vrrp_mcast_group4 224.224.224.224
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 16
    priority 95
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.10.2
    }
}

virtual_server 172.16.10.2 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.0.0
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 172.16.10.3 80 {
        weight 1
        HTTP_GET {
            url {
              path /
        status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 1
        }
     }
    real_server 172.16.10.4 80 {
        weight 1
        HTTP_GET {
            url {
              path /
        status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}
vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 61
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.200.100
    }
}

virtual_server 172.16.200.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.0.0
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 172.16.10.3 80 {
        weight 1
        HTTP_GET {
            url {
              path /
        status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 1
        }
     }
    real_server 172.16.10.4 80 {
        weight 1
        HTTP_GET {
            url {
              path /
        status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}

完成后在将两个调度器中的keepalived都启动(注意keepalived不能重启,有时候配置会不生效,所以如果之前已经启动了,那么关闭后在启动)

service keepalived start
测试:
在测试主机上修改/etc/hosts文件,添加如下内容

172.16.200.100test.io
172.16.10.2test.io
然后用一个小循环来测试:

[root@localhost named]# for i in {1..10};do curltest.io ;done
返回结果为172.16.10.3和172.16.10.4交替出现,实验成功

nginx双主模型高可用集群

1.在两台调度器上,设置nginx服务配置文件,这里使用的nginx版本为1.10.2,所以配置文件可能有点细微差别

vim /etc/nginx/nginx.conf
在http上下文中定义组

 upstream webapp {
        server 172.16.10.3;
        server 172.16.10.4;
}
vim /etc/nginx/conf.d/test.conf    #注意:先将默认的default去掉,要不测试会报错
server {
        listen 80 default;
        server_nametest.io;
        location / {
                proxy_pass http://webapp;
        }
}
nginx -t
nginx -s reload

2.在两台调度器上,修改keepalived配置文件:
先将vrrp_instance VI_1和vrrp_instance VI_2这两个上下文中的virtual_server先注释掉(virtual_server就是lvs的配置段,注释掉以防和nginx段冲突)
然后在global段中定义nginx检测功能,这段的意思就是当检测到nginx服务不存在时,就将这个调度器的权重减去10,注意减去的权重不能小于主和备的差,不然减去之后主调度器的权重还是表备用的高,如下:

vrrp_script chk_nginx {
        script "killall -o nginx"
        interval 2
        weight -10
        fall 2
        rise 2
       }

然后在两个vrrp_instance中,都调用nginx检测功能:
在vrrp_instance VI_1和2中都加入这段内容

 track_script {
        chk_nginx
        }

然后关闭keepalived,再启动进行测试,两个ip交替出现证明实验成功

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • Nginx+Keepalived实现站点高可用 公司内部 OA 系统要做线上高可用,避免单点故障,所以计划使用2台...
    meng_philip123阅读 1,902评论 2 18
  • 一、高可用集群 (一)提升系统高可用性的解决方案:冗余(redundant) 工作模式active/passive...
    哈喽别样阅读 1,719评论 2 5
  • 当前大多数的互联网系统都使用了服务器集群技术,集群是将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些...
    jiangmo阅读 12,870评论 3 36
  • 我是微商,头像是我本人❗我的店在手机上,我的货都在我家❗微信起于微,立于信,❗微商时代卖的是产品, 体现的是人品,...
    瑞瑞28阅读 478评论 0 0
  • 今天与母亲聊了相对于平时更多的话题 一如既往还是关于父亲的 还是在说父亲的不足之处 已经记不清这是第几次听母亲这样...
    请输入您的阅读 240评论 0 0