keepalived, haproxy實現高可用,負載均衡

a, 使用單個nginx反向代理兩個tomcat

主機 ip 端口說明
主機1 192.168.56.66 8080: tomcat8, 80:nginx反向代理
主機2 192.168.56.77 8080: tomcat8

在這裏插入圖片描述

a.1,配置單個nginx反向代理

[root@c6 haproxy]# cat /etc/nginx/conf.d/proxy.conf 
upstream tomcats {
  #ip_hash;
  server 192.168.56.66:8080;
  server 192.168.56.77:8080;
}
server {
  listen 80;
  server_name c6;
  
  location / {
	proxy_pass http://tomcats;
         proxy_set_header  X-Real-IP $remote_addr;
          proxy_set_header  REMOTE-HOST $remote_addr;
          proxy_set_header  Host $host;
          proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

a.2,測試單個nginx反向代理

[root@c7 ~]# cat /opt/tomcat8/webapps/ROOT/a.jsp 
<body>
<h1>c7</h1>
<%
System.out.println(session.getCreationTime());
out.println("<br> SESSION ID:" + session.getId() + "<br>");
out.println("Session created time is :" + session.getCreationTime() 
+ "<br>");
%>
</body>

在這裏插入圖片描述

b, 使用keepalived維護虛擬ip: 在主備節點漂移

b1, 兩個節點配置keepalived

[root@c6 haproxy]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
     root@localhost
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server localhost
   smtp_connect_timeout 30
   router_id LVS_DEVEL_c6 ##主備不同
   vrrp_macst_group4 224.0.67.67
}

##測試keepalive的backup狀態: 存在這個文件則權重減30,角色變爲backup
#vrrp_script chk_keep {
#  script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
#  interval 1
#  weight -30
#}

vrrp_instance VI_1 {
    state MASTER	  ##主備不同
    interface eth1
    virtual_router_id 51
    priority 100	  ##主備不同
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass testkeepalive
    }
    virtual_ipaddress {
        192.168.56.230 ##浮動ip
    }
     
#    #調用keepalived狀態測試腳本 
#    track_script {
#      chk_keep
#    }

#    #發送通知: master狀態時,backup狀態時.. 
#    notify_master "/etc/keepalived/notify.sh master"
#    notify_backup "/etc/keepalived/notify.sh backup"
#    notify_fault  "/etc/keepalived/notify.sh fault"
}


##############################################
[root@c7 haproxy]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
   notification_email {
     root@localhost
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server localhost
   smtp_connect_timeout 30
   router_id LVS_DEVEL_c7 ##diff
}

##keepalived state change test script
#vrrp_script chk_keep {
#  script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
#  interval 1
#  weight -30
#}

vrrp_instance VI_1 {
    state BACKUP          ##diff
    interface eth1
    virtual_router_id 51
    priority 80          ##diff
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass testkeepalive
    }
    virtual_ipaddress {
        192.168.56.230 ##float ip
    }

#   #invoke script
#   track_script {
#      chk_keep 
#   }
  
#   #notify state change
#   notify_master "/etc/keepalived/notify.sh master"
#   notify_backup "/etc/keepalived/notify.sh backup"
#   notify_fault  "/etc/keepalived/notify.sh fault"
}

b2, keepalived的notify狀態通知腳本

每個keepalived主機都配置相同腳本: 當keepalived是master狀態時,啓動haproxy; 否則就停止haproxy
具體<linux如何發送126郵件>配置見https://blog.csdn.net/eyeofeagle/article/details/104295051#c_action_39

[root@c7 vagrant]# cat /etc/keepalived/notify.sh 
#!/bin/bash
#keepalived-master-->啓動haproxy
#keepalived-backup-->停止haproxy

role=$1
send_mail(){
   subject="keepalived master changes"
   context="$(date +'%F %T'): $(hostname) changes to $role "
   echo $context |mailx -s $subject [email protected] root@localhost
}

ctl_haproxy(){
   case $role in 
      master)
        service haproxy start;;

      backup|faul)
	service haproxy stop;;
    esac 
}

send_mail
ctl_haproxy

b3, 測試keepalived

[root@c6 conf.d]# service keepalived start
Starting keepalived:                                       [  OK  ]
[root@c6 conf.d]# ip a |grep 230
    inet 192.168.56.230/32 scope global eth1
    
[root@c7 conf.d]# systemctl start keepalived
[root@c7 conf.d]# ip a |grep 230


##ip轉移
[root@c6 conf.d]# service keepalived stop
Stopping keepalived:                                       [  OK  ]
[root@c6 conf.d]# ip a |grep 230
[root@c6 conf.d]# 

[root@c7 conf.d]# ip a |grep 230
    inet 192.168.56.230/32 scope global eth1

在這裏插入圖片描述

c, 使用兩個nginx反向代理兩個tomcat

兩臺主機nginx配置一樣,如上面配置
在這裏插入圖片描述

d, 使用兩個haproxy反向代理兩個tomcat

主機 ip 端口說明
主機1 192.168.56.66 8080: tomcat8, 80:happroxy
主機2 192.168.56.77 8080: tomcat8, 80:happroxy

在這裏插入圖片描述

a.1, 配置haproxy反向代理

[root@c6 haproxy]# 
....
frontend  main *:80
    #acl url_static       path_beg       -i /static /images /javascript /stylesheets
    #acl url_static       path_end       -i .jpg .gif .png .css .js

    #use_backend          static          if url_static
    default_backend      app

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
    balance     roundrobin
    server      static1 192.168.56.66:8080 check
    server      static2 192.168.56.77:8080 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    balance     roundrobin
    server      app1 192.168.56.66:8080 check
    server      app2 192.168.56.77:8080 check

##############################################
[root@c7 haproxy]# 
......
frontend  main *:80
    #acl url_static       path_beg       -i /static /images /javascript /stylesheets
    #acl url_static       path_end       -i .jpg .gif .png .css .js

    #use_backend          static          if url_static
    default_backend      app

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
    balance     roundrobin
    server      static1 192.168.56.66:8080 check
    server      static2 192.168.56.77:8080 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    balance     roundrobin
    server      app1 192.168.56.66:8080 check
    server      app2 192.168.56.77:8080 check

a.2, 測試haproxy反向代理

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章