ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码

keepalived+nginx实现nginx的高可用

来源:网络整理     时间:2015-06-10     关键词:

本篇文章主要介绍了"keepalived+nginx实现nginx的高可用",主要涉及到方面的内容,对于PHPjrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下: keepalivednginx实现nginx的高可用=================================nginx的高可用nginx实现后端re...

keepalived+nginx实现nginx的高可用

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

nginx的高可用

nginx实现后端realserver的负载均衡

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


实验环境:OS:Centos 6.4(redhat 6.4)yum源:

1

2

3

4

5

6

7

8

9

10

11

[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]

name=sohu-epel

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

enable=1

gpgcheck=0


拓扑图:

拓扑图的规划:


IP地址

软件

Master

172.16.22.1(VIP172.16.22.100)

keepalived+nginx

Backup

172.16.22.2(VIP172.16.22.100)

keepalived+nginx

apache1

172.16.22.3

httpd

apache2

172.16.22.4

httpd

此架构需考虑的问题

1)、Master没挂,则Master占有vip且nginx运行在Master上

2)、Master挂了,则backup抢占vip且在backup上运行nginx服务

3)、如果master服务器上的nginx服务挂了,则vip资源转移到backup服务器上

4)、检测后端服务器的健康状态

Master和Backup两边都开启nginx服务,无论Master还是Backup,当其中的一个keepalived服务停止后,vip都会漂移到keepalived服务还在的节点上,

如果要想使nginx服务挂了,vip也漂移到另一个节点,则必须用脚本或者在配置文件里面用shell命令来控制。

首先必须明确后端服务器的健康状态检测keepalived在这种架构上是无法检测的,后端服务器的健康状态检测是有nginx来判断的,但是nginx的检测机制有一定的缺陷,后端服务器某一个宕机之后,nginx还是会分发请求给它,在一定的时间内后端服务响应不了,nginx则会发给另外一个服务器,然后当客户的请求来了,nginx会一段时间内不会把请求分发给已经宕机的服务器,但是过一段时间后,nginx还是会把分发请求发给宕机的服务器上。

一、安装keepalived+nginx

Master:

1、安装keepalived和编译安装nginx

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

[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\

--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.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=/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]# make && make install

2、提供nginx的system V服务脚本文件

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

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

63

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

#

# 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

# Source function library.

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

# Source networking configuration.

/etc/sysconfig/network

# Check that networking is up.

"$NETWORKING""no"] && exit0

nginx="/usr/sbin/nginx"

prog=$(basename$nginx)

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

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

lockfile=/var/lock/subsys/nginx

make_dirs() {

# make required directories

user=`nginx -V 2>&1 | grep"configure arguments:"sed's/[^*]*--user=\([^ ]*\).*/\1/g'-`

opti -V 2>&1 | grep'configure arguments:'`

foropt in$options; do

if[ `echo$opt | grep'.*-temp-path'` ]; then

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

if[ ! -d "$value"]; then

# echo "creating" $value

mkdir-p $value && chown-R $user $value

fi

fi

done

}

start() {

[ -x $nginx ] || exit5

[ -f $NGINX_CONF_FILE ] || exit6

make_dirs

echo-n $"Starting $prog: "

daemon $nginx -c $NGINX_CONF_FILE

retval=$?

echo

[ $retval -eq0 ] && touch$lockfile

return$retval

}

stop() {

echo-n $"Stopping $prog: "

killproc $prog -QUIT

retval=$?

echo

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

return$retval

}

restart() {

configtest || return$?

stop

sleep1

start

}

reload() {

configtest || return$?

echo-n $"Reloading $prog: "

killproc $nginx -HUP

RETVAL=$?

echo

}

force_reload() {

restart

}

configtest() {

$nginx -t -c $NGINX_CONF_FILE

}

rh_status() {

status $prog

}

rh_status_q() {

rh_status >/dev/null2>&1

}

case"$1"in

start)

rh_status_q && exit0

$1

;;

stop)

rh_status_q || exit0

$1

;;

restart|configtest)

$1

;;

reload)

rh_status_q || exit7

$1

;;

force-reload)

force_reload

;;

status)

rh_status

;;

condrestart|try-restart)

rh_status_q || exit0

;;

*)

echo$"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

exit2

esac

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

[root@jie1 nginx-1.4.2]# service nginx start

Starting nginx:                                            [  OK  ]

[root@jie1 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、修改配置文件

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 keepalived]# vim keepalived.conf

global_defs {

   notification_email {

     root@localhost

   }

   notification_email_from admin@localhost

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LTT

}

vrrp_script chk_nginx {  #检测nginx服务是否在运行有很多方式,比如进程,用脚本检测等等

   script "killall -0 nginx"  #用shell命令检查nginx服务是否存在

   interval 1  #时间间隔为1秒检测一次

   weight -2   #当nginx的服务不存在了,就把当前的权重-2

   fall 2      #测试失败的次数

   rise 1      #测试成功的次数

}

vrrp_instance IN_1 {

    state MASTER

    interface eth0

    virtual_router_id 22

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass aaaa

    }

    virtual_ipaddress {

        172.16.22.100

    }

   track_script {

    chk_nginx   #引用上面的vrrp_script定义的脚本名称

}

}

[root@jie1 keepalived]#scp keepalived.conf 172.16.22.2:/etc/keepalived #把配置文件copy到Backup服务器上,copy之前要保证Backup服务器上面已经安装了keepalived

4、开启keepalived和nginx的服务

1

2

3

4

5

6

7

8

[root@jie1 keepalived]# service keepalived start

Starting keepalived:                                       [  OK  ]

[root@jie1 keepalived]# chkconfig --add keepalived

[root@jie1 keepalived]# chkconfig keepalived on

[root@jie1 ~]# service nginx start

Starting nginx:                                            [  OK  ]

[root@jie1 ~]# chkconfig --add nginx

[root@jie1 ~]# chkconfig  nginx on

Backup:

1、安装keepalived和编译安装nginx

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

[root@jie2 ~]# yum -y install keepalived

[root@jie2 ~]#tar xf nginx-1.4.2.tar.gz

[root@jie2 ~]#yum -y groupinstall "Development tools" "Server  Platform Development"

[root@jie2 ~]#yum -y install pcre-devel

[root@jie2 ~]# cd nginx-1.4.2

[root@jie2 nginx-1.4.2]# groupadd nginx

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

[root@jie2 nginx-1.4.2]#./configure \

  --prefix=/usr \

  --sbin-path=/usr/sbin/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.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=/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@jie2 nginx-1.4.2]# make && make install

2、之前 已经从Master复制了nginx的system V服务脚本文件,启动nginx服务

1

2

3

4

[root@jie2 ~]# service nginx start

Starting nginx:                                            [  OK  ]

[root@jie2 ~]# chkconfig --add nginx

[root@jie2 ~]# chkconfig  nginx on

3、修改配置文件

1

2

3

4

[root@jie2 ~]# cd /etc/keepalived/

[root@jie2 keepalived]# vim keepalived.conf   #此配置文件是从Master服务器上copy过来,只需小小改动

state BACKUP  #把这里原先的MASTER改成BACKUP

priority 99   #把这里原先的100改成99

4、开启服务

1

2

3

4

[root@jie2 keepalived]# service keepalived start

Starting keepalived:                                       [  OK  ]

[root@jie2 keepalived]# chkconfig --add keepalived

[root@jie2 keepalived]# chkconfig keepalived on


apache1:

1、安装(博主这里用rpm包安装,各位朋友可以用源码编译安装)

1

[root@jie3 ~]# yum -y install httpd

2、建立测试网页文件

1

2

3

[root@jie3 ~]# cd /var/www/html/

[root@jie3 html]# cat index.html #建一个测试网页

this is apache1

3、开启服务

1

2

3

4

[root@jie3 html]# service httpd start

Starting httpd:                 [  OK  ]

[root@jie3 html]# chkconfig --add httpd

[root@jie3 html]# chkconfig  httpd on

apache2:

1、安装(博主这里用rpm包安装,各位朋友可以用源码编译安装)

1

[root@jie4 ~]# yum -y install httpd

2、建立测试网页文件

1

2

3

[root@jie4 ~]# cd /var/www/html/

[root@jie4 html]# cat index.html #建一个测试网页

this is apache2

3、开启服务

1

2

3

4

[root@jie4 html]# service httpd start

Starting httpd:                 [  OK  ]

[root@jie4 html]# chkconfig --add httpd

[root@jie4 html]# chkconfig  httpd on

此致所有安装已经完成。

二、nginx实现后端realserver的负载均衡,由于两边的配置文件必须保持一致,所以在Master配置完后直接copy到Backup上

Master:

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

[root@jie1 ~]# cd /etc/nginx/

[root@jie1 nginx]# grep -v "#" nginx.conf | grep -v "^$"

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    upstream apacheweb {  #定义负载均衡的模块

        server 172.16.22.3:80 max_fails=3 fail_timeout=2s;

        server 172.16.22.4:80 max_fails=3 fail_timeout=2s;

     }

    server {

        listen       80;

        server_name  localhost;

        location / {

            root   html;

            index  index.html index.htm;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

        location ~ \.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {

            root        /var/www/html;  #此处定义后端服务器网页存放路径

            proxy_pass   http://apacheweb;

        }

    }

}

[root@jie1 nginx]# scp nginx.conf 172.16.22.2:/etc/nginx

两边分别重启服务

1

2

3

4

5

6

7

8

9

10

[root@jie2 nginx]# service nginx restart

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

Stopping nginx:                                            [  OK  ]

Starting nginx:                                            [  OK  ]

[root@jie2 nginx]# service nginx restart

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

Stopping nginx:                                            [  OK  ]

Starting nginx:                                            [  OK  ]

验证负载均衡:

本博客只是简单的用nginx做了方向代理和静态页面的负载均衡,keepalived+nginx实现高可用的nginx的动静分离,读写分离,后续会持续更新

以上就介绍了keepalived+nginx实现nginx的高可用,包括了方面的内容,希望对PHPjrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播有兴趣的朋友有所帮助。

本文网址链接:http://www.codes51.com/article/detail_141117.html

相关图片

相关文章