主備(keepalived+haproxy)
系統:centos6.9 mini
主機名 ip 虛擬ip
kh1 192.168.126.210
kh2 192.168.126.220 192.168.126.100
web11 192.168.126.230
web22 192.168.126.240
1、在kh1和kh2安裝keepalived和haproxy
[root@kh1 ~]# yum install -y keepavlivd haproxy
[root@kh2 ~]# yum install -y keepavlivd haproxy
2、在web1和web2上部署web服務
[root@web11 ~]# yum install -y httpd
[root@web11 ~]# echo "web1">/var/www/html/index.html
[root@web11 ~]# service httpd restart
[root@web11 ~]# chkconfig httpd on
[root@web22 ~]# yum install -y httpd
[root@web22 ~]# echo "web2">/var/www/html/index.html
[root@web22 ~]# service httpd restart
[root@web22 ~]# chkconfig httpd on
3、在kh1和kh2 配置keepalived,在kh1上查看虛擬ip
[root@kh1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id kh1
}
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 {
192.168.126.100
}
}
[root@kh1 ~]# /etc/init.d/keepalived restart
[root@kh1 ~]# ip addr list
link/ether 00:0c:29:da:01:36 brd ff:ff:ff:ff:ff:ff
inet 192.168.126.210/24 brd 192.168.126.255 scope global eth0
inet 192.168.126.100/32 scope global eth0
[root@kh2 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id kn2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.126.100
}
}
[root@kh2 ~]# /etc/init.d/keepalived restart
4、在kh1和kh2上配置haproxy(兩個節點的配置一樣的,紅色部分為添加部分)
[root@kh1 ~]# cat /etc/haproxy/haproxy.cfg
#---------------------------------------------------------------------
# Example configuration for a possible web application. See the
# full configuration options online.
#
# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the ‘-r‘ option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
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
#---------------------------------------------------------------------
# common defaults that all the ‘listen‘ and ‘backend‘ sections will
# use if not designated in their block
#---------------------------------------------------------------------
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
stats uri /haproxy-stats #監控頁面的url
stats refresh 30s #更新頁面時間
stats auth admin:admin #監控頁面的提示信息
stats hide-version #隱藏統計頁面上的HAproxy版本信息
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend http_80_in
bind *:80 #監聽端口,即haproxy提供web服務的端口,和lvs的vip端口類似
mode http #http的7層模式
log global
default_backend test1
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
#backend static
# balance roundrobin
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend test1
balance roundrobin
server web11 192.168.126.230:80 weight 1 check inter 15000 rise 2 fall 4
server web22 192.168.126.240:80 weight 2 check inter 15000 rise 2 fall 4
#web集群配置,服務器定義web11,webv22 ,check inter 1500是檢測心跳頻率rise 2是2次正確認為服務器可用,
fall 4是4次失敗認為服務器不可用,weight代表權重
[root@kh1 ~]# scp /etc/haproxy/haproxy.cfg [email protected]:/etc/haproxy/haproxy.cfg
#復制配置文件到kh2上
[root@kh1 ~]# /etc/init.d/haproxy restart
[root@kh2 ~]# /etc/init.d/haproxy restart
5、驗證
5.1 在kh1上關掉keepalived和haproxy 服務,vip 轉移到kh2上,後端服務正常
[root@kh1 ~]# /etc/init.d/keepalived stop
Stopping keepalived: [ OK ]
[root@kh1 ~]# /etc/init.d/haproxy stop
Stopping haproxy:
[root@kh2 ~]# ip addr list
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:80:2e:09 brd ff:ff:ff:ff:ff:ff
inet 192.168.126.220/24 brd 192.168.126.255 scope global eth0
inet 192.168.126.100/32 scope global eth0
inet6 fe80::20c:29ff:fe80:2e09/64 scope link
valid_lft forever preferred_lft forever
[root@kh2 ~]# curl http://192.168.126.100
web2
[root@kh2 ~]# curl http://192.168.126.100
web2
[root@kh2 ~]# curl http://192.168.126.100
web1
5.2 訪問haproxy 監控頁面,在瀏覽器輸入http://192.168.126.100/haproxy-stats ,填入用戶名admin和密碼admin(圖一),接著看到的是監控的頁面(圖二),可以看到web11,web2都是up的,當web11 宕機了,再次刷新,可以看到web11的狀態是down 的,顏色變成了紅色(圖三)
主備(keepalived+haproxy)