实验架构的部署

news2024/11/8 22:51:00

目录

实验要求

实验环境

1、部署静态页面

2、部署负载均衡

3、搭建动态网页

4、 nginx反向代理

5、部署NFS

7、mysql

安装mysql

安装mha

准备主从复制

 开启mha


 

架构的部署

实验要求

       完成用户访问时虚拟IP由LVS负责高可用,静态交给nginx处理,动态交给tomcat处理,再将数据放入数据库,并对数据库进行mha搭建

 

实验环境

主机名IP地址安装服务
master01192.168.247.99NFS、mysql
slave01192.168.247.100

nginx-1、tomcat-1、mysql

slave02192.168.247.110nginx-2、tomcat-2、mysql
ha01192.168.247.120lvs-master
ha02192.168.247.130lvs-slave

1、部署静态页面

slave01-nginx-1     slave02-nginx2


 

systemctl stop firewalld 
sentenforce 0
#关闭防火墙及selinux安全验证
yum install epel-release -y
#安装epel源
yum install nginx -y
#安装nginx
systemctl start nginx  
#启动nginx
echo nginx01 test >/usr/share/nginx/html/index.html
echo nginx02 test >/usr/share/nginx/html/index.html
#修改nginx主页内容,nginx01修改为nginx01 test,nginx02修改nginx02 test
curl 192.168.30.12
curl 192.168.30.13
#分别在俩台主机测试能否互相访问到定义的静态内容

 两台节点添加虚拟网卡并设置虚拟IP

添加路由经过虚拟网卡

ifconfig ens33:1 192.168.247.244 netmask 255.255.255.0
route add -host 192.168.247.244 dev ens33:1

编辑内核参数,添加以下内容

vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

sysctl -p
#查看参数是否配置完成

 

 

2、部署负载均衡

ha01-lvs       ha02-lvs



yum install ipvsadm  -y 
#yum安装ipvsadm服务,即LVS负载均衡的真实服务名
systemctl start ipvsadm.service
#开启ipvsadm服务,此步骤启动服务报错
systemctl status ipvsadm.service>1
cat 1
#将ipvsadm服务启动报错提示导给1文件并查看
ipvsadm-save>/etc/sysconfig/ipvsadm
#报错信息提示是没有/etc/sysconfig/ipvsadm文件,解决方法是将ipvsadm保存到/etc/sysconfig/ipvsadm文件下。

 

 

systemctl  restart ipvsadm.service 
#重新启动ipvsadm成功
yum install keepalived.x86_64 -y
#安装keepalived.x86_64
vim /etc/sysctl.conf
#编辑内核文件
添加内容:
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
#保存退出
sysctl  -p
#查看添加内核内容有则成功
vim keepalived.conf
#编辑配置文件
修改内容:
global_defs模块中
smtp_server 127.0.0.1
#改为127.0.0.1即改为本机
router_id LVS_01
#第一条LVS名称改为LVS_01
   #vrrp_skip_check_adv_addr
   #vrrp_strict
   #vrrp_garp_interval 0
   #vrrp_gna_interval 0
#以上4行安全机制添加#号注释掉
vrrp_instance VI_1 {
    state MASTER
    interface ens33
#修改网卡名

virtual_ipaddress {
        192.168.247.244
    }
#虚拟主机地址改为要配置的虚拟ip,可配置多个,若只写一个将模板的其他2个删除。
virtual_server 192.168.247.244 80 {
#虚拟ip地址改为配置的虚拟ip和web服务端口号
    delay_loop 6
    lb_algo rr
    lb_kind DR
#模式改为DR模式即直连模式
    persistence_timeout 50
    protocol TCP
 
    real_server 192.168.247.100 80 {
#第一台真实ip地址和web服务端口号
        weight 1
        TCP_CHECK {
#添加TCP_check 注意分号前有空格,检测真实服务器健康状态,即检测后端服务器80端口,若不正常则访问其他台服务器
            connect_port 80
#添加连接端口80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.247.110 80 {
#第二台真实ip地址和web服务端口号
        weight 1
        TCP_CHECK {
#添加TCP_check 注意分号前有空格,检测真实服务器健康状态,即检测后端服务器80端口,若不正常则访问其他台服务器
            connect_port 80
#添加连接端口80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
#俩台真实服务器后的所有内容删除即可,修改完成后保存退出。完整配置文件如下图
scp keepalived.conf 192.168.247.130:/etc/keepalived/ 
LVS_02配置文件修改:
#将配置好的配置文件传到LVS_02服务器上
#第一步修改 router_id LVS_02 名称改为LVS_02
#第二步要修改vrrp_instance VI_1模块中的state为BACKUP,interface 改网卡为ens33和priority 90改为比主LVS优先级低的等级
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    priority 90
#其他不用修改保存即可
systemctl restart ipvsadm  keepalived
#重启服务
ipvsadm  -ln
显示内容:
TCP  192.168.247.244:80 rr persistent 50
  -> 192.168.247.100:80             Route   1      0          0         
  -> 192.168.247.110:80             Route   1      0          1
#查看有2个真实服务器的ip即可,注意二台真实服务器的80端口必须开着才能都检测到

 

 

3、搭建动态网页

slave01-tomcat01         slave02-tomcat02



yum install tomcat -y 
systemcat start tomcat
#安装并启动tomcat服务
cd /var/lib/tomcat/webapps
mkdir test
cd test
vim index.jsp
添加动态页面内容:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>test</title>
</head>
<body>
<% out.println("动态页面:test tomcat01");%>
#页面输出内容为test tomcat01,tomcat02服务器上则将01改为02方便查看实验效果
</body>
</html>
#创建动态资源页面
vim /etc/tomcat/server.xml
#修改主配置文件内容125行,原有内容不需要更改,对比此段内容添加即可
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlNamespaceAware="false">
<Context docBase="/var/lib/tomcat/webapps/test"
#指定自己的tomcat页面访问文件路径
                path="" reloadable="true" />
systemctl restart tomcat
#重启服务在本机分别输入192.168.247.100:8080和192.168.247.110:8080测试能否访问到内容

 

 

 

 

4、 nginx反向代理

slave01-nginx01       slave02-nginx02


vim /etc/nginx/conf.d/upstream.conf
#直接在nginx子配置文件夹中创建一个新的子配置文件,因为是yum安装无须在主配置文件中指定子配置文件
文件内容:
upstream nginxtest{
server 192.168.247.100:8080;
server 192.168.247.110:8080;
}
#反向代理模块,将2个tomcat的ip和端口号写入其中,反代模块名称为nginxtest
server {
location / {
		root html; 
		index index.html index.htm;
}
#server模块中的第一个location模块,指定了根为html,支持主页文件类型三个,注意分号结尾
	location  ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
	root /usr/share/nginx/html;	
}
#server模块中第二个location模块,配置不区分大小写的任意开头只要以.()括号内的任意一个内容结尾则为静态资源访问/usr/share/nginx/html下的页面
	location ~ .*\.jsp$ {
	proxy_pass http://nginxtest;
	proxy_set_header HOST $host;    
	proxy_set_header X-Real-IP $remote_addr;            
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#server模块中第三个location模块,配置不区分大小写的任意开头只要.jsp结尾就由nginx反向代理模块nginxtest进行处理
}

 

动态页面验证

5、部署NFS

master01


yum install nfs-utils.x86_64 rpcbind -y
#安装软件包
mkdir /share
#创建共享目录
chmod -R 777 /share/
#修改权限
vim /etc/exports
#编辑配置文件
/share *
/share 192.168.91.0/24(rw,sync,no_root_squash)
#共享目录  网段           读写,同步,无root权限
systemctl start rpcbind 
systemctl start nfs
exportfs -v
showmount -e 
#查看本机发布的 NFS 共享目录

 slave节点

将共享目录挂载到本地

vim /etc/fatab

 

 

7、mysql

安装mysql

tee /etc/yum.repos.d/mysql.repo <<EOF
[mysql]
name=mysql5.7
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
gpgcheck=0
EOF


#清华大学源  5.7.41

查看

cat >/etc/yum.repos.d/mysql.repo <<EOF

安装

yum -y install mysql-community-server
systemctl start mysqld
ss -ntap |grep 3306

登录mysql

mysql -u root -p
grep password /var/log/mysqld.log
#过滤出mysql的密码
mysql -u root -p'密码'
#特殊符号用单引号
mysql> alter user root@'localhost' identified by 'Admin@123';
#进去后修改密码
vim /etc/my.cnf
[mysqld]
character-set-server=utf8mb4
#修改字符集

 

安装mha

安装

有依赖性用yum安装  需要先安装  epel源

yum install epel-release.noarch -y

 将安装包传到 /opt 下,下载并安装


 主节点需要安装

yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm

yum install -y mha4mysql-manager-0.58-0.el7.centos.noarch.rpm  

#先安装node再装manager


从节点安装

yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y


 在主节点上,基于key验证

ssh-keygen
cd
ssh-copy-id 127.0.0.1
#自己和自己实现免密钥登录

 

rsync -a .ssh   192.168.247.100:/root/
rsync -a .ssh   192.168.247.110:/root/
#注意.ssh 后不能加/

建立mha  文件夹  和配置文件

mkdir /etc/mastermha
vim /etc/mastermha/app1.cnf
[server default]
user=mhauser
password=Admin@123
manager_workdir=/data/mastermha/app1/
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
ssh_user=root
repl_user=test
repl_password=Admin@123
ping_interval=1
master_ip_failover_script=/usr/local/bin/master_ip_failover
#report_script=/usr/local/bin/sendmail.sh     可以不加
check_repl_delay=0
master_binlog_dir=/data/mysql/


[server1]
hostname=192.168.247.99
candidate_master=1

[server2]
hostname=192.168.247.100
candidate_master=1

[server3]
hostname=192.168.247.110

vim   master_ip_failover

#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
use Getopt::Long;
my (
$command, $ssh_user, $orig_master_host, $orig_master_ip,
$orig_master_port, $new_master_host, $new_master_ip, $new_master_port
);
my $vip = '192.168.247.188/24';    #设置Virtual IP   此处注释需要删除   *****
my $gateway = '192.168.247.2';     #网关Gateway IP   此处注释需要删除   *****
my $interface = 'ens33';
my $key = "1";
my $ssh_start_vip = "/sbin/ifconfig $interface:$key $vip;/sbin/arping -I $interface -c 3 -s $vip $gateway >/dev/null 2>&1";
my $ssh_stop_vip = "/sbin/ifconfig $interface:$key down";
GetOptions(
'command=s' => \$command,
'ssh_user=s' => \$ssh_user,
'orig_master_host=s' => \$orig_master_host,
'orig_master_ip=s' => \$orig_master_ip,
'orig_master_port=i' => \$orig_master_port,
'new_master_host=s' => \$new_master_host,
'new_master_ip=s' => \$new_master_ip,
'new_master_port=i' => \$new_master_port,
);
exit &main();
sub main {
print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";
if ( $command eq "stop" || $command eq "stopssh" ) {
# $orig_master_host, $orig_master_ip, $orig_master_port are passed.
# If you manage master ip address at global catalog database,
# invalidate orig_master_ip here.
my $exit_code = 1;
eval {
print "Disabling the VIP on old master: $orig_master_host \n";
&stop_vip();
$exit_code = 0;
};
if ($@) {
warn "Got Error: $@\n";
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "start" ) {
# all arguments are passed.
# If you manage master ip address at global catalog database,
# activate new_master_ip here.
# You can also grant write access (create user, set read_only=0, etc) here.
my $exit_code = 10;
eval {
print "Enabling the VIP - $vip on the new master - $new_master_host \n";
&start_vip();
$exit_code = 0;
};
if ($@) {
warn $@;
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "status" ) {
print "Checking the Status of the script.. OK \n";
`ssh $ssh_user\@$orig_master_host \" $ssh_start_vip \"`;
exit 0;
}
else {
&usage();
exit 1;
}
}
# A simple system call that enable the VIP on the new master
sub start_vip() {
`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
# A simple system call that disable the VIP on the old_master
sub stop_vip() {
`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}
sub usage {
print
"Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}


mv master_ip_failover  /usr/local/bin/
#脚本文件文件剪切到/usr/local/bin/目录下
chmod +x /usr/local/bin/master_ip_failover 
#添加可执行权限使其可以执行
ifconfig ens33:1 192.168.247.188/24
#MHA配置虚拟ip,主挂掉后虚拟ip到备主上

准备主从复制

master


Master执行:
vim  /etc/my.cnf
[mysqld]          #此行下添加内容,开启主从复制和二进制日志
server_id=99
log-bin=/data/mysql/mysql-bin
skip_name_resolve=1
general_log 
#添加完毕保存退出
mkdir /data/mysql/   -p
#创建二进制日志保存路径文件
chown mysql.mysql /data/ -R
#修改文件夹权限
systemctl restart mysqld
#重启mysql服务
mysql -uroot -pAdmin@123
#登录数据库
show master status;
#查看记录二进制日志位置,一会从配置使用
grant replication slave on *.* to test@'192.168.247.%' identified by 'Admin@123';
#建立复制用户
grant all on *.* to mhauser@'192.168.247.%' identified by 'Admin@123';
#建立mha管理账户
 

 

两个slave


vim  /etc/my.cnf
#[mysqld]此行下添加内容,开启主从复制和二进制日志
server_id=100       #两台ID不一样
log-bin=/data/mysql/mysql-bin
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
skip_name_resolve=1
general_log 
mkdir /data/mysql/  -p
#创建二进制日志保存路径文件
chown mysql.mysql /data/ -R
#修改文件夹权限
systemctl restart mysqld
#重启mysql服务
mysql -uroot -pAdmin@123
#登录数据库
CHANGE MASTER TO
  MASTER_HOST='192.168.247.99',
  MASTER_USER='test',
  MASTER_PASSWORD='Admin@123',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=154;
#配置master信息
start slave
#开启主从复制
show slave status\G
#查看配置是否成功

MHA服务器上检查 mha 环境并启动mha

masterha_check_ssh --conf=/etc/mastermha/app1.cnf
#检查mha的ssh免密登录环境

 

masterha_check_repl --conf=/etc/mastermha/app1.cnf
#检查mha主从环境
MySQL Replication Health is OK.
#结尾行出现此信息表示无问题

 开启mha

masterha_check_status --conf=/etc/mastermha/app1.cnf
#查看mha状态,默认是停止状态stop
#开启MHA,默认是前台运行,生产环境一般为后台执行
nohup masterha_manager --conf=/etc/mastermha/app1.cnf &> /dev/null 
#非后台需要等待较长时间启动成功,此过程为前台运行,需要重新开一个窗口去查看状态即可
masterha_manager --conf=/etc/mastermha/app1.cnf 

#查看状态
masterha_check_status --conf=/etc/mastermha/app1.cnf 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/420818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【工具篇】Spring Boot 整合阿里云短信-SMS

短信服务-SMS 短信服务&#xff08;Short Message Service&#xff09;是广大企业客户快速触达手机用户所优选使用的通信能力&#xff0c;分为国内短信服务和国际/港澳台短信服务。通过 API/SDK、控制台调用短信发送能力&#xff0c;将指定信息发送至国内或境外手机号码。 应…

<数据结构>NO1.算法的时空复杂度

文章目录&#x1f6a9;算法效率算法复杂度&#x1fa85;时间复杂度大O的渐进表示法常见的时间复杂度举例&#x1fa85;空间复杂度大O的渐进表示法常见的空间复杂度举例&#x1f5ef;️常见复杂度对比&#x1f5ef;️&#x1f6a9;算法效率 算法是一个被设计好的&#xff0c;计…

python 读写txt方法

​​​​​​​ 1. Python支持在程序中读写 txt文件。这里有两种方式&#xff1a; 方式一&#xff1a;使用 python内置函数&#xff0c;该函数将一个字符串的长度转换为与这个字符串长度相关的值。 例如&#xff1a;" readme"&#xff08;"r&#xff09;。 prin…

数据结构---递归转化为非递归

递归转化为非递归前言快速排序非递归归并排序的非递归前言 为什么要学习非递归写法呢&#xff1f; 当我们在用递归实现一个程序的时候&#xff0c;要考虑一个问题&#xff0c;这个程序用递归去实现&#xff0c;当数据量庞大的时候&#xff0c;会不会造成栈溢出(STACK OVERFLOW…

学习风`宇blog的websocket模块

文章目录后端代码引入依赖WebSocketConfigWebSocketServiceImpl分析tb_chat_record表WebSocketServiceImplChatConfigurator聊天消息ChatTypeEnumsWebsocketMessageDTO后端 代码 引入依赖 仅需引入以下依赖 <!-- websocket依赖 --> <dependency><groupId>…

ACM8629 立体声50W/100W单声道I2S数字输入D类音频功放IC

概述 ACM8629 一款高度集成、高效率的双通道数字输入功放。供电电压范围在4.5V-26.4V,数字接口电源支持3.3V 。在4 欧负载&#xff0c;BTL模式下输出功率可以到250W1%THDN&#xff0c;在2欧负载&#xff0c;PBTL模式下单通道可以输出1100W 1%THDN. ACM8629采用新型PWM脉宽调制架…

全国青少年软件编程(Scratch)等级考试二级考试真题2023年3月——持续更新.....

一、单选题(共25题,共50分) 1. 小猫的程序如图所示,积木块的颜色与球的颜色一致。点击绿旗执行程序后,下列说法正确的是?( ) A.小猫一直在左右移动,嘴里一直说着“抓到了”。 B.小猫会碰到球,然后停止。 C.小猫一直在左右移动,嘴里一直说着“别跑” D.小猫会碰到球,…

2023MatherCup杯三人小队手搓!(C 题 电商物流网络包裹应急调运与结构优化问题)

一个不知名大学生&#xff0c;江湖人称菜狗original author: Jacky LiEmail : 3435673055qq.com Time of completion&#xff1a;2023.4.16 Last edited: 2023.4.16 实际完成时间&#xff1a;2023/4/17 0:52 Mathematical modeling Author: HandSome Wang、BigTall Hu、Jacky L…

一个Email简单高效处理.Net开源库

推荐一个可处理电子邮件消息开源库&#xff0c;可用于消息解析、消息创建、消息修改和消息发送等功能。 项目简介 这是一个基于C#开发的&#xff0c;针对MIME&#xff08;多用途邮件扩展&#xff09;消息创建与解析&#xff0c;该项目简单易用、可用于消息解析、消息创建、消…

【Pytorch】神经网络搭建

在之前我们学习了如何用Pytorch去导入我们的数据和数据集&#xff0c;并且对数据进行预处理。接下来我们就需要学习如何利用Pytorch去构建我们的神经网络了。 目录 基本网络框架Module搭建 卷积层 从conv2d方法了解原理 从Conv2d方法了解使用 池化层 填充层 非线性层 …

Node实现 Socket 通信

socket 通信流程 Socket通信&#xff0c;首先要知道 Socket 是什么&#xff0c;就是网络上的两个程序通过一个双向的通信连接实现数据的交换&#xff0c;这个连接的一端被称为 socket &#xff0c;举一个简单的例子就是两个人在线上进行聊天&#xff0c;即线上通信&#xff0c…

充电桩检测设备TK4860E交流充电桩检定装置

产品特点 充电桩检测设备内置5.28 kW单相交流负载&#xff0c;无需携带额外负载进行测试。 宽动态范围测量技术&#xff0c;避免充电桩输出波动引起的测量风险。 ms级电能刷新速度&#xff0c;减少充电桩与标准仪器在非同步累积电能过程中引入的误差&#xff0c;提高累积电能…

【C++11那些事儿(二)】

文章目录一、新的类功能1.1 默认成员函数1.2 强制生成默认函数的关键字default1.3 禁止生成默认函数的关键字delete二、lambda表达式2.1 语法2.2 捕捉列表说明2.3 函数对象与lambda表达式一、新的类功能 1.1 默认成员函数 原来C类中&#xff0c;有6个默认成员函数&#xff1a…

性能测试总结-根据工作经验总结还比较全面

性能测试总结性能测试理论性能测试的策略基准测试负载测试稳定性测试压力测试并发测试性能测试的指标响应时间并发数吞吐量资源指标性能测试流程性能测试工具JMeter基本使用元件构成线程组jmeter的分布式使用jmeter测试报告常用插件性能测试的计算1.根据请求数明细数据计算满足…

【MySQL】多表查询

文章目录&#x1f389;多表查询&#x1f388;3.1 内连接查询&#x1f388;3.2 外连接查询&#x1f388;3.3 子查询最后说一句&#x1f389;多表查询 &#x1f388;3.1 内连接查询 语法 -- 隐式内连接 SELECT 字段列表 FROM 表1,表2… WHERE 条件;-- 显示内连接 SELECT 字段列…

LeetCode 特训 ---- Week1

目录 LeetCode 特训 --- Week1 两数之和 最长回文子串 删除有序数组中的重复项 删除有序数组中的重复项Ⅱ 删除链表中的重复元素 移动0 旋转链表 分隔链表 快慢指针&#xff08;前后指针&#xff09;用的好&#xff0c;链表&#xff0c;数组起码轻松打十个。 LeetCode…

videoPictureInPicture,视频画中画播放初探

从Chrome 70版本开始video元素开始支持画中画播放&#xff0c;简单写个demo体验一下 简介 在触发画中画之后视频会始终在右下角悬浮&#xff0c;不论是否在当前标签页或者是浏览器是否最小化。 可以在chrome内看任意视频时点击控制条的画中画按钮即可。 API 文档&#xff1…

人工智能机器人技术概述

移动机器人是一种能够在其环境中移动的自主或半自主机器人系统&#xff0c;通常是通过轮子或履带进行移动。这些机器人旨在在各种环境中执行各种任务&#xff0c;包括探索、监视、检查、运输和操作&#xff0c;包括室内和室外空间、危险区域甚至其他星球。 移动机器人配备传感…

日常记录:天梯赛练习集L1-048 矩阵A乘以B

题目&#xff1a; 给定两个矩阵A和B&#xff0c;要求你计算它们的乘积矩阵AB。需要注意的是&#xff0c;只有规模匹配的矩阵才可以相乘。即若A有Ra​行、Ca​列&#xff0c;B有Rb​行、Cb​列&#xff0c;则只有Ca​与Rb​相等时&#xff0c;两个矩阵才能相乘。 输入格式&…

【JAVA-模块四 流程控制语句】

JAVA-模块四 流程控制语句一 选择分支语句&#xff1a;if语句if第一种格式&#xff1a;if第二种格式 双分支&#xff1a;if的第三种格式&#xff1a;多条件分支switch多分支&#xff1a;注意&#xff1a;if语句和swich语句如何选择&#xff1a;二 循环语句&#xff1a;2.1 for循…