首頁  >  文章  >  後端開發  >  keepalived+nginx實現nginx的高可用

keepalived+nginx實現nginx的高可用

WBOY
WBOY原創
2016-08-08 09:22:551014瀏覽

keepalived+nginx實現nginx的高可用

================================ ===

nginx的高可用

nginx實現後端realserver的負載平衡============ =================


redhat 6.4)

yum源: 678910 11

[centos]

name=sohu-centos

=http/k

:http.com

$releasever

/os/

$basearch

gpgcheck=1

enable

=0

/centos/RPM- GPG-KEY-CentOS-6

[epel]

name=sohu-epel

baseurl=http://mirrors.sohu.com/fedora-eop/fedora-e/f.sohu.com/fedora-eg/fedora-m =1

gpgcheck=0


🜎

拓樸圖的規劃:

IP

Master

172.16.22.1(:httpd 16.22.4

VIP

172.16.22.100)

keepalived+nginx

B.

172.16.22.100)keepalived+ nginxapache1

172.16.22.3

httpd

此架構需考慮的問題

1)、MasterT了,則backup搶佔vip且在backup上運行nginx服務

3)、如果master伺服器上的nginx服務掛了,則vip資源轉移到backup伺服器上

後端伺服器的健康狀態

Master和Backup兩邊都開啟nginx服務,無論Master或Backup,當其中的一個keepalived服務停止後,vip都會漂移到keepalived服務還在的節點上,

如果要想使nginx服務掛了,vip也漂移到另一個節點,則必須用腳本或在設定檔裡面用shell指令來控制。

首先必須明確後端伺服器的健康狀態偵測keepalived在這種架構上是無法偵測的,後端伺服器的健康狀態偵測是有nginx來判斷的,但是nginx的偵測機制有一定的缺陷,後端伺服器某一個宕機之後,nginx還是會分發請求給它,在一定的時間內後端服務響應不了,nginx則會發給另外一個伺服器,然後當客戶的請求來了,nginx會一段時間內不會把請求分發給已經宕機的伺服器,但是過一段時間後,nginx還是會把分發請求發給宕機的伺服器上。

一、安裝keepalived+nginx

Master: x

3

45

6

78

9

10

1112

13

14

15

16

17

15

16

22

23

24

25

26

27

28

[root@jie1 ~]

# yum -y install keepalived

[root@jie1 ~]

#tar xf nginx-1.4.2.tar.gz

[root@jie1 ~]

#yum -y groupinstall "Development tools" "Server  Platform Development"

[root@jie1 ~]

#yum -y install pcre-devel

[root@jie1 ~]# cd nginx-1.4.2

[root@jie1 nginx-1.4.2]# groupadd nginx

[root@jie1 nginx-1.4.2]# useradd -r -g nginx nginx

[root@jie1 nginx-1.4.2]#./configure

--prefix=/usr

--sbin-path=/usr/sbin/nginx--sbin-path=/usr/sbin/nginx

-- inx /nginx

.conf --error-log-path=

/var/log/nginx/error

.log --http-log-path=

/var/log/nginx/access

.log --pid-path=

/var/run/nginx/nginx

.pid 

--lock-path=/var/lock/nginx.lock

--user=nginx

--group=nginx

--with-http_ssl_module

--with-http_flv_module

--with-http_stub_status_module

--with-http_gzip_static_module

--http-client-body-temp-path=/var/tmp/nginx/client/

--http-proxy-temp-path. nginx/proxy/

--http-fastcgi-temp-path=

/var/tmp/nginx/fcgi/ var/tmp/nginx/uwsgi

--http-scgi-temp-path=/var/tmp/nginx/scgi

--

[root@jie1 nginx-1.4.2]# make && make install

2、提供nginx的system V服務腳本檔案

1

2

3

4

5

6

7

8

9

1 14

15

16

17

18

19

20

21

22

23

24

30

31

32

33

34

35

36

37

38

39

40

41

47

48

49

50

51

52

53

54

55

56

57

58

658599 3

64

65

66

67

68

69

70

71

72

73

74

78

80

81

82

83

84

85

86

87

88

89

90

91

97

98

99

100

101

102

103

104

105

106

107

108

5 112

113

114

[root@jie1 nginx-1.4.2]

# vim /etc/rc.d/init.d/nginx

#!/bin/sh

#

# nginx - this script starts and stops the nginx daemon

#

# chkconfig:   - 85 15

# description:  Nginx is an HTTP(S) server, HTTP(S) reverse

#               proxy and IMAP/POP3 proxy server

# processname: nginx

# config:      /etc/nginx/nginx.conf

# config:      /etc/sysconfig/nginx

# pidfile:     /var/run/nginx.pid

# 來源函數庫。

。 /etc/rc.d/init.d/函數

# 來源網路配置。

。 /etc/sysconfig/network

# 檢查網路是否已啟動。

"$NETWORKING""no"] && exit0

nginx="/usr/sbin/nginx"

prog=$( etc/nginx/nginx .conf"

[ -f/etc/sysconfig/nginx] && 。 /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {

# 製作所需目錄

user=`nginx -V 2>&1 | grep"配置 參數:「sed's/[^*]*--user=([^ ]*).*/1/g'-`

opti -V 2>&1 | grep'配置 參數:'`

foropt in$選項; 

如果[ `迴聲$opt | grep'.*-臨時路徑'` ]; 然後

value=`echo$opt | -d "="-f 2`

如果[ ! -d "$value"]; 然後

# echo "創建" $value

mkdir-p $value && chown-R $用戶$值

fi

fi

完成

}

開始() {

[ -x $nginx ] ||退出5

[ -f $NGINX_CONF_FILE ] || exit6

make_dirs

echo-n $「開始 $prog: "

守護進程 $nginx -c $NGINX_CONF_FILE

retval=$?

echo

[ $retval -eq0 ] && touch$lockfile

回傳$retval

}

$retval

()

{迴聲-n $

「停止 $prog: "

🎜killproc $prog -退出🎜🎜

retval=$?

迴聲

[ $retval -eq0 ] && rm-f $lockfile

回傳$retval

}

重新啟動() {

配置測試 || 回傳$?

停止

睡覺1

開始

}

{

配置測試 || 

回傳$?

迴聲

-n $「正在重新加載 $prog: "

killproc $nginx -HUP

RETVAL=$?

echo

}

force_reload() {

重啟

}

configtest() {

$nginx -t -c $NGINX_CONF_FILE

}

rh_status() {

狀態 $prog

}

rh_status_q() {

rh_status >/dev/null2>&1

}

case"$1"in

start)

rh_stat us_q && exit0

$1

;;

停止)

rh_status_q || exit0

$1

;;

重新啟動|設定測試)

$1

;;

重新加載)

rh_status_q || exit7

$1

;;

強制重新加載)

rh_status

;;

condrestart|嘗試重新啟動)

rh_status_q || exit0

;;

*)

echo$

"用法: $0 {開始|停止|狀態|重新啟動|condrestart|嘗試重新啟動|重新載入|強制重新載入|設定測試}「

exit2esac

[root@jie1 nginx-1.4.2]# chmod +x /etc/rc.d/init.d/nginx

[root@jie1 nginx-1.4.2]

# nginx服務啟動

Starting nginx:                                 nginx-1.4.2]

# scp -p /etc/rc.d/init.d/nginx  172.16.22.2:/etc/rc.d/init.d    #把nginx的服務腳本複製到backup上,-p是維持原有的權限

3、修改設定檔

12

3

45

6

7

8

9

10

16

17

18

19

20

21

22

23

24

25

38

32

33

34

35

36

[root@jie1 ~]

# cd /etc/keepalived/

[root@jie1 keepalived]

# vim keepalived.conf

global_defs {

   

notification_email {

     

root@localhost

   

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn