首先介绍一下Keepalived,它是一个高性能的服务器高可用或热备解决方案,起初是专为LVS负载均衡软件设计的,Keepalived主要来防止服务器单点故障的发生问题,能够经过其与Nginx的配合实现web服务端的高可用。html
Keepalived以VRRP协议为实现基础,VRRP是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个)。前端
VRRP出现的目的就是为了解决静态路由的单点故障问题的,它能保证当个别节点宕机时,整个网络能够不间断地运行。java
下面咱们介绍一下nginx keepalived高可用方案的部署安装。nginx
在两台主机上准备以下压缩文件:c++
虚拟IPweb
真实IPsql
nginx端口vim
主从centos
192.168.124.20浏览器
192.168.124.13
80
MASTER
192.168.124.20
192.168.124.14
80
BACKUP
新建一个用户:
useradd tianyan
肯定安装目录,我这里的安装目录是:/home/tianyan/tianyan_soft/nginx.install。
在这个目录下分别新建两个目录用于安装nginx和keepalived,解压两个压缩包。
执行安装命令:
./configure --prefix=/home/tianyan/tianyan_soft/nginx.install \ --sbin-path=/home/tianyan/tianyan_soft/nginx.install/sbin/nginx --conf-path=/home/tianyan/tianyan_soft/nginx.install/conf/nginx.conf \ --error-log-path=/home/tianyan/tianyan_soft/nginx.install/error.log \ --http-log-path=/home/tianyan/tianyan_soft/nginx.install/access.log \ --pid-path=/home/tianyan/tianyan_soft/nginx.install/nginx.pid \ --lock-path=/home/tianyan/tianyan_soft/nginx.install/nginx.lock \ --user=tianyan --group=tianyan \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-http_ssl_module \ --with-http_realip_module \ --with-threads \ --with-pcre \ --http-client-body-temp-path=/home/tianyan/tianyan_soft/nginx.install/client/ \ --http-proxy-temp-path=/home/tianyan/tianyan_soft/nginx.install/proxy/ \ --http-fastcgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/fcgi/ \ --http-uwsgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/uwsgi \ --http-scgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/scgi
若是报错,记得安装相关依赖:
yum install gcc gcc-c++
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)。
注:以非root权限启动时,会出现 nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied) 错误。
缘由:Linux只有root用户能够使用1024一下的端口
解决办法:
./configure --prefix=/usr/local/keepalived
上述命令执行完毕后继续执行:
make && make install
安装完毕后,目录是这个样子:
将配置文件拷贝到系统对应的目录下
mkdir /etc/keepalived cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
vim /etc/keepalived/keepalived.conf
内容参考以下:
! Configuration File for keepalived global_defs { #一个没重复的名字便可 router_id hyq_slave } #ng是否运行 vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 weight -20 } vrrp_instance VI_1 { state BACKUP # 必填,能够是MASTER或BACKUP interface ens33 virtual_router_id 101 priority 90 advert_int 1 # 若是两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式 # 本机ip unicast_src_ip 192.168.124.14 unicast_peer { # 其余机器ip 192.168.124.13 } # 设置nopreempt防止抢占资源 nopreempt authentication { auth_type PASS auth_pass 1111 } # 与上方nginx运行情况检测呼应 track_script { chk_nginx } virtual_ipaddress { 192.168.124.20 } }
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { #一个没重复的名字便可 router_id hyq_slave } #ng是否运行 vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 weight -20 } vrrp_instance VI_1 { state BACKUP # 必填,能够是MASTER或BACKUP interface ens33 virtual_router_id 101 priority 90 advert_int 1 # 若是两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式 # 本机ip unicast_src_ip 192.168.124.14 unicast_peer { # 其余机器ip 192.168.124.13 } # 设置nopreempt防止抢占资源 nopreempt authentication { auth_type PASS auth_pass 1111 } # 与上方nginx运行情况检测呼应 track_script { chk_nginx } virtual_ipaddress { 192.168.124.20 } }
在/etc/keepalived目录下新建nginx_check.sh脚本
touch nginx_check.sh
编辑其内容为:
#!/bin/sh A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ] then /usr/sbin/nginx sleep 1 A2=`ps -C nginx --no-header |wc -l` if [ $A2 -eq 0 ] then systemctl stop keepalived fi fi
含义是:若是 nginx 中止运行,尝试启动,可是若是没法启动,则杀死本机的 keepalived 进程, keepalied将会把虚拟 ip 绑定到 BACKUP 机器上。 注意: /usr/sbin/nginx是nginx的启动命令,若是你安装到其余目录,则相应的替换。
Keepalived日志默认位置是在/var/log/messages目录下。咱们将其修改一下。
因为系统是centos7,修改位置为:/lib/systemd/system/keepalived.service
原内容:
EnvironmentFile=-/usr/local/keepalived/etc/sysconfig/keepalived ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS
修改成:
修改完毕后从新加载service
systemctl daemon-reload
建立命令软链接:
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived
执行:
keepalived -D -f /etc/keepalived/keepalived.conf -D 将日志输出到message日志,默认日志也在message -f 是指定配置文件
修改/etc/sysconfig/keepalived
把KEEPALIVED_OPTIONS="-D" 修改成:KEEPALIVED_OPTIONS="-D -d -S 0"
在/etc/rsyslog.conf 末尾添加
local0.* /var/log/keepalived.log
最后执行命令:
service rsyslog restart
重启keepalived后就能够看到日志在/var/log/keepalived.log下了。
当keepalived和nginx都启动后,咱们来测试一下。
首先在浏览器里面访问三个地址
我修改了一下nginx的index.html,能够看到当前vip指向是13的master节点:
而后,咱们手动中止13上的nginx,再次访问http://192.168.124.20。
说明安装成功。
其中经过ip address命令能够观察到网卡的变化
实验到这里,咱们就完成了keepalived + nginx 主从配置的安装部署了。
什么是双主模式?
分别介绍一下两种配置
一、Nginx+keepalived 主从配置
这种方案就是上文介绍过的,使用一个vip地址,前端使用2台机器,一台作主,一台作备,但同时只有一台机器工做,另外一台备份机器在主机器不出现故障的时候,永远处于浪费状态,仅仅用于灾备,平时都是空闲着的。
二、Nginx+keepalived 双主配置
这种方案,使用两个vip地址,前端使用2台机器,互为主备,同时有两台机器工做,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,以下图: