keepalived+nginx+tomcat 实现高可用
环境:
tomcat1 环境:10.1.2.53
tomcat2 环境:10.1.2.54
nginx主 和keepalived主 环境:10.1.2.53
nginx备 和keepalived备 环境:10.1.2.55
1、安装tomcat
省略。
2、安装nginx
在Centos下,yum源不提供nginx的安装,可以通过切换yum源的方法获取安装。也可以通过直接下载安装包的方法,**以下命令均需root权限执行**: 首先安装必要的库(nginx 中gzip模块需要 zlib 库,rewrite模块需要 pcre 库,ssl 功能需要openssl库)。 选定**/usr/local**为安装目录,以下具体版本号根据实际改变
1.安装gcc gcc-c++(如新环境,未安装请先安装)
$ yum install -y gcc gcc-c++
2.安装PCRE库
$ cd /usr/local/
$ wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz
$ tar -zxvf pcre-8.33.tar.gz
$ cd pcre-8.33
$ ./configure
$ make && make install
如报错:configure: error: You need a C++ compiler for C++ support 解决:yum install -y gcc gcc-c++
3.安装SSL库
$ cd /usr/local/
$ wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz $ tar -zxvf openssl-1.0.1j.tar.gz$ cd openssl-1.0.1j $ ./config $ make && make install
4.安装zlib库存
$ cd /usr/local/ $ wget http://zlib.net/zlib-1.2.11.tar.gz $ tar -zxvf zlib-1.2.11.tar.gz $ ./configure $ make && make install
5.安装nginx
$ cd /usr/local/ $ wget http://nginx.org/download/nginx-1.8.0.tar.gz $ tar -zxvf nginx-1.8.0.tar.gz $ cd nginx-1.8.0
$ ./configure --user=nobody --group=nobody --prefix=/usr/local/nginxpc --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-http_ssl_module
--with-pcre=/usr/local/pcre-8.33 --with-zlib=/usr/local/zlib-1.2.11 --with-openssl=/usr/local/openssl-1.0.1j
$ make && make install
修改/usr/local/nginx/config/nginx.conf配置文件
#user nobody;
worker_processes 8;
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
pid logs/nginx.pid;
worker_rlimit_nofile 204800;
events {
use epoll;
worker_connections 65535;
}
http {
#扩展名与文件类型映射表
include mime.types;
#默认类型
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
#日志
access_log /usr/local/nginx/logs/http/access.log;
error_log /usr/local/nginx/logs/http/error.log;
#gzip 压缩传输
gzip on;
gzip_min_length 1k; #最小1K
gzip_buffers 16 64K;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain application/x-javascript text/css application/xml application/javascript;
gzip_vary on;
#负载均衡组
#静态服务器组
upstream static.zh-jieli.com {
server 10.1.2.53:9003 weight=1;
}
#动态服务器组
upstream zh-jieli.com {
server 10.1.2.54:9003;
server 10.1.2.53:9003;
}
#配置代理参数
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 65;
proxy_send_timeout 65;
proxy_read_timeout 65;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
#缓存配置
proxy_cache_key '$host:$server_port$request_uri';
proxy_temp_file_write_size 64k;
proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
server{
listen 802;
server_name erp.zh-jieli.com;
location / {
index index;
}
location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
proxy_cache_valid 200 304 302 5d;
proxy_cache_valid any 5d;
proxy_cache_key '$host:$server_port$request_uri';
add_header X-Cache '$upstream_cache_status from $host';
proxy_pass http://static.zh-jieli.com;
expires 30d;
}
location ~ .*$ {
index index;
proxy_pass http://zh-jieli.com;
}
}
server{
listen 808;
server_name static;
location / {
}
location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
#root /home/sunline/web-app/tomcat/webapps/ROOT/webstatic;
proxy_pass http://zh-jieli.com;
expires 30d;
}
}
}
6.启动
shell-->cd /usr/local/nginx/sbin/ shell-->./nginx
检查是否启动成功:
打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。
部分命令如下:
重启:
$ /usr/local/nginx/sbin/nginx –s reload
停止:
$ /usr/local/nginx/sbin/nginx –s stop
测试配置文件是否正常:
$ /usr/local/nginx/sbin/nginx –t
强制关闭:
$ pkill nginx
nginx安装参考:https://blog.csdn.net/wxyjuly/article/details/79443432
nginx安装参考:https://www.cnblogs.com/wunaozai/p/5001742.html
3、安装keepalived
1、 yum安装keepalived
分别在53/55机器执行yum安装keepalived
yum install -y keepalived
2、keepalived命令
shell> service keepalived start #启动服务 shell> service keepalived stop #停止服务 shell> service keepalived restart #重启服务
3、查找53主/etc/keepalived/keepalived.conf配置文件
global_defs {
notification_email {
}
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh"
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
state MASTER #备份服务器上将 MASTER 改为 BACKUP
interface eno1 #网卡
virtual_router_id 51 #主、备机的virtual_router_id必须相同
priority 100 #主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
10.1.2.13 #VRRP H虚拟地址
}
}
4、查找55备/etc/keepalived/keepalived.conf配置文件
global_defs {
notification_email {
}
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface enp2s0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
10.1.2.13
}
}
5、分别在53/55上查询网卡,需要将网卡与虚拟IP绑定
shell-->ifconfig

6、在53/55的 /usr/local/src/创建文件check_nginx_pid.sh配置文件如下:
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
7、执行脚本文件,看是否可以使用。
shell-->cd /user/local/src shell-->./check_nginx_pid.sh
8、启动服务
shell-->service keepalived start
9、查看keepalived日志
shell-->cd /var/log shell-->tail -f messages
10、查看网卡是否与虚拟IP进行绑定。或者是否ping的通虚拟IP。
shell-->ip a|grep eno1 #eno1是配置文件中的网卡
53主keepalived会绑定虚拟IP

55备keepalived不会绑定虚拟IP

11、实现服务漂移
1、将53主服务停掉。
shell-->service keepalived stop
2、执行如下命令查看是否网卡还绑定虚拟IP
shell-->ip a|grep eno1 #eno1是配置文件中的网卡
3、查看55,看是否网卡与虚拟IP进行绑定,如果是绑定的,代表实现了漂移
shell-->ip a|grep enp2s0
shell-->ping 10.1.2.13
参考地址:https://www.cnblogs.com/youzhibing/p/7327342.html
简化版参考地址:https://blog.csdn.net/e421083458/article/details/30092795
浙公网安备 33010602011771号