搭建高可用平台

发布于:2025-03-24 ⋅ 阅读:(31) ⋅ 点赞:(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

网站公告

今日签到

点亮在社区的每一天
去签到