基于nginx+keepalived 的主从热备负载均衡的反向代理实现
一、操作环境介绍
公司内部网络环境,台式主机上的两台虚拟机使用桥接网络,无法连接互联网。
(1)虚拟机ip :192.168.13.172 192.168.13.173
主机ip :192.168.13.148
(2)VMware 安装CentOS 7 操作环境
(3)keepalived 版本 2.1.5
(4)nginx 版本 1.10.0
二、离线安装
离线安装keepalived+nginx 安装包点击超链接获取,也可从官网直接下载。在安装软件之前我们需要先安装gcc 依赖、nginx依赖以及网络测试telnet 相关依赖(已经安装可忽略),安装完成之后,我们的linux环境已经具备安装keepalived + nginx 实现主从热备负载均衡的反向代理功能了。
1、安装gcc、nginx、telnet相关依赖
将下载好的安装包上传到172和173 服务器上/usr/tmp/repo/gcc 目录中(目录可自定义,截图仅供参考),执行命令:
rpm -Uvh *.rpm --nodeps --force
。等待全部安装完成,进行下一步,安装nginx。
2、安装nginx
(1)上传nginx-1.10.0.tar.gz 到/opt/nginx/目录下,执行
tar -zxvf nginx-1.10.0.tar.gz
,当前目录下会生成 nginx-1.10.0 解压目录。
(2)配置nginx安装选项 ,我这里只配置安装到/opt目录下,其它选项可执行./configuration –help查看。
cd nginx安装目录,执行如下命令:
./configure --prefix=/opt/nginx/nginx-1.10.0/install --sbin-path=/usr/bin/nginx
官网参数配置说明:http://nginx.org/en/docs/configure.html
(3)编译并安装,执行如下命令:
make && make install
(4)进入sbin目录,启动、停止、重启nginx
#进入nginx的sbin 目录
cd /opt/nginx/nginx-1.10.0/install/sbin
#启动nginx
./nginx
#停止nginx
./nginx -s stop
#重启nginx
./nginx -s reload
#查看nginx 运行情况
ps -ef | grep nginx
截图中为nginx 的work进程和master 进程,nginx默认配置启动成功后,会有两个进程,一个主进程(master守护进程),一个工作(work)进程。主进程负责管理工作进程,工作进程负责处理用户的http请求。
(5)配置nginx 开机启动
如果在(2)中 配置了 --sbin-path=/usr/bin/nginx ,那么把/usr/bin/nginx 命令添加到/etc/rc.d/rc.local 文件中,rc.local 文件会在系统启动的时候执行,但CentOS 建议将开机启服务写成服务描述文件添加到系统服务中,所以rc.local默认没有执行权限,需要给他添加执行权限
#添加开机启动配置
vim /etc/rc.d/rc.local
#添加如下参数
/usr/bin/nginx
#保存退出之后给rc.local文件添加执行权限
chmod +x /etc/rc.d/rc.local
如果在(2)中没有配置 --sbin-path=/usr/bin/nginx,那么把 nginx安装目录下的执行文件路径添加到/etc/rc.d/rc.local文件中
#添加开机启动配置
vim /etc/rc.d/rc.local
#添加如下参数
/opt/nginx/nginx-1.10.0/install/sbin/nginx
#保存退出之后给rc.local文件添加执行权限
chmod +x /etc/rc.d/rc.local
(6)修改nginx.conf配置文件
#进入nginx配置路径
cd /opt/nginx/nginx-1.10.0/install/conf
vim nginx.conf
两个代理服务器都添加服务端 配置,如果不通过代理,我的访问地址是http://192.168.13.148:7211/quartz和http://192.168.13.148:7210/quartz。
3、安装keepalived
(1) 上传keepalived-2.1.5.tar.gz 到/opt/nginx/目录下(我都上传到了这里),执行
tar -zxvf keepalived-2.1.5.tar.gz
在当前路径下生成keepalived-2.1.5 目录
(2)切入到keepalived 生成目录,执行编译配置操作:
#
./configure --prefix=/opt/nginx/keepalived-2.1.5/keepalived
(3) 再安装 :
make && make install
#执行成功之后会在/opt/nginx/keepalived-2.1.5 路径下生成keepalived 目录,keepalived 就安装到了这里
(4)设置keepalived 开机启动
cp /opt/nginx/keepalived-2.15/keepalived/etc/init.d/keepalived /etc/init.d/keepalived
#创建keepalived 文件夹
mkdir /etc/keepalived
#复制配置文件
cp /opt/nginx/keepalived-2.15/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
#添加keepalived 服务
chkconfig -add keepalived
# 设置开机启动
chkconfig keepalived on
#查看开机启动列表
chkconfig --list
#启动、停止keepalived 服务
service keepalived start/stop
(5)修改配置文件,启动主从热备,挂上虚拟ip,监听nginx运行情况等
#切入到keepalived 配置文件路径
cd /opt/nginx/keepalived-2.1.5/keepalived/etc/keepalived
#修改keepalived.conf
vim keepalived.conf
我们对配置文件简单介绍一下:
红色部分是需要我们自己添加的部分,主要负责keepalived 对nginx的监控,蓝色部分需要我们去修改
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
# 添加监控nginx 的脚本,主从都要有
vrrp_script chk_http_port {
script "/opt/nginx/chk_nginx.sh" #监控nginx 运行状态的脚本
interval 2 #每两秒钟监控一次
weight -5 #nginx挂机,keepalived 权重值下降5
fall 2
rise 1
}
vrrp_instance VI_1 {
state MASTER #主机为MASTER,从机为BACKUP
interface ens33 #服务器联网网卡
virtual_router_id 51 #keepalived 组id,一组主从keepalived ,值一致
priority 101 #权重,越大就会优先分配访问
advert_int 1
authentication { #主从热备通讯方式和密码,主从必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #VIP,对外虚拟ip,可根据keepalived 和nginx的运行 状态而漂移,主从一致
192.168.13.16
192.168.13.17
192.168.13.18
}
#添加keepalived 监控nginx 模块,引用上面的chk_http_port 模块
track_script {
chk_http_port
}
}
4、访问
上面我们通过keepalived设置了虚拟ip,并且我们代理的地址是http://192.168.13.148:7210/quartz 和 http://192.168.13.148:7211/quartz两个服务
访问方式,在浏览器中输入 http://192.168.13.16,直接就会跳转到我们上面的两个地址:
6、测试是否为主从热备和负载均衡,可以自行关闭服务端程序,自行关闭nginx进程,自行关闭keepalived进程,去测试观察,我这边都做过测试,没有问题。希望你顺利。