藉助keepalived + nginx雙機熱備加固flume線路

lcz393537415發表於2016-10-28
原來的狀況: 兩臺flume ,10.0.15.70,10.0.15.71。在這兩臺flume機器上,分別會啟2個mina的server端,監聽客戶端傳送到8080,8081埠的資料,flume收集資料寫入到kafka及hdfs上。  由於現在flume單機的原因,如果出現問題,資料將無法轉發到別的機器上。於是,做了以下方案用於加固。

新方案:

兩個VIP(供keepalived使用):10.0.15.15,10.0.15.16
nginx,keepalive伺服器:10.0.15.70,10.0.15.71
4臺flume:10.0.15.210,10.0.15.215,10.0.15.217,10.0.15.218

最新架構方案如下圖所示:

藉助keepalived + nginx雙機熱備加固flume線路

兩臺nginx互備,其中一臺出現當機,另外一臺接替繼續工作。
flume機器: 10.0.15.210 10.0.15.217 互相備份,nginx 將8082,8083埠的資料轉發到這兩臺機器中的任意一臺的8080,8081埠,由這臺flume機器將資料寫入hdfs, 如果這臺機器出現問題,nginx將請求轉發到另外一臺。 同理,10.0.15.215,10.0.15.218互備,nginx 將8084,8085埠的資料轉發到這兩臺機器中的任意一臺的8080,8081埠,由這臺flume機器將資料寫入hdfs, 如果這臺機器出現問題,nginx將請求轉發到另外一臺。

下面來看具體的配置:
nginx和keepalived安裝不做描述,只關注配置:
keepalived配置,兩個keepalived互為主從備份關係
10.0.15.15的配置如下:cat  /etc/keepalived/keepalived.conf

點選(此處)摺疊或開啟

  1. ! Configuration File for keepalived
  2. global_defs {
  3. notification_email {
  4. }
  5. router_id LVS_DEVEL
  6. }
  7. vrrp_script chk_nginx {
  8. script "/etc/keepalived/chk_nginx.sh"
  9. interval 2
  10. weight 2
  11. }
  12. vrrp_instance VI_1 {
  13. state MASTER
  14. interface eth1
  15. virtual_router_id 200
  16. priority 100
  17. advert_int 1
  18. authentication {
  19. auth_type PASS
  20. auth_pass 123456
  21. }
  22. track_script {
  23. chk_nginx
  24. }
  25. virtual_ipaddress {
  26. 10.0.15.15
  27. }
  28. }
  29. vrrp_instance VI_2 {
  30. state BACKUP
  31. interface eth1
  32. virtual_router_id 251
  33. priority 50
  34. advert_int 1
  35. authentication {
  36. auth_type PASS
  37. auth_pass 123456
  38. }
  39. track_script {
  40. chk_nginx
  41. }
  42. virtual_ipaddress {
  43. 10.0.15.16
  44. }
  45. }
10.0.15.16的配置如下:

點選(此處)摺疊或開啟

  1. ! Configuration File for keepalived
  2. global_defs {
  3. notification_email {
  4. }
  5. router_id LVS_DEVEL
  6. }
  7. vrrp_script chk_nginx {
  8. script "/etc/keepalived/chk_nginx.sh"
  9. interval 2
  10. weight 2
  11. }
  12. vrrp_instance VI_1 {
  13. state BACKUP
  14. interface eth1
  15. virtual_router_id 200
  16. priority 99
  17. advert_int 1
  18. authentication {
  19. auth_type PASS
  20. auth_pass 123456
  21. }
  22. track_script {
  23. chk_nginx
  24. }
  25. virtual_ipaddress {
  26. 10.0.15.15
  27. }
  28. }
  29. vrrp_instance VI_2 {
  30. state MASTER
  31. interface eth1
  32. virtual_router_id 251
  33. priority 51
  34. advert_int 1
  35. authentication {
  36. auth_type PASS
  37. auth_pass 123456
  38. }
  39. track_script {
  40. chk_nginx
  41. }
  42. virtual_ipaddress {
  43. 10.0.15.16
  44. }
  45. }
10.0.15.15與10.0.15.16互為主備。

在配置中涉及到一個chk_nginx.sh指令碼,這個指令碼用於檢測nginx服務是否存活,如果nginx服務掛掉了,先重啟,如果出現當機的情況,則將對應的keepalived服務關掉,從而實現nginx的熱備份,指令碼內容如下:

點選(此處)摺疊或開啟

  1. #!/bin/bash
  2. # description:
  3. status=$(ps -C nginx --no-heading|wc -l)
  4. if [ "${status}" = "0" ]; then
  5. /usr/local/nginx/sbin/nginx
  6. status2=$(ps -C nginx --no-heading|wc -l)
  7. if [ "${status2}" = "0" ]; then
  8. /etc/init.d/keepalived stop
  9. fi
  10. fi

這個指令碼一定要有可執行許可權,否則無法實現熱備,這個點之前被坑了。

10.0.15.70及10.0.15.71l兩臺nginx的nginx.conf配置資訊如下:

點選(此處)摺疊或開啟

  1. worker_processes 2;
  2. error_log logs/error.log;

  3. pid /var/run/nginx.pid;
  4. worker_rlimit_nofile 102400;

  5. events {
  6. use epoll;
  7. worker_connections 102400;
  8. }

  9. stream {


  10. upstream proxy_tcp8082 {

  11. least_conn;
  12. server 10.0.15.210:8080 weight=1 max_fails=3 fail_timeout=30s;
  13. server 10.0.15.217:8080 weight=1 max_fails=3 fail_timeout=30s;
  14. }


  15. upstream proxy_tcp8083 {

  16. least_conn;
  17. server 10.0.15.210:8081 weight=1 max_fails=3 fail_timeout=30s;
  18. server 10.0.15.217:8081 weight=1 max_fails=3 fail_timeout=30s;
  19. }

  20. upstream proxy_tcp8084 {

  21. least_conn;
  22. server 10.0.15.215:8080 weight=1 max_fails=3 fail_timeout=30s;
  23. server 10.0.15.218:8080 weight=1 max_fails=3 fail_timeout=30s;
  24. }

  25. upstream proxy_tcp8085 {

  26. least_conn;
  27. server 10.0.15.215:8081 weight=1 max_fails=3 fail_timeout=30s;
  28. server 10.0.15.218:8081 weight=1 max_fails=3 fail_timeout=30s;
  29. }
  30. include tcp/*;

  31. }

其中 tcp是在conf目錄下的一個資料夾,包含4個檔案:tcp_8082.com,tcp_8083.com,tcp_8084.com,tcp_8085.com

tcp_8082.com對應檔案內容:
server {
        listen       8082;

        proxy_pass proxy_tcp8082;

    }
其它3個檔案的內容是一樣的,只是listen埠不同而已。



配置完成後,啟動nginx, keepalived, flume agent,就可以實現上面的功能。 nginx雙機熱備,加固flume.

nginx啟動: /usr/local/nginx/sbin/nginx
nginx停止: /usr/local/nginx/sbin/nginx -s stop

keepalived啟動: service keepalived start/stop



關於nginx+ keepalive雙機熱備,可以參考如下博文:
http://blog.csdn.net/zhu_tianwei/article/details/43603771

http://www.cnblogs.com/kaituorensheng/p/4889268.html























來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31347383/viewspace-2127290/,如需轉載,請註明出處,否則將追究法律責任。

相關文章