ホームページ  >  記事  >  バックエンド開発  >  keepalived+nginxはnginxの高可用性を実現します

keepalived+nginxはnginxの高可用性を実現します

WBOY
WBOYオリジナル
2016-08-08 09:22:551014ブラウズ

keepalived+nginxはnginxの高可用性を実現します

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

nginxの高可用性

nginxはバックエンドリアルサーバーの負荷分散を実現します

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


実験環境: OS : Centos 6.4(redhat 6.4)yum 出典:123

4

5

6

7

8

9

10

11

[ centos ]

name =sohu-centos
有効にする=1gpgcheck=0
baseurl=http: // ミラー.sohu .com/centos/

[centos]

name=sohu-centos

baseurl=http://mirrors.sohu.com/centos/$releasever/os/$basearch

gpgcheck=1

enable=0

gpgkey=http://mirrors.sohu.com/centos/RPM-GPG-KEY-CentOS-6

[epel]

有効にする =0 code>🎜🎜gpgkey=http: 🎜🎜 [エペル]🎜

name=sohu-epelname=sohu-epel

baseurl=http://mirrors.sohu.com/fedora-epel/$releasever/$basearch/

enable=1

gpgcheck=0


baseurl=http://mirrors.sohu.com/fedora-epel/$releasever/$basearch/


拓扑图:

拓扑图的规划:

地址软件)keepalived+nginx172.16.22.100)キープアライブ+nginx 172.16.22.3httpd172.16 .22.4

IP

マスター172.16.22.1(

VIP

172.16.22.100

バックアップ

172.16.22.2(VIP)

apache1

apache2

🎜🎜🎜httpd🎜🎜🎜🎜🎜

このアーキテクチャで考慮すべき問題

1)、マスターがダウンしていない場合、マスターはVIPを占有し、nginxはマスター上で実行されます

2 )、マスターがダウンしている場合、バックアップは VIP を捕捉し、バックアップ上で nginx サービスを実行します

3) マスター サーバー上の nginx サービスがハングすると、VIP リソースはバックアップ サーバーに転送されます

4)、検出 バックエンド サーバーの健全性ステータス

マスターとバックアップの両方で nginx サービスが有効になっており、キープアライブ サービスのいずれかが停止すると、VIP はそのノードにドリフトします。 keepalived サービスはまだ存在します。

nginx サービスをハングアップさせ、vip を別のノードにドリフトさせたい場合は、スクリプトを使用するか、構成ファイルでシェル コマンドを使用して制御する必要があります。

まず、このアーキテクチャでは keepalived がバックエンド サーバーの健全性ステータスを検出できないことを明確にする必要があります。バックエンド サーバーの健全性ステータスの検出は nginx によって判断されますが、nginx の検出メカニズムは確実です。欠陥があるため、特定のバックエンド サーバーがダウンした後も、nginx はバックエンド サービスが一定時間内に応答できない場合、そのサーバーにリクエストを送信し、顧客のリクエストが来ると待機します。しばらくの間、リクエストはダウンしたサーバーに配信されませんが、一定時間が経過すると、nginx はダウンしたサーバーに配信リクエストを送信します。 1. keepalived+nginx x

をインストールします。

1

2

3 4

5

67

8

91011

12

1314

15

1617

18

19

2021

22

23

24

25

26

27

28

[root@jie1 〜]

# yum -y インストール keepalived

[root@jie1 ~]

#tar xf nginx-1.4.2.tar.gz

[root@jie1 ~]

#yum -y groupinstall "開発ツール" "サーバー プラットフォーム開発"

[root@jie1 ~]

#yum -y 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

--conf-path=/etc/nginx/nginx--prefix=/usr

--error-log-path=/var/log/nginx/error

--sbin-path=

--http-log-path=/var/log/nginx/access/usr/sbin/nginx

--pid-path=/var/run/nginx/nginx--conf-path=

/etc/ nginx /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.ロック

--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=/var/tmp/nginx/proxy/

--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/

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

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

--with-pcre--http-client-body-temp-path=

🎜/var/tmp/nginx/client/🎜🎜🎜🎜🎜🎜--http-proxy-temp-path=🎜🎜/var/tmp/ nginx/proxy/🎜🎜🎜🎜🎜🎜--http-fastcgi-temp-path=🎜🎜/var/tmp/nginx/fcgi/🎜🎜🎜🎜🎜🎜--http-uwsgi-temp-path=🎜🎜/ var/tmp/nginx/uwsgi🎜🎜🎜🎜🎜🎜--http-scgi-temp-path=🎜🎜/var/tmp/nginx/scgi🎜🎜🎜🎜🎜🎜--with-pcre🎜🎜

[root@jie1 nginx-1.4.2]# 作る&&作るインストール

2. nginx system Vサービススクリプトファイルを提供します

1

2

3

4

5

6

7

8

9

10

11

12

13

1 4

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

3 0

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

6 3

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

[root@jie1 nginx-1.4.2]# vim /etc/rc.d/init.d/nginx

#!/bin/sh

#!/bin/sh

#

# nginx - このスクリプトは nginx デーモンを開始および停止します

##

# chkconfig: - 85 15

# 説明: Nginx は HTTP(S) サーバー、HTTP(S) リバース

# プロキシと IMAP/POP3 プロキシ サーバー

# プロセス名: nginx

# 設定: /etc/nginx/nginx.conf

# 設定: /etc/sysconfig/nginx

# pidfile: /var/run/nginx.pid

# ソース関数ライブラリ

/etc/rc.d/init.d/functions。 

/etc/rc.d

/init/etc/sysconfig/network

.d

/functions

"$NETWORKING""no"# ソースネットワーク構成

。 nginx="/usr/sbin/nginx"

prog=$(basename$nginx)

NGINX_C/code>"/etc/nginx/nginx.conf"

/etc/sysconfig/network🎜🎜🎜🎜# ネットワークが起動していることを確認してください。🎜🎜🎜🎜[ 🎜"$NETWORKING"🎜🎜= 🎜「いいえ」🎜🎜] && exit0🎜🎜🎜🎜nginx=🎜"/usr/sbin/nginx"🎜🎜🎜🎜prog=$(🎜ベース名🎜🎜$nginx)🎜🎜🎜🎜NGINX_C/code>"/etc/nginx/nginx.conf"🎜🎜

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

lockfile=/var/lock/subsys/nginx

/etc/sysconfig/nginx

lockfile=

/var/lock/subsys/nginx

make_dirs() {grep# 必要なディレクトリを作成しますsed-`user=`nginx -V 2>&1 | 

grep

" の設定 引数:"grep| sed`

foropt in$options; do's/[^*]*--user=([^ ]*).*/1/g'

🎜-`🎜🎜🎜🎜オプティ -V 2>&1 | 🎜grep🎜🎜の設定 引数:'🎜🎜`🎜🎜🎜🎜foropt 🎜in🎜🎜$options; 🎜if[ `エコーecho$opt | grepgrep'.*-temp-path''.*-temp-path'` ]; then

value=`echothencut-d "="value=`エコー

$opt | ifカット-d "$value"]; then"="

-f 2`

mkdir[ ! -d "$value"chown]; その後

🎜🎜# echo "作成中" $value🎜🎜🎜mkdir🎜🎜-p $value && 🎜chown🎜🎜-R $user $value🎜🎜

fifi

fi

done

}

fi

完了

}

start() {

make_dirs

echo[ -x $nginx ] ||出口5

[ -f $NGINX_CONF_FILE ] || exit6

make_dirsretval=$?

echo

エコー-n $touch$lockfile

return$retval

}

「開始」 $prog: "

デーモン $nginx -c $NGINX_CONF_FILE

echoretval=$?

エコー

[ $retval -eq0 ] && 🎜touch🎜🎜$lockfile🎜🎜🎜return🎜🎜🎜🎜}🎜🎜🎜stop() {🎜🎜🎜エコー🎜🎜-n $🎜🎜「停止中」 $prog: "🎜🎜🎜🎜killproc $prog -やめます🎜🎜

retval=$?

echoretval=$?

エコーrm[ $retval -eq0 ] &&

rm

return$retval

}-f $lockfile

return

$retval

return$?

stop

sleep1

start

}}

restart() {

configtest || return$?

echoreturn$?

stop

sleep1RETVAL=$?

echo

🎜🎜start🎜🎜🎜🎜}🎜🎜🎜🎜reload() {🎜🎜🎜🎜configtest || 🎜return🎜🎜$?🎜🎜🎜echo🎜🎜-n $🎜🎜「リロード中」 $prog: "🎜🎜🎜🎜killproc $nginx -HUP🎜🎜🎜🎜RETVAL=$?🎜🎜🎜エコー🎜🎜

}

force_reload() {

restart

}再起動

configtest() {

}$nginx -t -c $NGINX_CONF_FILE

rh_status() {

}ステータス $prog

rh_status_q() {/dev/null2>&1

}

case""in

start)

rh_status >/dev/null2

>&1

;;

stop)

ケース

"$1"

;;

restart|configtest)

🎜🎜🎜start)🎜🎜🎜🎜rh_status_q && exit0🎜🎜🎜🎜$1🎜🎜🎜🎜;;🎜🎜🎜🎜stop)🎜🎜🎜🎜rh_status_q || exit0🎜🎜🎜🎜$1🎜🎜🎜🎜;;🎜🎜🎜🎜restart|configtest)🎜🎜

;;

reload)$1

;;

;;

force-reload)

force_reload

;;

status)

rh_status

;;

condrestart|try-restart)

リロード)

rh_status_q || exit7

;;

*)

echo$$1

exit2

esac

;;

force-reload)

force_reload

;;🎜🎜🎜🎜ステータス)🎜 🎜🎜🎜rh_status🎜🎜🎜🎜;;🎜🎜 🎜🎜condrestart|try-restart)🎜🎜🎜🎜rh_status_q || exit0🎜🎜🎜🎜;;🎜🎜🎜🎜*)🎜🎜🎜echo🎜🎜$🎜🎜"使用法: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"🎜🎜🎜🎜exit2🎜🎜🎜開始 nginx: nginx-1.4.2]# scp -p /etc/rc.d/init.d/nginx 172.16.22.2:/etc/rc.d/init.d #nginx サービス スクリプトをバックアップにコピーします。 -p は元の権限を維持することを意味します

3. 設定ファイルを変更します

1

2 3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

[root@jie1 〜]# cd /etc/keepalived/

[root@jie1 キープアライブ]# vim keepalived.conf

global_defs {

notification_email {

   

root@localhost

     root@localhost

   🎜🎜 🎜

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。