首先,我们要搞清楚,啥是双机热备?双机热备有啥用?双机热备怎么用?用在什么样的业务场景中?只有在搞清楚了这些之后,我们再去学习的时候才知道自己的目的和学习步骤。对于曾经做过nginx+tomcat集群的大佬们来说,这个应该不难,但是对于技术小白来说,这个还是稍稍有些困难的,所以,今天刚好在学习的过程中,将自己搭建nginx+keepalive实现双机热备的步骤分享给大家,希望能给大家学习提供帮助。

 

      1. 双机热备: 双机热备是应用于服务器的一种解决方案,其构造思想是主机和从机通过TCP/IP网络进行连接,正常情况下主机处于工作状态,从机处于监听状态,一旦发现主机出现异常情况,从机可以在短时间之内代替从机,百分之百实现主机的功能业务。(通俗一点就是,你本来有个手机,但是害怕万一坏了没有用的,所以你有准备了一个手机。在平常,你会在两个手机中存入相同的联系方式,如果真的正在用的手机坏了,就可以用备用的手机直接使用)

 

      2. nginx: nginx是一款轻量级的web代理服务器,使用它可以实现反向代理,对服务器的请求进行分发处理,同时nginx还可以管理tomcat提高访问量,目前中国的百度,京东,新浪,网易,腾讯,淘宝都在使用nginx。

 

      3. keepalive: keepalive主要是用于监控服务器健康状态的一款服务,在监控过程中,会将有问题的服务器从系统中删除,同时让替代服务器快速顶替旧服务器的位置,继续处理请求。当出现异常的服务器回复正常后,再将其加入到系统中,整个过程是完全自动化的,不需要人工处理。

 

一. linux系统中搭建nginx+tomcat集群

1. 在VM中安装两个linux系统的虚拟机(linux系统的版本是centos6.5)

 

2. 通过SSH远程连接工具将jdk,tomcat安装文件上传至linux系统中的/usr自建目录中备用。在/usr目录中通过mkdir jdk命令创建一个jdk文件夹用于存储jdk文件,再创建一个tomcat文件夹用于存放tomcat服务器。

 

3. 在linux系统中安装jdk以及配置java环境变量。通过命令进入/usr/jdk目录中,通过rpm -ivh jdk安装包 对jdk进行安装。

 

4. jdk安装成功后,通过cd /etc命令进入根目录下的etc目录中,再通过vi profile命令打开profile系统文件,然后通过i命令进入文件编辑模式,将下面的java环境变量配置代码复制在文件的最后,然后按键盘的ESC键退出文件编辑模式,接着通过: wq!命令保存修改并退出文件。

java环境变量配置代码:

JAVA_HOME=/usr/local/java/jdk1.8.0_221 CLASSPATH=$JAVA_HOME/lib/ PATH=$PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH

环境变量配置成功后,通过java -version会出现jdk的版本信息,证明环境变量配置成功。

 

 

5. jdk安装完后,通过cd /usr/tomcat命令进入tomcat压缩包所在的目录中,然后通过tar -zxvf tomcat压缩包 命令对tomcat的压缩包进行解压。然后通过mv命令对tomcat的文件夹进行重命名(tom1),然后在解压一个tomcat,重命名为tom2,两个tomcat是用来集群的。

 

6. tomcat解压好后,因为两个tomcat默认的端口号都是8080,一会启动两个tomcat启动不了(一个系统中,不能同时启动两个端口号一样的两个软件),所以,需要对第二个tomcat的端口号进行修改。通过cd conf命令进入tomcat的配置目录中,通过vi server.xml文件中,然后将默认端口号8080改成8081,然后通过:wq!保存并退出文件。

 

修改完之后,启动两个tomcat,并访问一下两个tomcat页面看是否启动成功。

 

7. 两个tomcat启动完后,在/user目录中创建一个nginx文件夹,然后通过SSH远程连接工具将nginx压缩包上传至该文件夹中 ,然后通过tar -zxvf nginx压缩包 命令进行解压。

 

接着需要在linux系统中安装编译工具和库文件,一会安装nginx需要用到,这个过程时间比较长,需要等待几分钟。

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

 

到了这一步,编译工具安装完成。

 

编译工具和库安装完成后,然后通过cd命令进入该文件下,通过./configure命令执行nginx的配置。

 

等待其执行完毕后,在通过make命令进行预编译。如果在执行make命令时,出现以下错误,则证明还是缺少依赖的工具和库,通过如下命令补充即可,如果不报错继续执行。

安装GCC库的命令: yum install gcc

安装PCRE库的命令: yum install pcre pcre-devel

安装ZLIB库的命令: yum install zlib zlib-devel

安装OPENSSL库的命令: yum install openssl openssl-devel

注意: 依赖工具和库暗转完毕后,重新执行./configure命令,否则无效。

安装完依赖的库后,通过执行make && make install命令编译和执行nginx的安装。

然后通过whereis nginx命令查看nginx的安装目录。

 

通过cd命令进入到/usr/local/nginx目录中。

 

然后再通过cd sbin命令进入nginx的bin目录中,通过执行两次./nginx命令启动nginx.

 

出现上述信息证明nginx启动完毕,然后在浏览器通过ip地址访问nginx是否出现欢迎界面。

 

到此,nginx安装并启动成功。

 

nginx代理服务器也有了,tomcat服务器也有了,需要通过设置,让nginx对两个tomcat进行的代理。

首先,因为需要对nginx进行配置,所以需要用./nginx -s stop命令将nginx停。(访问一下即可知道是否关闭nginx,嘿嘿)

然后通过cd ..返回到nginx文件夹中,然后通过cd conf进入nginx的配置目录中,然后通过vi nginx.conf命令打开nginx的配置文件。

 

然后在nginx.conf文件中的下图指定位置插入集群信息。

 

集群信息如下:

upstream jiqun_test{
     server 192.168.0.132:8080;
     server 192.168.0.132:8081; 
}

其中upstream是集群的关键词,后面是集群名称,自定义,但不能包含中文。

server表示后面配置的是服务器,后面是tomcat服务器所在的电脑的ip地址,ip地址后面是tomcat服务器的端口号。

 

在指定位置插入完集群信息后,然后在下面的的server模块中,将此处修改为:

 

修改完后,通过:wq!保存并退出,然后启动nginx,

查看是否由原来的欢迎界面变成了tomcat的默认界面。

 

到此,nginx + tomcat集群搭建完毕。

 

然后将第二个linux系统按照上述步骤搭建好nginx集群即可。

 

二. keepalive的安装和配置并监控服务器

 

1. 首先在任意的一台linux中通过命令安装keepalive监控服务。

    通过SSH远程连接工具将keepalived包上传至/usr/keepalived目录中。

    通过tar -zxvf命令将压缩包进行解压后生成keepaliced的文件夹。

 

2. 通过cd命令进入解压后的keepalived文件夹中,然后通过./configure命令进行初始化配置,然后通过make && make install命令编译并安装。

 

3. 安装完毕后,可以通过whereis keepalived查看安装的目录。

 

4. 接下来要将keepalived安装成linux的服务,否则,不能开机自启。

      首先我们要将keepalived中的两个文件init.d文件夹中的keepalived和sysconfig目录中的keepalived分别通过cp命令复制到/etc/init.d和/etc/sysconfig目录中。

       复制完毕后,通过软连接设置访问桥接。这两条命令分别是:

       ln -s /usr/local/sbin/keepalived /usr/sbin

       ln -s /usr/local/sbin/keepalived /sbin/

keepalived的软连接设置完毕后,通过chkconfig命令设置keepalived服务开机自启动。

keepalived服务开机自启动:chkconfig keepalived on

 

5. 设置完keepalived的开机自启动后,准备将第一台虚拟机作为正常使用的主服务器,然后需要设置主服务器上的keepalived的配置文件。

通过命令进入主服务器的/etc/keepalived目录中通过vi命令修改keepalived.conf文件,内容如下:

! Configuration File for keepalived
global_defs {
## keepalived 自带的邮件提醒需要开启 sendmail 服务。 建议用独立的监控或第三方 SMTP
router_id liuyazhuang133 ## 标识本节点的字条串,通常为 hostname
}

## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级。如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加。如果脚本执行结果非 0,并且 weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。

vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径
interval 2 ## 检测时间间隔
weight -20 ## 如果条件成立,权重-20
}

## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称

vrrp_instance VI_1 {

state MASTER ## 主节点为 MASTER, 对应的备份节点为 BACKUP

interface eth0 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 eth0

virtual_router_id 33 ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址

mcast_src_ip 192.168.50.133 ## 本机 IP 地址
priority 100 ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
nopreempt ## 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
## 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111 ## 真实生产,按需求对应该过来
}
## 将 track_script 块加入 instance 配置块
track_script {
chk_nginx ## 执行 Nginx 监控的服务
} #
# 虚拟 IP 池, 两个节点设置必须一样
virtual_ipaddress {
192.168.50.130 ## 虚拟 ip,可以定义多个
}
}

在主服务器上和从服务器上都将这个配置文件进行修改。

7. 修改完毕后,在两个服务器的任意指定目录中创建监控nginx的脚本文件,后缀名必须为.sh的文件,内容如下:

# vi /etc/keepalived/nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi

脚本文件设置完毕后,通过chmod +x 脚本文件的路径 设置铰孔脚本的可自行权限。

8. 通过service keepalived start命令启动两个服务器上的keepalived服务。

 

9.启动完毕后,即可在浏览器通过VIP(192.168.0.113)访问keepalived。

到此,keepalived + nginx高可用搭建成功。

 

心得:

1. 搭建过程中一定要细心,注意细节配置;

2. 注意在配置keepalived时,主从服务器的名称和优先级以及虚拟ip的设置,本人踩坑过来的。

 

 

      

 

☐