(1)apache-tomcat-8.5.16.tar.gz
(2)nginx-1.12.2.tar.gz
(3)keepalived-1.3.9.tar.gz
两台服务器如:192.168.10.11,192.168.10.12
- $ yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel open openssl-devel
1 |
$yum-yinstall gcc gcc-c++automake pcre pcre-devel zlib zlib-devel open openssl-devel |
(1)分别在两台服务器中安装 Tomcat,解压 apache-tomcat-8.5.16.tar.gz 及可完成安装。
(1)解压安装包:tar -zxvf nginx-1.12.2.tar.gz
(2)进入到 nginx-1.12.2 目录:cd nginx-1.12.2
(3)编译:
a) ./configure –with-http_stub_status_module –with-http_ssl_module –prefix=/usr/local/nginx
b) sudo make && sudo make install
(1)解压安装包:tar -zxvf keepalived-1.3.9.tar.gz
(2)进入到 keepalived-1.3.9 目录:cd keepalived-1.3.9
(3)执行编译:
a)./configure –prefix=/usr/local/keepalived –sysconf=/etc
b)sudo make && sudo make install
(1)分别修改两台服务器 nginx 配置文件,vi /usr/local/nginx/conf/nginx.conf
(2)内容如下:
- #nginx进程数
- worker_processes 1;
- #单个进程最大连接数
- events {
- worker_connections 1024;
- }
- #http服务器配置
- http {
- include mime.types;
- default_type application/octet-stream;
- sendfile on;
- #长连接超时时间,单位是秒
- keepalive_timeout 65;
- #upstream负载均衡配置,配置路由到tomcat的服务地址以及权重
- upstream localhost{
- server 192.168.10.11:8080 weight=2;
- server 192.168.10.12:8080 weight=2;
- }
- #虚拟主机的配置
- server {
- #监听端口
- listen 80;
- #域名可以有多个,用空格隔开
- server_name localhost;
- location / {
- root html;
- index index.html index.htm;
- #nginx跟后端服务器连接超时时间(代理连接超时)
- proxy_connect_timeout 3;
- #后端服务器数据回传时间(代理发送超时)
- proxy_send_timeout 30;
- #连接成功后,后端服务器响应时间(代理接收超时)
- proxy_read_timeout 30;
- proxy_pass http://localhost;
- }
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
- }
- }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
#nginx 进程数 worker_processes 1; #单个进程最大连接数 events{ worker_connections 1024; } #http 服务器配置 http{ include mime.types; default_type application/octet-stream; sendfile on; #长连接超时时间,单位是秒 keepalive_timeout 65; #upstream 负载均衡配置,配置路由到 tomcat 的服务地址以及权重 upstreamlocalhost{ server192.168.10.11:8080weight=2; server192.168.10.12:8080weight=2; } #虚拟主机的配置 server{ #监听端口 listen 80; #域名可以有多个,用空格隔开 server_name localhost; location/{ root html; index index.html index.htm; #nginx 跟后端服务器连接超时时间 (代理连接超时) proxy_connect_timeout3; #后端服务器数据回传时间 (代理发送超时) proxy_send_timeout30; #连接成功后,后端服务器响应时间 (代理接收超时) proxy_read_timeout30; proxy_pass http://localhost; } error_page 500502503504 /50x.html; location=/50x.html{ root html; } } } |
(1)修改 11 服务器的 keepalived 配置文件,vi /etc/keepalived/keepalived.conf
(2)内容如下:
- ! Configuration File for keepalived
- #全局配置
- global_defs {
- #keepalived切换的时候,发消息到指定的email,可配置多个email
- notification_email {
- feinik1@foxmail.com
- feinik2@foxmail.com
- }
- #通知邮件从哪个地址发出
- notification_email_from feinik@foxmail.com
- #通知邮件的smtp地址
- smtp_server smtp.exmail.qq.com
- #连接smtp服务器的超时时间,单位秒
- smtp_connect_timeout 30
- #Keepalived的机器标识,一个网络内保持唯一
- router_id nginx-master
- }
- #执行脚本配置
- vrrp_script chk_nginx {
- #脚本所在路径
- script "/home/project/keepalived/check_nginx.sh"
- #脚本执行间隔时间,秒
- interval 2
- #优先级
- weight 2
- }
- #keepalived实例配置
- vrrp_instance VI_1 {
- #指定实例的初始状态,MASTER或BACKUP两种状态,并且需要大写
- state MASTER
- #实例绑定的网卡
- interface ens33
- #虚拟路由标识,是一个数字,整个VRRP内唯一,如果keepalived配置了主备,需要相同
- virtual_router_id 51
- #优先级,数值愈大,优先级越高
- priority 100
- #MASTER与BACKUP之间同步检查的时间间隔,单位为秒
- advert_int 1
- #通信验证
- authentication {
- auth_type PASS
- auth_pass feinik
- }
- #追踪外围脚本
- track_script {
- #这里配置vrrp_script的名称
- chk_nginx
- }
- #虚拟ip配置,可配置多个
- virtual_ipaddress {
- 192.168.10.200
- }
- }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
!ConfigurationFileforkeepalived #全局配置 global_defs{ #keepalived 切换的时候,发消息到指定的 email,可配置多个 email notification_email{ feinik1@foxmail.com feinik2@foxmail.com } #通知邮件从哪个地址发出 notification_email_from feinik@foxmail.com #通知邮件的 smtp 地址 smtp_server smtp.exmail.qq.com #连接 smtp 服务器的超时时间,单位秒 smtp_connect_timeout30 #Keepalived 的机器标识,一个网络内保持唯一 router_id nginx-master } #执行脚本配置 vrrp_scriptchk_nginx{ #脚本所在路径 script"/home/project/keepalived/check_nginx.sh" #脚本执行间隔时间,秒 interval2 #优先级 weight2 } #keepalived 实例配置 vrrp_instanceVI_1{ #指定实例的初始状态,MASTER 或 BACKUP 两种状态,并且需要大写 stateMASTER #实例绑定的网卡 interfaceens33 #虚拟路由标识,是一个数字,整个 VRRP 内唯一,如果 keepalived 配置了主备,需要相同 virtual_router_id51 #优先级,数值愈大,优先级越高 priority100 #MASTER 与 BACKUP 之间同步检查的时间间隔,单位为秒 advert_int1 #通信验证 authentication{ auth_type PASS auth_pass feinik } #追踪外围脚本 track_script{ #这里配置 vrrp_script 的名称 chk_nginx } #虚拟 ip 配置,可配置多个 virtual_ipaddress{ 192.168.10.200 } } |
(1)修改 12 服务器的 keepalived 配置文件,vi /etc/keepalived/keepalived.conf
(2)内容如下:
- ! Configuration File for keepalived
- #全局配置
- global_defs {
- #keepalived切换的时候,发消息到指定的email,可配置多个email
- notification_email {
- feinik1@foxmail.com
- feinik2@foxmail.com
- }
- #通知邮件从哪个地址发出
- notification_email_from feinik@foxmail.com
- #通知邮件的smtp地址
- smtp_server smtp.exmail.qq.com
- #连接smtp服务器的超时时间,单位秒
- smtp_connect_timeout 30
- #Keepalived的机器标识,一个网络内保持唯一
- router_id nginx-master
- }
- #执行脚本配置
- vrrp_script chk_nginx {
- #脚本所在路径
- script "/home/project/keepalived/check_nginx.sh"
- #脚本执行间隔时间,秒
- interval 2
- #优先级
- weight 2
- }
- #keepalived实例配置
- vrrp_instance VI_1 {
- #指定实例的初始状态,MASTER或BACKUP两种状态,并且需要大写
- state BACKUP
- #实例绑定的网卡
- interface ens33
- #虚拟路由标识,是一个数字,整个VRRP内唯一,如果keepalived配置了主备,需要相同
- virtual_router_id 51
- #优先级,数值愈大,优先级越高
- priority 99
- #MASTER与BACKUP之间同步检查的时间间隔,单位为秒
- advert_int 1
- #通信验证
- authentication {
- auth_type PASS
- auth_pass feinik
- }
- #追踪外围脚本
- track_script {
- #这里配置vrrp_script的名称
- chk_nginx
- }
- #虚拟ip配置,可配置多个
- virtual_ipaddress {
- 192.168.10.200
- }
- }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
!ConfigurationFileforkeepalived #全局配置 global_defs{ #keepalived 切换的时候,发消息到指定的 email,可配置多个 email notification_email{ feinik1@foxmail.com feinik2@foxmail.com } #通知邮件从哪个地址发出 notification_email_from feinik@foxmail.com #通知邮件的 smtp 地址 smtp_server smtp.exmail.qq.com #连接 smtp 服务器的超时时间,单位秒 smtp_connect_timeout30 #Keepalived 的机器标识,一个网络内保持唯一 router_id nginx-master } #执行脚本配置 vrrp_scriptchk_nginx{ #脚本所在路径 script"/home/project/keepalived/check_nginx.sh" #脚本执行间隔时间,秒 interval2 #优先级 weight2 } #keepalived 实例配置 vrrp_instanceVI_1{ #指定实例的初始状态,MASTER 或 BACKUP 两种状态,并且需要大写 stateBACKUP #实例绑定的网卡 interfaceens33 #虚拟路由标识,是一个数字,整个 VRRP 内唯一,如果 keepalived 配置了主备,需要相同 virtual_router_id51 #优先级,数值愈大,优先级越高 priority99 #MASTER 与 BACKUP 之间同步检查的时间间隔,单位为秒 advert_int1 #通信验证 authentication{ auth_type PASS auth_pass feinik } #追踪外围脚本 track_script{ #这里配置 vrrp_script 的名称 chk_nginx } #虚拟 ip 配置,可配置多个 virtual_ipaddress{ 192.168.10.200 } } |
(1)新建 Nginx 的状态检查脚本:check_nginx.sh
(2)内容如下:
- #!/bin/sh
- NGINX=/usr/common/nginx/sbin/nginx
- PORT=80
- nmap localhost -p $PORT | grep "$PORT/tcp open"
- #echo $?
- if [ $? -ne 0 ];then
- $NGINX -s stop
- #这里再次尝试启动NG
- $NGINX
- sleep 5
- nmap localhost -p $PORT | grep "$PORT/tcp open"
- [ $? -ne 0 ] && cd /usr/common/keepalived/sbin && pkill keepalived
- echo "stoped"
- fi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/sh NGINX=/usr/common/nginx/sbin/nginx PORT=80 nmap localhost-p$PORT|grep"$PORT/tcp open" #echo $? if[$?-ne0];then $NGINX-sstop #这里再次尝试启动 NG $NGINX sleep5 nmap localhost-p$PORT|grep"$PORT/tcp open" [$?-ne0]&&cd/usr/common/keepalived/sbin&&pkill keepalived echo"stoped" fi |
(1)为了更直观的查看到 keepalived 切换的效果,将 11 服务器中的 nginx 的 upstream 服务只配置 11 的 tomcat 服务地址,12 服务器中的 upstream 服务只配置 12 的 tomcat 服务地址,这样只需要观察将 11 服务器中的 nginx 关闭看使用虚拟 ip 是否可以访问到 12 服务器的 tomcat。
(2)分别启动两个服务器中的 tomcat、nginx、keepalived,访问虚拟 ip:192.168.10.200,可以查看到访问的是主 keepalived 服务器的 tomcat
(3)关闭 11 服务器的 nginx,nginx -s stop,再次访问虚拟 ip,如下:说明主 keepalived 通过配置的脚本检测到了本服务的 nginx 服务挂掉了,所以立马切换至了备的 keepalived,这时 12 服务器的 keepalived 升为了主,所以就访问到了 12 服务器的 tomcat。
来源: http://blog.jobbole.com/113347/