参考:http://litaotao.blog.51cto.com/6224470/1302100
https://www.cnblogs.com/youzhibing/p/7327342.html
一环境说明
192.168.127.129 (master nginx+keepalived)
192.168.127.130 (backup nginx+keepalived )
192.168.127.134 (web)
192.168.127.138 (web)
vip 192.168.127.100 (实际环境中这个ip需要是个公网地址供客户端访问)
二 要验证的功能有:
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命令来控制。
三 安装nginx和keepalived(主):
3.1 安装keepalived和编译安装nginx
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
make && make install
3.2 编辑nginx的启动脚本
vi /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 30 21
# description: http service.
# Source Function Library
. /etc/init.d/functions
# Nginx Settings
NGINX_SBIN="/usr/local/nginx/sbin/nginx"
NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
NGINX_PID="/usr/local/nginx/logs/nginx.pid"
RETVAL=0
prog="Nginx"
start() {
echo -n $"Starting $prog: "
mkdir -p /dev/shm/nginx_temp
daemon $NGINX_SBIN -c $NGINX_CONF
RETVAL=$?
echo
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc -p $NGINX_PID $NGINX_SBIN -TERM
rm -rf /dev/shm/nginx_temp
RETVAL=$?
echo
return $RETVAL
}
reload(){
echo -n $"Reloading $prog: "
killproc -p $NGINX_PID $NGINX_SBIN -HUP
RETVAL=$?
echo
return $RETVAL
}
restart(){
stop
start
}
configtest(){
$NGINX_SBIN -c $NGINX_CONF -t
return 0
}
3.3 修改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 {
192.168.127.100 #虚拟ip
}
track_script {
chk_nginx #引用上面的vrrp_script定义的脚本名称
}
}
3.4 启动keepalive和nginx服务
/etc/init.d/nginx start
/etc/init.d/keepalived start
四 安装nginx和keepalived(从)
4.1、安装keepalived和编译安装nginx
同master一样(第一步和第二步)
4.2 修改keepalived配置文件
先从master上面拷贝这个配置文件然后更改
vim keepalived.conf #此配置文件是从Master服务器上copy过来,只需小小改动
state BACKUP #把这里原先的MASTER改成BACKUP
priority 99 #把这里原先的100改成99
4.3 启动服务
/etc/init.d/nginx start
/etc/init.d/keepalived start
##############################################################################################################
五 配置两个后端的web服务器
134 :
yum install httpd -y
然后进入到/var/www/html/里面建立一个测试页
vi index.html
134
最后启动服务 /etc/init.d/httpd start
138:
yum install httpd -y
然后进入到/var/www/html/里面建立一个测试页
vi index.html
138
最后启动服务 /etc/init.d/httpd start
注意:两个测试页不同有助于我们分辨是否成功,当然实际环境中都是一样的
六 配置nginx负载均衡
master:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream apacheweb { #定义负载均衡的模块
server 192.168.127.134:80 max_fails=3 fail_timeout=2s;
server 192.168.127.138:80 max_fails=3 fail_timeout=2s;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
proxy_pass http://apacheweb;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
backup:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream apacheweb { #定义负载均衡的模块
server 192.168.127.134:80 max_fails=3 fail_timeout=2s;
server 192.168.127.138:80 max_fails=3 fail_timeout=2s;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
proxy_pass http://apacheweb;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
然后两边分别重启nginx服务
七 测试
1 把master上面的nginx服务停掉,看客户端能否正常访问网站并且查看vip是否会移动到backup上面
2 把master 上面的keepalived 服务停掉 看客户端能否正常访问网站并且查看vip是否会移动到backup上面
3 把其中一个web服务停掉,看是否还能正常访问web
4测试的时候发现每刷新一次页面就切换一次,lvs不是切换页面