搭建高可用平台

发布于:2025-03-24 ⋅ 阅读:(80) ⋅ 点赞:(0)

三主热备架构

搭建Tomcat

在Tomcat1主机安装配置JDK

官网:https://www.oracle.com

1.下载JDK21

[root@tomcat1 ~]# wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz

# 查看下载文件
[root@tomcat1 ~]# ls
anaconda-ks.cfg  jdk-21_linux-x64_bin.tar.gz

# 2. 解压JDK21
[root@tomcat1 ~]# tar -zxf jdk-21_linux-x64_bin.tar.gz -C /usr/local
[root@tomcat1 ~]# ls /usr/local
bin  etc  games  include  jdk-21.0.6  lib  lib64  libexec  sbin  share  src
[root@tomcat1 ~]# ls /usr/local/jdk-21.0.6/
bin  conf  include  jmods  legal  lib  LICENSE  man  README  release

# 3. 配置JDK
[root@tomcat1 ~]# vim /etc/profile
....
export JAVA_HOME=/usr/local/jdk-21.0.6/
export PATH=$PATH:$JAVA_HOME/bin

# 4. 刷新文件让配置生效
[root@tomcat1 ~]# source /etc/profile


# 验证JDK是否安装成功
[root@tomcat1 ~]# java -version
java version "21.0.6" 2025-01-21 LTS
Java(TM) SE Runtime Environment (build 21.0.6+8-LTS-188)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.6+8-LTS-188, mixed mode, sharing)
 

在Tomcat1主机安装配置Tomcat

官网:Apache Tomcat® - Welcome!

# 1. 下载tomcat
[root@tomcat1 ~]# wget https://dlcdn.apache.org/tomcat/tomcat-11/v11.0.5/bin/apache-tomcat-11.0.5.tar.gz

[root@tomcat1 ~]# ls
anaconda-ks.cfg  apache-tomcat-11.0.5.tar.gz  jdk-21_linux-x64_bin.tar.gz

# 2. 解压tomcat
[root@tomcat1 ~]# tar -zxf apache-tomcat-11.0.5.tar.gz -C /usr/local/
[root@tomcat1 ~]# cd /usr/local/
[root@tomcat1 local]# ls
apache-tomcat-11.0.5  bin  etc  games  include  jdk-21.0.6  lib  lib64  libexec  sbin  share  src
[root@tomcat1 local]# mv apache-tomcat-11.0.5/ tomcat-11.0.5/
[root@tomcat1 local]# cd tomcat-11.0.5/
 

# 3. 配置tomcat
[root@tomcat1 tomcat-11.0.5]# vim /etc/profile
......
export TOMCAT_HOME=/usr/local/tomcat-11.0.5
export PATH=$PATH:$TOMCAT_HOME/bin

# 4. 刷新配置
[root@tomcat1 bin]# source /etc/profile

# 5. 启动tomcat
[root@tomcat1 ~]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat-11.0.5
Using CATALINA_HOME:   /usr/local/tomcat-11.0.5
Using CATALINA_TMPDIR: /usr/local/tomcat-11.0.5/temp
Using JRE_HOME:        /usr/local/jdk-21.0.6/
Using CLASSPATH:       /usr/local/tomcat-11.0.5/bin/bootstrap.jar:/usr/local/tomcat-11.0.5/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

配置好,打开浏览器,输入http://192.168.111.42:8080,如果能够看到那只猫,则已经配置完成。记得关闭防火墙和seliunx。

在Tomcat2主机安装配置Java和Tomcat

1.将tomcat和jdk传输到tomcat2

[root@tomcat1 local]# scp -r /usr/local/apache-tomcat-11.0.5/      root@192.168.111.42:/usr/local > /dev/null

[root@tomcat1 local]# scp -r /usr/local/jdk-21.0.6/  root@192.168.111.42:/usr/local > /dev/null

2.将配置文件拷贝到tomcat2

[root@tomcat1 local]# scp -r /etc/profile   root@192.168.111.42:/etc/profile
[root@tomcat2 ~]# cat /etc/profile

.........

export  JAVA_HOME=/usr/local/jdk-21.0.6/
export  PATH=$PATH:$JAVA_HOME/bin
export  TOMCAT_HOME=/usr/local/apache-tomcat-11.0.5
export  PATH=$PATH:$TOMCAT_HOME/bin

3.刷新配置文件

[root@tomcat2 ~]# source /etc/profile

4. 验证JDK是否安装成功
[root@tomcat2 ~]# java -version
java version "21.0.6" 2025-01-21 LTS
Java(TM) SE Runtime Environment (build 21.0.6+8-LTS-188)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.6+8-LTS-188, mixed mode, sharing)

# 5. 启动tomcat
[root@tomcat2 ~]# startup.sh 

在Tomcat3主机安装jdk和Tomcat

1.将配置tomcat和jdk传输到tomcat3

[root@tomcat1 local]# scp -r /usr/local/apache-tomcat-11.0.5/ root@192.168.111.43:/usr/local > /dev/n

[root@tomcat1 local]# scp -r /usr/local/jdk-21.0.6/  root@192.168.111.42:/usr/local > /dev/null

2.将配置文件拷贝到tomcat3

[root@tomcat1 local]# scp -r /etc/profile   root@192.168.111.43:/etc/profile
[root@tomcat3 ~]# cat /etc/profile

.........

export  JAVA_HOME=/usr/local/jdk-21.0.6/
export  PATH=$PATH:$JAVA_HOME/bin
export  TOMCAT_HOME=/usr/local/apache-tomcat-11.0.5
export  PATH=$PATH:$TOMCAT_HOME/bin

3.刷新配置文件

[root@tomcat2 ~]# source /etc/profile

4. 验证JDK是否安装成功
[root@tomcat2 ~]# java -version
java version "21.0.6" 2025-01-21 LTS
Java(TM) SE Runtime Environment (build 21.0.6+8-LTS-188)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.6+8-LTS-188, mixed mode, sharing)

# 5. 启动tomcat
[root@tomcat2 ~]# startup.sh 

搭建Nginx和keepalived

在master里面搭建nginx

先下载nginx和keepalived,这里默认nginx和keepalived下载完成

先关闭seliunx和防火墙

[root@master ~]# systemctl stop firewalld.service 
[root@master ~]# setenforce 0

1.配置nginx
[root@master ~]# vim /etc/nginx/conf.d/master.conf 

upstream tomcat {
        server 192.168.111.41:8080;
        server 192.168.111.42:8080;
        server 192.168.111.43:8080;
}
server {
        listen 80;
        server_name 192.168.111.30;
        access_log /var/log/nginx/master_access.log;
        error_log  /var/log/nginx/master_error.log;

        location / {
                proxy_pass http://tomcat;
        }
}

在backup里面搭建nginx

先下载nginx和keepalived,这里默认nginx和keepalived下载完成

先关闭seliunx和防火墙

[root@backup~]# systemctl stop firewalld.service 
[root@backup~]# setenforce 0

1.配置nginx
[root@backup ~]# vim /etc/nginx/conf.d/master.conf 

upstream tomcat {
        server 192.168.111.41:8080;
        server 192.168.111.42:8080;
        server 192.168.111.43:8080;
}
server {
        listen 80;
        server_name 192.168.111.31;
        access_log /var/log/nginx/backup_access.log;
        error_log  /var/log/nginx/backup_error.log;

        location / {
                proxy_pass http://tomcat;
        }
}

在backup里面搭建nginx

先下载nginx和keepalived,这里默认nginx和keepalived下载完成

先关闭seliunx和防火墙

[root@master ~]# systemctl stop firewalld.service 
[root@master ~]# setenforce 0

1.配置nginx
[root@master ~]# vim /etc/nginx/conf.d/master.conf 

upstream tomcat {
        server 192.168.111.41:8080;
        server 192.168.111.42:8080;
        server 192.168.111.43:8080;
}
server {
        listen 80;
        server_name 192.168.111.30;
        access_log /var/log/nginx/master_access.log;
        error_log  /var/log/nginx/master_error.log;

        location / {
                proxy_pass http://tomcat;
        }
}

修改tomcat的index页面

为保证可以区分是哪一个tomcat提供的服务,我们修改一下tomcat的页面

tomcat1

1.修改index页面

[root@tomcat1 ~]# cd /usr/local/apache-tomcat-11.0.5/webapps/
[root@tomcat1 webapps]# ls
docs  examples  host-manager  manager  ROOT
[root@tomcat1 webapps]# rm -rf docs  examples  host-manager  manager
[root@tomcat1 webapps]# cd ROOT/
[root@tomcat1 ROOT]# rm -rf *
[root@tomcat ROOT]# vim index.jsp 

[root@tomcat1 ~]# cat /usr/local/apache-tomcat-11.0.5/webapps/ROOT/index.jsp 
tomcat1 192.168.111.41

2.重启tomcat
[root@tomcat ROOT]# startup.sh
Using CATALINA_BASE:   /usr/local/apache-tomcat-11.0.5
Using CATALINA_HOME:   /usr/local/apache-tomcat-11.0.5
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-11.0.5/temp
Using JRE_HOME:        /usr/local/jdk-21.0.6/
Using CLASSPATH:       /usr/local/apache-tomcat-11.0.5/bin/bootstrap.jar:/usr/local/apache-tomcat-11.0.cat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

tomcat2

1.修改index页面

[root@tomcat2 ~]# cd /usr/local/apache-tomcat-11.0.5/webapps/
[root@tomcat2 webapps]# ls
docs  examples  host-manager  manager  ROOT
[root@tomcat2 webapps]# rm -rf docs  examples  host-manager  manager
[root@tomcat2 webapps]# cd ROOT/
[root@tomcat2 ROOT]# rm -rf *
[root@tomcat ROOT]# vim index.jsp 

[root@tomcat2 ~]# cat /usr/local/apache-tomcat-11.0.5/webapps/ROOT/index.jsp 
tomcat2 192.168.111.42

2.重启tomcat
[root@tomcat ROOT]# startup.sh
Using CATALINA_BASE:   /usr/local/apache-tomcat-11.0.5
Using CATALINA_HOME:   /usr/local/apache-tomcat-11.0.5
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-11.0.5/temp
Using JRE_HOME:        /usr/local/jdk-21.0.6/
Using CLASSPATH:       /usr/local/apache-tomcat-11.0.5/bin/bootstrap.jar:/usr/local/apache-tomcat-11.0.cat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

tomcat3

1.修改index页面

[root@tomcat3 ~]# cd /usr/local/apache-tomcat-11.0.5/webapps/
[root@tomcat3 webapps]# ls
docs  examples  host-manager  manager  ROOT
[root@tomcat3 webapps]# rm -rf docs  examples  host-manager  manager
[root@tomcat3 webapps]# cd ROOT/
[root@tomcat3 ROOT]# rm -rf *
[root@tomcat ROOT]# vim index.jsp 

[root@tomcat3 ~]# cat /usr/local/apache-tomcat-11.0.5/webapps/ROOT/index.jsp 
tomcat3 192.168.111.43

2.重启tomcat
[root@tomcat ROOT]# startup.sh
Using CATALINA_BASE:   /usr/local/apache-tomcat-11.0.5
Using CATALINA_HOME:   /usr/local/apache-tomcat-11.0.5
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-11.0.5/temp
Using JRE_HOME:        /usr/local/jdk-21.0.6/
Using CLASSPATH:       /usr/local/apache-tomcat-11.0.5/bin/bootstrap.jar:/usr/local/apache-tomcat-11.0.cat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

重启nginx

[root@master ~]# systemctl restart  nginx

[root@backup~]# systemctl restart  nginx

[root@backup~]# systemctl restart  nginx

测试nginx

测试master

[root@master ~]# curl 192.168.111.30
tomcat3 192.168.111.43
[root@master ~]# curl 192.168.111.30
tomcat1 192.168.111.41
[root@master ~]# curl 192.168.111.30
tomcat2 192.168.111.42

发现轮询,则前面配置没有问题。back也是一样测试,这里就省略了。

搭建keepalived

master的keepalived配置

[root@master ~]# cat /etc/keepalived/keepalived.conf
global_defs {
   router_id LVS_MASTER
}

vrrp_instance VI_1 {
    state MASTER
    interface ens160
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.111.100
    }
  
}

vrrp_instance VI_2 {
    state BACKUP
    interface ens160
    virtual_router_id 52
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.111.101
    }
}

vrrp_instance VI_3 {
    state BACKUP
    interface ens160
    virtual_router_id 53
    priority 60
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.111.102
    
}
}

backup的keepalived配置

[root@backup ~]# cat /etc/keepalived/keepalived.conf 
global_defs {
   router_id LVS_backup
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens160
    virtual_router_id 51
    priority 60
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.111.100
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface ens160
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.111.101
    }
}

vrrp_instance VI_3 {
    state BACKUP
    interface ens160
    virtual_router_id 53
    priority 60
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.111.102
    }
}
 

backup的keepalived配置

[root@backup ~]# cat /etc/keepalived/keepalived.conf 
global_defs {
   router_id LVS_backup
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens160
    virtual_router_id 51
    priority  80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.111.100
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface ens160
    virtual_router_id 52
    priority 60
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.111.101
    }
}

vrrp_instance VI_3 {
    state BACKUP
    interface ens160
    virtual_router_id 53
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.111.102
    }
}

这里注意同一个虚拟IP的 virtual_router_id需要一样,优先级不一样

重启keepalived,并测试keepalived

master

backup

backup

搭建高可用

编写一个脚本,来实现nginx挂掉时,重启nginx。若重启不成功,则将keepalived也关掉

1.脚本应用到三台keepalived里面去

[root@master ~]# cat /etc/keepalived/check_nginx.sh 
#!/bin/bash
count=$(ps -C nginx --no-header | wc -l)
if [ $count -eq 0 ]
then
    systemctl restart nginx
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ]
    then
        systemctl stop keepalived
    fi
fi

2.将脚本引入到keepalived的配置文件中

[root@master ~]# cat /etc/keepalived/keepalived.conf
global_defs {
   router_id LVS_MASTER
}

vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2
}

vrrp_instance VI_1 {
    state MASTER
    interface ens160
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.111.100
    }
    track_script {
    chk_nginx

}
}

vrrp_instance VI_2 {
    state BACKUP
    interface ens160
    virtual_router_id 52
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.111.101
    }
    track_script {
        chk_nginx
}

}

vrrp_instance VI_3 {
    state BACKUP
    interface ens160
    virtual_router_id 53
    priority 60
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.111.102
    }
    track_script {
        chk_nginx
}

}

当然两台backup也是一样的将加粗的地方写入,这里就不写出来了。

测试高可用

将mster的nginx停掉,但是依然可以访问,说明我们的高可用搭建成功

[root@master ~]# systemctl stop nginx
[root@master ~]# curl 192.168.111.30
tomcat1 192.168.111.41

搭建DNS轮询

实现三主热备架构。其中,dns 轮询使用 nginx 来充当。
我们采用nginx来做
1.配置nginx
[root@dns ~] # vim /etc/nginx/conf.d/dns.conf
upstream web {
server 192 .168.111.100;
server 192 .168.111.101;
server 192.168.111.102;
}
server {
listen 80 ;
server_name 192 .168.111.11;
access_log /var/log/nginx/dns_access.log;
error_log /var/log/nginx/dns_error.log;
location / {
proxy_pass http://web;
}
}
2.启动服务
[root@dns ~] # systemctl start nginx

测试 

[root@client ~] # for ((i=1;i<=10;i++)); do curl 192.168.111.11;done;
tomcat2 192 .168.72.42
tomcat1 192 .168.72.41
tomcat2 192 .168.72.43
tomcat1 192 .168.72.42
tomcat2 192 .168.72.41
tomcat1 192 .168.72.43
tomcat2 192 .168.72.42
tomcat1 192 .168.72.41
tomcat2 192 .168.72.43
tomcat1 192 .168.72.42