手机网站 教程,云建站app,怎样做站长建网站,买号链接部署tomcat单机多实例
在Tomcat中部署单机多实例是一种常见的做法#xff0c;它允许您在同一台服务器上运行多个独立的Tomcat实例#xff0c;每个实例都有自己的配置、日志和应用程序。
安装jdk环境
首先配置java环境
[roottomcat ~]# tar xf jdk-8u211-linux-x64.tar.gz…部署tomcat单机多实例
在Tomcat中部署单机多实例是一种常见的做法它允许您在同一台服务器上运行多个独立的Tomcat实例每个实例都有自己的配置、日志和应用程序。
安装jdk环境
首先配置java环境
[roottomcat ~]# tar xf jdk-8u211-linux-x64.tar.gz -C /usr/local改名设置环境变量
[roottomcat ~]# cd /usr/local
[roottomcat local]# mv jdk1.8.0_211/ java
[roottomcat local]# vim /etc/profile.d/java.shJAVA_HOME/usr/local/java
PATH$PATH:$JAVA_HOME/bin重载环境变量
[roottomcat local]# source /etc/profile.d/java.sh
查看jdk是否安装成功
[roottomcat local]# java -version
java version 1.8.0_211
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
安装tomcat
解压
[roottomcat ~]# tar xf apache-tomcat-8.5.92.tar.gz -C /usr/local进入
[roottomcat ~]# cd /usr/local
改名
[roottomcat local]# mv apache-tomcat-8.5.92 tomcat复制
[roottomcat local]# cp -r tomcat tomcat-2
[roottomcat local]# cp -r tomcat tomcat-3
配置文件
tomcat
修改配置文件
tomcat
[roottomcat local]# vim ./tomcat/conf/server.xml tomcat-2
[roottomcat local]# vim ./tomcat-2/conf/server.xml tomcat-3
[roottomcat local]# vim ./tomcat-3/conf/server.xml 启动tomcat
[roottomcat local]# ./tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.[roottomcat local]# ./tomcat-2/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat-2
Using CATALINA_HOME: /usr/local/tomcat-2
Using CATALINA_TMPDIR: /usr/local/tomcat-2/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomcat-2/bin/bootstrap.jar:/usr/local/tomcat-2/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.[roottomcat local]# ./tomcat-3/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat-3
Using CATALINA_HOME: /usr/local/tomcat-3
Using CATALINA_TMPDIR: /usr/local/tomcat-3/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomcat-3/bin/bootstrap.jar:/usr/local/tomcat-3/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.查看端口
[roottomcat local]# ss -nplt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:* users:((sshd,pid920,fd3))
LISTEN 0 100 127.0.0.1:25 *:* users:((master,pid1148,fd13))
LISTEN 0 1 [::ffff:127.0.0.1]:8005 [::]:* users:((java,pid1902,fd61))
LISTEN 0 1 [::ffff:127.0.0.1]:8006 [::]:* users:((java,pid2043,fd61))
LISTEN 0 1 [::ffff:127.0.0.1]:8007 [::]:* users:((java,pid2095,fd61))
LISTEN 0 80 [::]:3306 [::]:* users:((mysqld,pid1004,fd29))
LISTEN 0 100 [::]:8080 [::]:* users:((java,pid1902,fd52))
LISTEN 0 100 [::]:8081 [::]:* users:((java,pid2043,fd52))
LISTEN 0 100 [::]:8082 [::]:* users:((java,pid2095,fd52))
LISTEN 0 128
访问实例 keepalivedmysql互为主从的高可用 IP110.36.192.223 安装msyql IP210.36.192.222 安装mysql 首先做IP1为主IP2为从
IP1的操作
IP1的操作
[rootIP1 ~]# mkdir /var/log/mysql
[rootIP1 ~]# chown -R mysql.mysql /var/log/mysqlvim /etc/my.cnf
###
log-bin/var/log/mysql/mysql-bin #启用二进制文件日志记录
server-id1
###
重启mysql
# systemctl restart mysqld登录数据库
创建主从登录的用户
mysql grant replication slave on *.* to zc% identified by Qianfeng123;刷新
mysql flush privileges;
Query OK, 0 rows affected (0.00 sec)查看二进制日志
mysql show master status;
-------------------------------------------------------------------------------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
-------------------------------------------------------------------------------
| mysql-bin.000001 | 587 | | | |
-------------------------------------------------------------------------------
1 row in set (0.00 sec)
IP2的操作
[rootIP2 ~]# mkdir /var/log/mysql
[rootIP2 ~]# chown -R mysql.mysql /var/log/mysqlvim /etc/my.cnf
###
server-id2重启msyql
# systemctl restart mysqld
登录数据库
mysql CHANGE MASTER TO- MASTER_HOST10.36.192.223,- MASTER_USERzc,- MASTER_PASSWORDQianfeng123,- MASTER_PORT3306,- MASTER_LOG_FILEmysql-bin.000001,- MASTER_LOG_POS587,- MASTER_CONNECT_RETRY10;
Query OK, 0 rows affected, 2 warnings (0.01 sec)mysql flush privileges;
Query OK, 0 rows affected (0.00 sec)启动主从查看主从状态
mysql start slave;
Query OK, 0 rows affected (0.00 sec)mysql show slave status\G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 10.36.192.223Master_User: zcMaster_Port: 3306Connect_Retry: 10Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 587Relay_Log_File: slave-relay-bin.000002Relay_Log_Pos: 320Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes做IP2为主IP1为从
IP2的操作
vim /etc/my.cnf
###
添加第二行
[mysqld]
log-bin/var/log/mysql/mysql-bin #启用二进制文件日志记录重启mysql
# systemctl restart mysqld登录数据库创建主从登录的用户
mysql grant replication slave on *.* to zxd% identified by Qianfeng123;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql flush privileges;
Query OK, 0 rows affected (0.00 sec)查看二进制日志坐标
mysql show master status;
-------------------------------------------------------------------------------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
-------------------------------------------------------------------------------
| mysql-bin.000001 | 154 | | | |
-------------------------------------------------------------------------------
1 row in set (0.00 sec)
IP1的操作
mysql CHANGE MASTER TO- MASTER_HOST10.36.192.222,- MASTER_USERzxd,- MASTER_PASSWORDQianfeng123,- MASTER_PORT3306,- MASTER_LOG_FILEmysql-bin.000001,- MASTER_LOG_POS154,- MASTER_CONNECT_RETRY10;
Query OK, 0 rows affected, 2 warnings (0.01 sec)刷新
mysql flush privileges;
Query OK, 0 rows affected (0.00 sec)启动主从
mysql start slave;
Query OK, 0 rows affected (0.00 sec)查看主从状态
mysql show slave status\G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 10.36.192.222Master_User: zxdMaster_Port: 3306Connect_Retry: 10Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 154Relay_Log_File: master-relay-bin.000002Relay_Log_Pos: 320Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes互为主从成功配置
在IP1的数据库创库IP2也可以看到
IP1
mysql create database zhangxiaodong;
Query OK, 1 row affected (0.00 sec)mysql show databases;
--------------------
| Database |
--------------------
| information_schema |
| mysql |
| performance_schema |
| sys |
| zhangxiaodong |
--------------------
5 rows in set (0.00 sec)IP2
mysql show databases;
--------------------
| Database |
--------------------
| information_schema |
| mysql |
| performance_schema |
| sys |
| zhangxiaodong |
--------------------
5 rows in set (0.00 sec)安装keepalived
IP1 IP2都操作
# yum -y install keepalived编写当某一台的MySQL停掉以后就自动停掉那台机器的keepalived服务的脚本
cd /etc/keepalived
[rootIP1 keepalived]# cat keepalived_check_mysql.sh
#!/bin/bash
/usr/bin/mysql -uroot -pQianfeng123 -e show status /dev/null
if [ $? -ne 0 ] ;then
# service keepalived stopsystemctl stop keepalived
ficd /etc/keepalived
[rootIP2 keepalived]# cat keepalived_check_mysql.sh
#!/bin/bash
/usr/bin/mysql -uroot -pQianfeng123 -e show status /dev/null
if [ $? -ne 0 ] ;then
# service keepalived stopsystemctl stop keepalived
fi给脚本执行权限
chmod ax keepalived_check_mysql.sh
在keepalived的配置文件中引用脚本
IP1
[rootIP1 keepalived]# cat keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id directory1
}
vrrp_script check_run {script /etc/keepalived/keepalived_check_mysql.shinterval 5
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 66priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.36.192.233/24}track_script {check_run}
}
IP2
[rootIP2 keepalived]# cat keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id directory2
}
vrrp_script check_run {script /etc/keepalived/keepalived_check_mysql.shinterval 5
}vrrp_instance VI_1 {state BACKUPnopreemptinterface ens33virtual_router_id 66priority 50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.36.192.233/24}track_script {#check_runcheck_run}
}启动keepqlived
#systemctl start keepalived[rootIP1 keepalived]# ip a
1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:99:b8:b4 brd ff:ff:ff:ff:ff:ffinet 10.36.192.223/24 brd 10.36.192.255 scope global noprefixroute dynamic ens33valid_lft 255232sec preferred_lft 255232secinet 10.36.192.233/24 scope global secondary ens33valid_lft forever preferred_lft forever此时的虚拟IP为10.36.192.233在IP1上但由于互为主从因此查到数据相同 在那俩台数据库都创建可以允许远程登录数据库的用户
IP1
mysql grant all on *.* to malong% identified by Qianfeng123!;
Query OK, 0 rows affected, 1 warning (0.00 sec)IP2
mysql grant all on *.* to malong% identified by Qianfeng123!;
Query OK, 0 rows affected, 1 warning (0.00 sec)准备另一台机器做测试实验
[rootmysql ~]# mysql -umalong -pQianfeng123! -h10.36.192.233
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.7.42-log MySQL Community Server (GPL)Copyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type help; or \h for help. Type \c to clear the current input statement.mysql show databases;
--------------------
| Database |
--------------------
| information_schema |
| mysql |
| performance_schema |
| sys |
| zhangxiaodong |
--------------------
5 rows in set (0.00 sec)经过测试发现当IP1的数据库停掉以后keepalived也会停掉此时虚拟IP会飘向IP2的机器上但是由于俩台数据库是互为主从因此测试机器登上去查看到的数据是相同的.这样可以保证数据库的高可用. MySQLkeepalived高可用
实验机器IPmaster干净机器10.36.192.223 slave 干净机器10.36.192.222测试已有MySQL10.36.192.199
俩台服务器都安装mysqlkeepalived并修改mysql初始密码
[rootmaster ~]# yum install -y mysql-server keepalived[rootmaster ~]# systemctl restart mysqld[rootmaster ~]# grep password /var/log/mysqld.log2023-11-02T07:46:28.937422Z 1 [Note] A temporary password is generated for rootlocalhost: fB#sVi1UyRW;[rootmaster ~]# mysqladmin -uroot -pfB#sVi1UyRW; password Qianfeng123
[rootslave ~]# yum install -y mysql-server keepalived[rootslave ~]# systemctl restart mysqld[rootslave ~]# grep password /var/log/mysqld.log2023-11-02T07:46:28.937422Z 1 [Note] A temporary password is generated for rootlocalhost: ?HuogtQ9tn;[rootslave ~]# mysqladmin -uroot -p?HuogtQ9tn password Qianfeng123
登录俩台数据库创建允许远程登录的用户
[rootmaster ~]# mysql -uroot -pQianfeng123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
...mysql grant all on *.* to malong% identified by Qianfeng123!;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql \q
Bye[rootslave ~]# mysql -uroot -pQianfeng123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
...mysql grant all on *.* to malong% identified by Qianfeng123!;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql \q
Bye
在master的数据库创建一个库
create database dbtest
master配置keepalived [rootmaster ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id directory1
}
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 66priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.36.192.233/24 ###虚拟的IP}
}
slave配置keepalived
[rootslave ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {router_id directory2
}
vrrp_instance VI_1 {state BACKUPnopreemptinterface ens33virtual_router_id 66priority 50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.36.192.233/24}
}
配置数据库检查脚本
[rootmaster keepalived]# cat keepalived_check_mysql.sh
#!/bin/bash
/usr/bin/mysql -uroot -pQianfeng123 -e show status /dev/null
if [ $? -ne 0 ] ;then
# service keepalived stopsystemctl stop keepalived
fi[rootslave keepalived]# cat keepalived_check_mysql.sh
#!/bin/bash
/usr/bin/mysql -uroot -pQianfeng123 -e show status /dev/null
if [ $? -ne 0 ] ;then
# service keepalived stopsystemctl stop keepalived
fi记得给脚本执行权限
chmod ax keepalived_check_mysql.sh
在配置文件中引用脚本
[rootmaster keepalived]# cat keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id directory1
}
vrrp_script check_run {script /etc/keepalived/keepalived_check_mysql.shinterval 5
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 66priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.36.192.233/24}track_script {check_run}
}[rootslave keepalived]# cat keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id directory2
}
vrrp_script check_run {script /etc/keepalived/keepalived_check_mysql.shinterval 5
}vrrp_instance VI_1 {state BACKUPnopreemptinterface ens33virtual_router_id 66priority 50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.36.192.233/24}track_script {#check_runcheck_run}
}启动keepalived
systemctl start keepalived
在master端查看到虚拟IP
[rootmaster ~]# ip a
1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:99:b8:b4 brd ff:ff:ff:ff:ff:ffinet 10.36.192.223/24 brd 10.36.192.255 scope global noprefixroute dynamic ens33valid_lft 250228sec preferred_lft 250228secinet 10.36.192.233/24 scope global secondary ens33valid_lft forever preferred_lft forever在测试机器测试
[rootmysql ~]# mysql -umalong -pQianfeng123! -h10.36.192.233
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 635
Server version: 5.7.42 MySQL Community Server (GPL)Copyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type help; or \h for help. Type \c to clear the current input statement.mysql show databases;
--------------------
| Database |
--------------------
| information_schema |
| dbtest |
| mysql |
| performance_schema |
| sys |
--------------------
5 rows in set (0.00 sec)此时查看的是master端的数据库 停掉master端的msyql
[rootmaster ~]# systemctl stop mysqld[rootmaster ~]# systemctl status keepalived
● keepalived.service - LVS and VRRP High Availability MonitorLoaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)Active: inactive (dead)此时的虚拟ip在slave端
[rootslave ~]# ip a
1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:9f:83:60 brd ff:ff:ff:ff:ff:ffinet 10.36.192.222/24 brd 10.36.192.255 scope global noprefixroute dynamic ens33valid_lft 258272sec preferred_lft 258272secinet 10.36.192.233/24 scope global secondary ens33valid_lft forever preferred_lft forever
使用测试机子登录远程MySQL
[rootmysql ~]# mysql -umalong -pQianfeng123! -h10.36.192.233 -P 3306
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
...
Type help; or \h for help. Type \c to clear the current input statement.mysql show databases;
--------------------
| Database |
--------------------
| information_schema |
| mysql |
| performance_schema |
| sys |
--------------------
4 rows in set (0.01 sec)此时查看到的是slave机器的数据库 此时先启动master端的数据库与keepalived顺序不能乱
[rootmaster ~]# systemctl start mysqld
[rootmaster ~]# systemctl start keepalived查看此时的虚拟IP 在master端上
[rootmaster ~]# ip a
1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:99:b8:b4 brd ff:ff:ff:ff:ff:ffinet 10.36.192.223/24 brd 10.36.192.255 scope global noprefixroute dynamic ens33valid_lft 257980sec preferred_lft 257980secinet 10.36.192.233/24 scope global secondary ens33valid_lft forever preferred_lft forever测试机查看到数据库此时是master端的数据库
[rootmysql ~]# mysql -umalong -pQianfeng123! -h10.36.192.233 -P 3306
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
...
mysql show databases;
--------------------
| Database |
--------------------
| information_schema |
| dbtest |
| mysql |
| performance_schema |
| sys |
--------------------
5 rows in set (0.01 sec)也就是当masterslave端的MySQL与keepalived同时开启时虚拟IP会在master端此时测试机远程登录的MySQL也是master端的 当master端的MySQL与keepalived停掉后虚拟IP会飘向slave端此时测试机远程登录的MySQL是slave端的。