Keepalived+Nginx实现高可用和双主节点负载均衡

2019-03-27 01:07|来源: 网路

简介

Nginx可以实现高并发反向代理,lvs集群可以实现负载均衡,但是他们都有一个共同的弊端,就是Nginx,lvs架构中Director是单点故障,有没有一个好的方案解决这个问题呢?答案是有。通过Keepalived就可以实现,前端Nginx,lvs中Director服务器的高可用和负载均衡,通过shell命令或者脚本可以实现对服务器状态和服务的监控!

一、环境介绍
1、系统环境及软件版本
操作系统:CentOS6.4-i386
软件版本:Nginx-1.4.2
keepalived-1.2.7
yum源:
# vim /etc/yum.repos.d/centos6.repo
[base]
name=centos-base
baseurl=http://mirrors.sohu.com/centos/$releasever/os/$basearch
gpgcheck=1
enable=1
gpgkey=http://mirrors.sohu.com/centos/RPM-GPG-KEY-CentOS-6
[epel]
name=Fedora-epel
baseurl=http://mirrors.sohu.com/fedora-epel/$releasever/$basearch/
enable=1
gpgcheck=0

提示:如果你的系统是centos,系统默认的yum源是可以用的
2、拓扑图

Keepalived+Nginx实现高可用和双主节点负载均衡

3、IP地址规划
Client: 172.16.254.28
Keepalived+Nginx1: 172.16.3.3 Vip: 172.16.3.100
Keepalived+Nginx2: 172.16.3.4 Vip: 172.16.3.200

二、安装
1、安装keepalived
[root@node1 ~]# yum install keepalived

2、编译安装Nginx

[root@node1 ~]#useradd -r nginx
[root@node1 ~]#yum -y groupinstall “Development tools” “Server  Platform Development”
[root@node1 ~]#yum -y install pcre-devel
[root@node1 ~]#tar xf nginx-1.4.2.tar.gz
[root@node1 ~]#cd nginx-1.4.2
[root@node1 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

提示:在两台服务器上都要安装Nginx
3、提供Nginx服务启动脚本

[root@node1 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_CONF_FILE=”/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’-`
options=`$nginx -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@node1 nginx-1.4.2]# chmod +x /etc/rc.d/init.d/nginx
[root@node1 nginx-1.4.2]# chkconfig –add nginx
[root@node1 nginx-1.4.2]# chkconfig nginx on
[root@node1 nginx-1.4.2]# service nginx start
Starting nginx:                                            [  OK  ]

提示:服务脚本在两台Nginx服务器上都要提供

接下来请看第2页精彩内容http://www.linuxidc.com/Linux/2013-10/90809p2.htm

Nginx 的详细介绍请点这里
Nginx 的下载地址请点这里

相关阅读:

Nginx反向代理+负载均衡+健康探测+缓存 http://www.linuxidc.com/Linux/2013-09/89774.htm

Nginx Tomcat 集群负载均衡解决笔记 http://www.linuxidc.com/Linux/2013-07/86827.htm

Nginx 配置轮询分流-实现负载均衡【测试通过】 http://www.linuxidc.com/Linux/2013-06/86692.htm

Nginx负载均衡引起的网站不可用 http://www.linuxidc.com/Linux/2013-05/84063.htm

在Linux上使用Nginx为Solr集群做负载均衡 http://www.linuxidc.com/Linux/2012-12/75257.htm


转自:http://www.cnblogs.com/likehua/p/3568517

相关问答

更多

Nginx做负载均衡

如果你想后端web服务器和负载均衡器全部都双机热备的话,最少需要4台,你需要在两台负载均衡器上搭建keepalive,是负载均衡器也双机热备!

Nginx 负载均衡 问题

我的负载均衡是这样实现的。 upstream abc#com { server 1.2.3.1:80; server 1.2.3.4:80; } server { listen 80; server_name abc#com; location / { proxy_pass abc#com/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For ...

nginx使用URL hash进行负载均衡,如何在不影响hash结果的情况下实现高可用?

在使用 nginx的 cache时,使用 hash $request_uri; 再加一下行 hash_again 1; 注意,这个是Nginx的的三方模块算法,但是tengine的 consistent_hash 算法是不行的, 还是有连接转到故障后端,

最前面两台NGINX+keepalived可不可以同时承担WEB的高可用负载均衡和图片服务器并实现高可用?

完全可以实现的 nginx可以设置多个server,相互之间互不影响,用keepalived做负载的应用可以和图片服务器设置为不同的server,当然,也可以将图片服务器设置到两个服务器,也使用keepalived做图片服务器负载均衡。

nginx+keepalived实现双主什么意思

keepalived中有一个虚拟ip(VIP),正常情况下VIP是在master机器上,backup机器备用,主机宕机后backup接管VIP,这样来说同一时间只有一台机器工作,另一台备用,就浪费一台机器,就出现双主,就是把master上再配一个backup,backup机器上配一个master,互为主备两个VIP,这样两台机器都能提供服务。降低单机负载。

运维大神看过来,关于做nginx+keepalived双主热备

1. 两个VIP,我觉得没必要,前端两台做nginx+keepalive,只用一个VIP对外提供服务就行了,你的另一个VIP是用在什么地方。 2. 理论上上是的,但是为了控制脑裂的问题,我们都是检测到有问题,就重启那台服务器 3. 如果进程多的话,那么你还不如使用curl去访问,如果检测到那个项目访问不了,就重启nginx服务,那么就自动转移了。

咨询lvs+keepalived能实现负载均衡的双主双备吗?

第二个问题很容易,可以做邮件集群,有没有人做我就不知道了,我没做过。不管你信不信,反正我信了!第一个问题我真不知道,如果可以估计也比较复杂,就算配置顺利,万一出问题了排错就麻烦了。但是如果只提供http服务,可以用keepalived+nagix或keepalived+haproxy等方案来实现“只使用2台主机的负载均衡的双主双备”

咨询lvs+keepalived能实现负载均衡的双主双备吗?

第二个问题很容易,可以做邮件集群,有没有人做我就不知道了,我没做过。不管你信不信,反正我信了!第一个问题我真不知道,如果可以估计也比较复杂,就算配置顺利,万一出问题了排错就麻烦了。但是如果只提供http服务,可以用keepalived+nagix或keepalived+haproxy等方案来实现“只使用2台主机的负载均衡的双主双备”

大神,怎样实现redis的负载均衡和高可用

redis3.0 不是已经可以支持cluster了吗?直接用他的负载均衡不就行了。

负载均衡集群和高可用集群怎么区分?

负载均衡和高可用性的侧重点不同。负载均衡不一定意味着高可用性。 假设我们在机房里建起了一个访问量很高的网站,然后我们用一个负载均衡器,三台完全相同的Tomcat服务器,实现了负载均衡,所有流量都会被按某种算法分配给三台服务器。 那么,这个系统是高可用的吗?并不一定。如果只考虑Tomcat服务器的话,我们使用了三台服务器,比只用一台服务器的确既增加了负载平衡又增加了可用性。但是,从整个系统的角度来看,增加服务器的数量,只能算提高系统可用性的一个方面。 高可用性意味着高MTBF(平均故障间隔)和低故障 ...