Keepalived实现Haproxy高可用实现Web动静分离

Keepalived实现Haproxy高可用实现Web动静分离

Keepalived简介:

  keepalived是以vrrp协议在Linux主机上以守护进程方式的实现linux服务器的多机热备功能;能根据配置文件生成ipvs规则,不需要ipvsadm客户端工具,还能对后端real server主机做健康状态检查,当real sever主机发生故障时,自动从ipvs中删除;当故障real server恢复后,还可以自动加入到ipvs中;从而实现业务正常运转。

  VRRP:Virtual Router Redundancy Protocol,虚拟路由器备援协定;一种网络协定,它可以将一组路由器组织成一个虚拟路由器,此虚拟路由器有真是的IP和MAC地址,这个IP地址配置在其中的一台路由器上,这个路由器即为主路由器(MASTER),其余的为备用路由器(BACKUP);如果这个路由器组内的MASTER路由器出现故障了,BACKUP路由器将会通过选举策略选出一个新的MASTER路由器继续向外提供服务。这样就保证了网络之间的通信不会中断。

工作原理:

输入图片说明

组成结构:   Netlink reflector:监控网络接口;

  IPVS wrapper:为ipvs生成规则,并监控ipvs指向的各real   server的健康状况(借助checkers完成);

  VRRP Stack:VRRP子进程,VRRP子进程就是来实现VRRP协议的;

  Checkers:负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析;

  其中VRRP Stack和Checkers为核心组件,为了避免其中的任意组建出现故障而导致keepalived服务无法正常工作,由watchdog监控这两个内部进程的正常运行。

实验拓扑:

输入图片说明

实验环境:
OS:CentOS_6.7-X86_64

HAproxy1:

IP:192.168.1.4
VIP:172.16.0.1

HAproxy2:

IP:192.168.1.5
VIP:172.16.0.1

Web Server1:

IP:192.168.1.6

Web Server2:

IP:192.168.1.7
实验流程:

配置高可用集群的前提:

1、时间必须保持同步:使用ntp服务器

[root@node3 ~]# yum install ntp
[root@node3 ~]# vim /etc/ntp.conf
restrict 192.168.1.0 mask 255.255.255.0 nomodify
server 127.127.1.0
fudge 127.127.1.0 stratum 1

启动服务:

[root@node3 ~]# chkconfig ntpd on
[root@node3 ~]# service ntpd start

各节点添加对时任务:

[root@node0 ~]# crontab -e
*/5 * * * *	/usr/sbin/ntpdate 192.168.1.7 &> /dev/null

2、节点必须名称互相通信:

编辑/etc/host 解析节点名称:

[root@node0 ~]# vim /etc/hosts
192.168.1.4	node0.chencer.org node0
192.168.1.5	node1.chencer.org node1

3、ssh密钥认证进行通信;

节点间ssh互信认证:

[root@node0 ~]# ssh-keygen -t rsa
[root@node0 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1

[root@node1 ~]# ssh-keygen -t rsa
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node0

HAproxy1和HAproxy2安装并配置haproxy:

[root@node0 ~]# yum install haproxy
[root@node0 ~]# vim /etc/haproxy/haproxy.cfg
global
log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
maxconn                 3000

listen stats
    mode http
    bind 0.0.0.0:8800
    stats enable
    stats hide-version
    stats uri     /admin?stats   
    stats realm   Haproxy\ Statistics   
    stats auth    admin:admin
stats admin if TRUE

frontend http-in
    bind *:80
    mode http
    log global
    option httpclose
    option logasap
    option dontlognull
    capture request  header Host len 20
    capture request  header Referer len 60
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .jpeg .gif .png .css .js

    use_backend static_servers          if url_static
default_backend dynamic_servers

backend static_servers
    balance roundrobin
    server imgsrv1 192.168.1.6:80 check maxconn 6000
    server imgsrv2 192.168.1.7:80 check maxconn 6000

backend dynamic_servers
    cookie srv insert nocache
    balance roundrobin
    server websrv1 192.168.1.6:80 check maxconn 1000 cookie websrv1
    server websrv2 192.168.1.7:80 check maxconn 1000 cookie websrv2
server websrv3 127.0.0.1:8080 check backup

将haproxy配置文件发送至另一节点:

[root@node0 ~]# scp /etc/haproxy/haproxy.cfg node1:/etc/haproxy/

确保haproxy开机不会自动启动:

[root@node0 ~]# chkconfig haproxy off
[root@node1 ~]# chkconfig haproxy off

提供服务故障页:

[root@node0 ~]# yum install httpd
[root@node0 ~]# vim /etc/httpd/conf/httpd.conf
Listen 8080
[root@node0 ~]# echo "Sorry" > /var/www/html/index.html
[root@node0 ~]# chkconfig httpd on
[root@node0 ~]# service httpd start

[root@node1 ~]# yum install httpd
[root@node1 ~]# vim /etc/httpd/conf/httpd.conf
Listen 8080
[root@node1 ~]# echo "Sorry" > /var/www/html/index.html
[root@node1 ~]# chkconfig httpd on
[root@node1 ~]# service httpd start

HAproxy1和HAproxy2安装并配置keepalived:

[root@node0 ~]# yum install keepalived
[root@node0 ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.0.1
    }
    notify_master "/etc/rc.d/init.d/haproxy start"
    notify_backup "/etc/rc.d/init.d/haproxy stop"
    notify_fault "/etc/rc.d/init.d/haproxy stop"
}

[root@node1 ~]# yum install keepalived
[root@node1 ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.0.1
    }
    notify_master "/etc/rc.d/init.d/haproxy start"
    notify_backup "/etc/rc.d/init.d/haproxy stop"
    notify_fault "/etc/rc.d/init.d/haproxy stop"
}

Web端配置:

Server1:
[root@node2 ~]# yum install httpd php
[root@node2 ~]# vim /var/www/html/index.php
<h1>Dynamic Server1</h1>
<?php
    phpinfo();
?>
[root@node2 ~]# vim /var/www/html/index.html
<h1>Static Server1</h1> 
[root@node2 ~]# chkconfig httpd on
[root@node2 ~]# service httpd start

Server2:
[root@node3 ~]# yum install httpd php
[root@node3 ~]# vim /var/www/html/index.php
<h1>Dynamic Server2</h1>
<?php
    phpinfo();
?>
[root@node3 ~]# vim /var/www/html/index.html
<h1>Static Server2</h1> 
[root@node3 ~]# chkconfig httpd on
[root@node3 ~]# service httpd start

启动keepalived:

[root@node0 ~]# service keepalived start;ssh node1 'service keepalived start'

查看master端资源分配状态:

VIP:
[root@node0 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:39:33:81 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.4/24 brd 192.168.1.255 scope global eth0
    inet 172.16.0.1/32 scope global eth0
    inet6 fe80::20c:29ff:fe39:3381/64 scope link 
       valid_lft forever preferred_lft forever

HAproxy:
[root@node0 ~]# service haproxy status
haproxy (pid  32994) 正在运行...

访问测试:

静态页面:

输入图片说明

动态页面:

输入图片说明

查看haproxy状态页:

输入图片说明

模拟节点故障:

[root@node0 ~]# service haproxy stop
[root@node0 ~]# service keepalived stop

查看各节点VIP信息:

[root@node0 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:39:33:81 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.4/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::20c:29ff:fe39:3381/64 scope link 
       valid_lft forever preferred_lft forever

[root@node1 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:78:10:cf brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.5/24 brd 192.168.1.255 scope global eth0
    inet 172.16.0.1/32 scope global eth0
    inet6 fe80::20c:29ff:fe78:10cf/64 scope link 
       valid_lft forever preferred_lft forever

服务不受影响;

转载于:https://my.oschina.net/masachencer/blog/637133

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值