侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Keepalived配合Nginx搭建高可用服务器集群

2023-09-24 星期日 / 0 评论 / 0 点赞 / 54 阅读 / 10528 字

系统 两台Nginx: CentOS6.5 x86_64 两台tomcat: CentOS6.5 x86_64 1.拓扑 机器IP 安装软件 角色

系统

两台Nginx:

CentOS6.5 x86_64

两台tomcat:

CentOS6.5 x86_64

1.拓扑

机器IP

安装软件

角色

虚拟ip

描述

192.168.15.132

Nginx、keepalived

Nginx主机

192.168.15.135

反向代理到tomcat1和tomcat2

192.168.15.133

Nginx、keepalived

Nginx备机

主机挂了切换虚拟ip 192.168.15.135

反向代理到tomcat1和tomcat2

192.168.15.128

Tomcat

Tomcat1

 

192.168.15.30

Tomcat

Tomcat2

 

IP地址

nginx(主LB):192.168.15.132

nginx(备LB):192.168.15.133

VIP地址:192.168.15.135

Real1的IP:192.168.15.128

Real2的IP:192.168.15.30

2.安装keepalived和nginx

在两台nginx服务器张安装keepalived:

wget http://www.keepalived.org/software/keepalived-1.2.15.tar.gz
tar -zxvf keepalived-1.2.15.tar.gzcd keepalived-1.2.15./configure --sysconf=/etc/  --with-kernel-dir=/usr/src/kernels/2.6.32-573.8.1.el6.x86_64make && make installln -s /usr/local/sbin/keepalived  /sbin/  

ln -s这一步很重要

不执行ln -s会报错“Starting keepalived: /bin/bash: keepalived: command not found”

service keepalived start

上述步骤也可以直接通过yum –y install keepalived 来代替,不同安装方式而已,不是重点

3.配置keepalived和nginx

二台Nginx上keepalived.conf配置文件如下

user  nobody;worker_processes  1;error_log  /usr/local/nginx/logs/error.log notice;pid        /usr/local/nginx/logs/nginx.pid;worker_rlimit_nofile 51200;events {    use epoll;    worker_connections  51200;}http {    include       mime.types;    default_type  application/octet-stream;    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                      '$status $body_bytes_sent "$http_referer" '                      '"$http_user_agent" "$http_x_forwarded_for"';    access_log  logs/access.log  main;    server_names_hash_bucket_size 128;    client_header_buffer_size 32k;    large_client_header_buffers 4 32k;    client_max_body_size 8m;    sendfile        on;    tcp_nopush     on;    server_tokens off;    keepalive_timeout  60;    fastcgi_connect_timeout 300;    fastcgi_send_timeout 300;    fastcgi_read_timeout 300;    fastcgi_buffer_size 64k;    fastcgi_buffers 4 64k;    fastcgi_busy_buffers_size 128k;    fastcgi_temp_file_write_size 128k;    gzip  on;    upstream backend    {    server 192.168.15.128;    server 192.168.15.130;    }    server {        listen       80;        server_name  192.168.15.135;        location / {            root   html;            index  index.php index.html index.htm;            proxy_redirect off;            proxy_set_header Host $host;            proxy_set_header X-Real-IP $remote_addr;            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;            proxy_pass http://backend;        }        error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }                 location /nginx_status {            stub_status on;             auth_basic "NginxStatus";            auth_basic_user_file /usr/local/nginx/htpasswd;            #allow 127.0.0.1;            #deny all;        }        location ~* /.(ini|docx|txt|doc|pdf)$ {        #禁止访问文档性文件        root /usr/share/nginx/html;        deny all;        }        location ~ .*/.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ {        root /home/image;        proxy_store on;        proxy_store_access user:rw group:rw all:rw;        proxy_temp_path /home/image;        if ( !-e $request_filename) {           proxy_pass  http://backend;        }    }}}

配置完成后分别service keepalived start启动。检验keepalived配置是否成功

两台keepalived的配置如下:可以看出两者之间的区别仅仅是主备的权重不同,主为100备为66,其余一些有作用的配置已经用红色标注

主:

global_defs {   notification_email {     [email protected]   }   notification_email_from keepalived@localhost    smtp_server 127.0.0.1   smtp_connect_timeout 30   router_id LVS_MASTER}vrrp_script chk_http_port {script "/usr/local/src/check_nginx_pid.sh"interval 2                           #(检测脚本执行的间隔)weight 2}vrrp_instance VI_1 {   #state MASTER    state BACKUP    nopreempt                           #设置非抢占模式时,修改“state MASTER”为“state BACKUP”,添加“nopreempt“    interface bond0    virtual_router_id 51    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass 1111}track_script {chk_http_port            #(调用检测脚本)}    virtual_ipaddress {        192.168.15.135    }}

备: 

global_defs {   notification_email {     [email protected]   }   notification_email_from keepalived@localhost    smtp_server 127.0.0.1   smtp_connect_timeout 30   router_id LVS_BACKUP}vrrp_script chk_http_port {script "/usr/local/src/check_nginx_pid.sh"interval 2                           #(检测脚本执行的间隔)weight 2}vrrp_instance VI_1 {    state BACKUP    interface bond0    virtual_router_id 51    priority 66    advert_int 1    authentication {        auth_type PASS        auth_pass 1111}track_script {chk_http_port            #(调用检测脚本)}    virtual_ipaddress {        192.168.15.135    }}

以下是针对nginx状态进行检测的脚本,第一次nginx服务死掉时,会重新启动,如果Nginx服务无法正常启动,则杀掉keepalived进程

vim  /usr/local/src/check_nginx_pid.sh
#!/bin/bashA=`ps -C nginx --no-header |wc -l`        if [ $A -eq 0 ];then                                  /usr/local/nginx/sbin/nginx              if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then                killall keepalived                          fifi

Ok,开始nginx负载均衡测试,停掉其中一台的任何服务,不影响整个系统的运作。

4.测试

依次启动两个tomcat=》启动两个nginx=》启动两个keepalived,查看主机上是否有虚拟ip 192.168.15.135

在192.168.15.128和192.168.15.30上分别解压修改tomcat的index页面:

vi webapps/ROOT/index.jsp

修改页面html部分

<html>    <head>    </head>    <body>SessionID:<%=session.getId()%><br/>SessionIP:<%=request.getServerName()%><br/><h1>tomcat1 page</h1></body></html>

这样可以通过访问index来判断访问是不是轮询的

通过虚拟ip访问nginx,看页面是不是轮询两个tomcat

将主机的nginx进程kill掉,看看vip是不是切换到备机器上了

访问虚拟ip是不是还能轮询访问tomcat

广告 广告

评论区