当前位置: 首页 > news >正文

MySQL MMM高可用架构

  • MySQL MMM高可用架构
    • 一、MMM概述
      • 1、MMM简介
      • 2、MMM高可用架构
      • 3、MMM故障切换流程
    • 二、MMM高可用双主双从架构部署
      • 1、配置主主复制(master),主从复制(slave)
        • 1)修改 Master1的MySQL配置文件
        • 2)把配置文件复制到其它 3 台数据库服务器上并启动服务器
        • 3)配置主主复制,两台主服务器相互复制
        • 4)配置主从复制,在两台从服务器上做
        • 5)测试主主、主从 同步情况
      • 2、安装配置 MySQL-MMM
        • 1)在所有服务器上安装 MySQL-MMM
        • 2)在 Master1上对 MySQL-MMM 进行配置
        • 3)把配置文件复制到其它 4 台主机
        • 4)修改所有数据库服务器的代理配置文件 mmm_agent.conf
        • 5) 在 monitor 监控服务器上修改监控配置文件 mmm_mon.conf
        • 6)在所有数据库上为 mmm_agent(代理进程)和mmm_moniter(监控进程)授权
        • 7)在所有数据库服务器上启动 mysql-mmm-agent
        • 8)在 monitor 服务器上启动 mysql-mmm-monitor
        • 9)在 monitor 服务器上测试群集
      • 3、 故障测试及恢复
        • 1)模拟Master宕机以及恢复
        • 2)模拟从服务器宕机以及恢复
        • 3)客户端测试

MySQL MMM高可用架构

一、MMM概述

1、MMM简介

MMM(Master-Master replication manager for MvSQL,MySQL主主复制管理器)
是一套支持双主故障切换和双主日常管理的脚本程序。

MMM 使用 Perl 语言开发,主要用来监控和管理 MySQL Master-Master (双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个 Slave 的 read 负载均衡。

MMM提供了自动和手动两种方式移除一组服务器中复制延迟较高的服务器的虚拟ip,同时它还可以备份数据,实现两节点之间的数据同步等。

由于MMM无法完全保证数据的一致性,所以MMM适用于对数据的一致性要求不是很高,但是又想最大程度地保证业务可用性的场景。

MMM是一套灵活的脚本程序,基于perl实现,用来对 mysql replication 进行监控和故障迁移,并能管理 MySQL Master-Master 复制的配置。

2、MMM高可用架构

关于 MMM 高可用架构的说明如下:
●mmm_mon:监控进程,负责所有的监控工作,决定和处理所有节点角色活动。此脚本需要在监控主机上运行。
●mmm_agent:运行在每个MySQL服务器上的代理进程,完成监控的探针工作和执行简单的远端服务设置。此脚本需要在被监管机上运行。
●mmm_control:一个简单的脚本,提供管理 mmm_mon 进程的命令。
●mysql-mmm 的监管端会提供多个虚拟 IP(VIP),包括一个可写 VIP,多个可读 VIP,通过监管的管理,这些 IP 会绑定在可用 MySQL 之上,当某一台 MySQL 宕机时,监管会将 VIP 迁移至其他 MySQL。

在整个监管过程中,需要在 MySQL 中添加相关授权用户,以便让 MySQL 可以支持监控主机的维护。 授权的用户包括一个 mmm_monitor 用户和一个 mmm_agent 用户。

3、MMM故障切换流程

Monitor 检测到 Master1 连接失败

Monitor 发送 set_offline 指令到 Master1 的 Agent

Master1 Agent 如果存活,下线写 VIP,尝试把 Master1 设置为 read_only=1

Moniotr 发送 set_online 指令到 Master2

Master2 Agent 接收到指令,执行 select master_pos_wait() 等待同步完毕

Master2 Agent 上线写 VIP,把 Master2 节点设为 read_only=0

Monitor 发送更改同步对象的指令到各个 Slave 节点的 Agent

各个 Slave 节点向新 Master 同步数据

二、MMM高可用双主双从架构部署

在这里插入图片描述

节点服务器所需服务及组件IP地址
Master1(db1)mysql5.7、mysql-mmm192.168.210.101
Master2(db2)mysql5.7、mysql-mmm192.168.210.102
Slave1(db3)mysql5.7、mysql-mmm192.168.210.103
Slave2(db4)mysql5.7、mysql-mmm192.168.210.106
monitor(db5)mysql-mmm192.168.210.104
#所有服务器
#关闭防火墙
systemctl stop firewalld
setenforce 0

1、配置主主复制(master),主从复制(slave)

1)修改 Master1的MySQL配置文件
vim /etc/my.cnf
......
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1                                               
#每台 Mysql 主机的 server-id 不能相同
log-error=/usr/local/mysql/data/mysql_error.log             
#错误日志
general_log=ON                                              
#通用查询日志
general_log_file=/usr/local/mysql/data/mysql_general.log
slow_query_log=ON                                           
#慢查询日志
slow_query_log_file=mysql_slow_query.log
long_query_time=5
binlog-ignore-db=mysql,information_schema        
#不需要同步的库名
log_bin=mysql_bin                                
#开启二进制日志用于主从数据复制
log_slave_updates=true                           
#允许slave从master复制数据时可以写入到自己的二进制日志
sync_binlog=1                            
#"双1设置",MySQL 在每写一次二进制日志时都会同步到磁盘中去    
innodb_flush_log_at_trx_commit=1         
#"双1设置",每次事务提交时MySQL都会把缓存的数据写入日志文件,并且刷到磁盘中去
auto_increment_increment=2              
#自增字段一次递增多少
auto_increment_offset=1                 
#自增字段的起始值

在这里插入图片描述

2)把配置文件复制到其它 3 台数据库服务器上并启动服务器

注意:配置文件中的 server_id 要修改

scp /etc/my.cnf root@192.168.210.102:/etc/
scp /etc/my.cnf root@192.168.210.103:/etc/
scp /etc/my.cnf root@192.168.210.106:/etc/systemctl restart mysqld

在这里插入图片描述

#修改Master2 Slave1 Slave2的Mysql配置文件
#修改server_id 每个服务器不一致
3)配置主主复制,两台主服务器相互复制
#在两台主服务器上都执行授予从的权限
#从服务器上不需要执行
grant replication slave on *.* to 'replication'@'192.168.210.%' identified by '123456';#在两台主服务器上查看,记录日志文件名称和同步点
show master status;

在这里插入图片描述

#在Master1上配置同步
change master to master_host='192.168.210.102',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=461;start slave;show slave status\G

在这里插入图片描述

#在Master2上配置同步
change master to master_host='192.168.210.101',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=461;start slave;show slave status\G

在这里插入图片描述

4)配置主从复制,在两台从服务器上做
#同一时间只能有一个主服务器工作
change master to master_host='192.168.210.101  ',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=461;start slave;show slave status\G

在这里插入图片描述
在这里插入图片描述

5)测试主主、主从 同步情况
create database db_test;

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、安装配置 MySQL-MMM

1)在所有服务器上安装 MySQL-MMM
#获取软件包
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

在这里插入图片描述

#安装依赖和软件
yum -y install epel-release
yum -y install mysql-mmm*

在这里插入图片描述

2)在 Master1上对 MySQL-MMM 进行配置
cd /etc/mysql-mmm/
vim mmm_common.conf
……
<host default>cluster_interface       ens33……replication_user        replicationreplication_password    123456agent_user              mmm_agentagent_password          123456<host db1>ip      192.168.210.101mode    masterpeer    db2
</host><host db2>ip      192.168.210.102mode    masterpeer    db1
</host><host db3>ip      192.168.210.103mode    slave
</host><host db4>ip      192.168.210.106mode    slave
</host><role writer>hosts   db1, db2ips     192.168.210.188mode    exclusive           #只有一个 host 可以进行写操作模式
</role><role reader>hosts   db3, db4ips     192.168.210.198, 192.168.210.199mode    balanced            #多个 slave 主机可以进行读操作模式
</role>

在这里插入图片描述

3)把配置文件复制到其它 4 台主机

所有主机该配置文件内容都是一样的。

scp mmm_common.conf root@192.168.210.102:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.210.103:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.210.106:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.210.104:/etc/mysql-mmm/

在这里插入图片描述

4)修改所有数据库服务器的代理配置文件 mmm_agent.conf

修改 mmm_agent.conf

vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db1				#根据不同的主机分别修改为 db1,db2,db3,db4

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5) 在 monitor 监控服务器上修改监控配置文件 mmm_mon.conf
vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>
.....ping_ips        	192.168.210.101,192.168.210.102,192.168.210.103,192.168.210.106   #指定所有数据库服务器的 IPauto_set_online		10				#指定自动上线时间
</monitor><host default>monitor_user        mmm_monitor		#指定 mmm_monitor 的用户名monitor_password    123456          指定 mmm_monitor 的密码
</host>

在这里插入图片描述

6)在所有数据库上为 mmm_agent(代理进程)和mmm_moniter(监控进程)授权
grant super, replication client, process on *.* to 'mmm_agent'@'192.168.210.%' identified by '123456';grant replication client on *.* to 'mmm_monitor'@'192.168.210.%' identified by '123456';flush privileges;

在这里插入图片描述

7)在所有数据库服务器上启动 mysql-mmm-agent
systemctl enable mysql-mmm-agent.service --now

在这里插入图片描述

8)在 monitor 服务器上启动 mysql-mmm-monitor
systemctl start mysql-mmm-monitor.service 

在这里插入图片描述

9)在 monitor 服务器上测试群集
mmm_control show
#查看各节点的情况

在这里插入图片描述

#检测监控功能是否都完善
mmm_control checks all
#需要各种OK

在这里插入图片描述

#指定绑定 VIP 的主机db2
mmm_control move_role writer db2mmm_control show

在这里插入图片描述

mmm_control move_role writer db1
#修改绑定VIP的主机为db1
mmm_control show

在这里插入图片描述

3、 故障测试及恢复

1)模拟Master宕机以及恢复
1.停止Master1的mysql服务
systemctl stop mysqld
2.查看VIP漂移情况
#切换到Monitor服务器
mmm_control show#VIP成功漂移至master2,且master1显示HARD_OFFLINE

在这里插入图片描述

3.重启Master1的mysql服务
systemctl start mysqld
4.查看Master1是否恢复
#切换至monitor
mmm_control show
#显示等待恢复

在这里插入图片描述

#继续查看节点状况
#等待数秒后重新查看,发现Master1在线,但未能获得VIP
mmm_control show

在这里插入图片描述

2)模拟从服务器宕机以及恢复
1.停止Slave1的mysql服务
#Slave1
systemctl stop mysqld
2.查看VIP漂移情况
#切换至monitor
mmm_control show#Slave1 离线 
#VIP漂移至Slave2,服务不影响

在这里插入图片描述

3.重启Slave1的MySQL服务
#切换到Slave1
systemctl start mysqld
4.查看slave1是否恢复
#切换至monitor
mmm_control show#多次执行

在这里插入图片描述

3)客户端测试
1.在Master1服务器上为monitor服务器地址授权登录
#切换到Master1
mysql -u root -pabc123grant all on *.* to 'testdba'@'192.168.210.104' identified by '123456';
#master1授权给monitor
flush privileges;

在这里插入图片描述

2.在monitor服务器上使用写VIP登录
#切换到monitor
mysql -utestdba -p123456 -h 192.168.210.188
#以授权的用户名和密码使用写VIP登录

在这里插入图片描述

3.创建数据,测试同步情况
#monitor服务器
create database client_test;
#Master1服务器
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| client_test   
| db_test
| mysql              |
| performance_schema |
| sys                |               |
+--------------------+
6 rows in set (0.00 sec)
#Master2服务器
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| client_test   
| db_test
| mysql              |
| performance_schema |
| sys                |               |
+--------------------+
6 rows in set (0.00 sec)
#Slave1服务器mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| client_test   
| db_test
| mysql              |
| performance_schema |
| sys                |               |
+--------------------+
6 rows in set (0.00 sec)
#Slave2服务器
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| client_test   
| db_test
| mysql              |
| performance_schema |
| sys                |               |
+--------------------+
6 rows in set (0.00 sec)

相关文章:

MySQL MMM高可用架构

MySQL MMM高可用架构一、MMM概述1、MMM简介2、MMM高可用架构3、MMM故障切换流程 二、MMM高可用双主双从架构部署1、配置主主复制&#xff08;master&#xff09;&#xff0c;主从复制&#xff08;slave&#xff09;1&#xff09;修改 Master1的MySQL配置文件2&#xff09;把配置…...

Spring Boot中配置文件介绍及其使用教程

目录 一、配置文件介绍 二、配置简单数据 三、配置对象数据 四、配置集合数据 五、读取配置文件数据 六、占位符的使用 一、配置文件介绍 SpringBoot项目中&#xff0c;大部分配置都有默认值&#xff0c;但如果想替换默认配置的话&#xff0c;就可以使用application.prop…...

Hobby脚本自动化工具

Hobby脚本自动化工具 功能简介&#xff1a;可以按照指定编排的配置文件&#xff0c;按顺序执行并监听 使用场景&#xff1a;可以用在前期信息收集的步骤上&#xff0c;将一些常见的脚本进行归纳&#xff0c;并编写成配置文档进行自动化处理 优点&#xff1a;可以扩展性强&am…...

Matlab随机数的产生

1、常见分布随机数的产生 1.1 二项分布 在贝努力试验中&#xff0c;某事件A发生的概率为p&#xff0c;重复该实验n次&#xff0c;X表示这n次实验中A发生的次数&#xff0c;则随机变量X服从的概率分布律&#xff08;概率密度&#xff09;为 记为 binopdf(x,n,p) p…...

计算机网络 第四章:网络层

一.网络层概述 1.1分组转发和路由选择 网络层的主要任务就是将分组从源主机经过多个网络和多段链路传输到目的主机&#xff0c;可以将该任务划分为分组转发和路由选择两种重要的功能。 如图所示&#xff1a;这些异构型网络如果只是需要各自内部通信&#xff0c;那它们只需要实…...

分享一个docker无法启动的小问题

准备看看docker服务怎么样 [rootlocalhost ~]# docker ps Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 这一看就是docker的进程崩了&#xff0c;我们启动下进程 [rootlocalhost ~]# systemctl start docker Faile…...

Linux 安全 - Capabilities机制

文章目录 前言一、简介二、Capabilities list2.1 POSIX-draft defined capabilities2.2 Linux-specific capabilities 三、 Past and current implementation四、Thread capability sets五、File capabilities六、Transformation of capabilities during execve()七、Capabilit…...

分布式搜索引擎es-3

文章目录 数据聚合聚合的种类RestAPI实现聚合 数据聚合 什么是聚合&#xff1f; 聚合可以让我们极其方便的实现对数据的统计、分析、运算。例如&#xff1a; 什么品牌的手机最受欢迎&#xff1f;这些手机的平均价格、最高价格、最低价格&#xff1f;这些手机每月的销售情况如…...

Matlab坐标轴标签中文设置宋体

对y坐标输出中文宋体 新罗马字符 x[1,2,3,4,5,6,7]; plot(x) ylabel(\fontname{宋体}\fontsize{20}长度\fontname{Times New Roman}\fontsize{10} (μm))可以灵活设置字体和大小,其图片如下图所示 也可以对全图的文字设置同一个字体 set(gca,FontSize,9,Fontname, Times New…...

做一个贪吃蛇小游戏happy一下

直接Vue上代码 <template><div><div>贪吃蛇</div><canvas id"canvas" width"400" height"400"></canvas></div> </template><script> export default {data() {return {ctx: null,inter…...

opencv形态学-膨胀

opencv形态学-膨胀 膨胀就是取每一个位置结构元邻域内最大值作为该位置的输出灰度值&#xff1b; 膨胀是取邻域内最大值&#xff0c;那么显然膨胀后图像整体亮度会比原先要高&#xff0c;图像中亮的物体尺寸会变大&#xff0c;相反暗的尺寸会减小&#xff0c;甚至是消失 结构元…...

玄子Share 设计模式 GOF 全23种 + 七大设计原则

玄子Share 设计模式 GOF 全23种 七大设计原则 前言&#xff1a; 此文主要内容为 面向对象七大设计原则&#xff08;OOD Principle&#xff09;GOF&#xff08;Gang Of Four&#xff09;23种设计模式拓展的两个设计模式 简单工厂模式&#xff08;Simple Factory Pattern&#x…...

单链表操作 C实现

struct LNode { //定义一个节点 int data; //数据域 struct LNode *next; //指针域 }; 0.初始化 typedef sturct LNode{ //定义单链表结点类型 int date ; //每个结点存放一个数据元素struct LNode *next; //指针指向下…...

WordPress主题网站首页添加好看的四格小工具教程

直接到网站根目录创建一个css文件(文件名:sige.css),文件名可自定义(注意文件名一致) <link rel"stylesheet" href"你的网站/sige.css" type"text/css" > 然后在header.php模板最上方添加引入代码 也可自定义HTML里添加css代码最上方写…...

unittest自动化测试框架讲解以及实战

为什么要学习unittest 按照测试阶段来划分&#xff0c;可以将测试分为单元测试、集成测试、系统测试和验收测试。单元测试是指对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作&#xff0c;通常指函数或者类&#xff0c;一般是开发完成的。 单元…...

数学建模之Matlab基础操作

作者由于后续课程也要学习Matlab&#xff0c;并且之前也进行了一些数学建模的练习&#xff08;虽然是论文手&#xff09;&#xff0c;所以花了几天零碎时间学习Matlab的基础操作&#xff0c;特此整理。 基本运算 a55 %加法&#xff0c;同理减法 b2^3 %立方 c5*2 %乘法 x 1; …...

【Nuxt】04 Nuxt2-SEO: sitemap.xml、seo优化、robots.txt

1 SiteMap设置 环境准备 注意生成sitemap依赖于nuxtjs/sitemap&#xff0c;并且需要用axios进行请求&#xff0c;不要使用nuxtjs/axios&#xff0c;不然会报错 sitemap.xml配置 在nuxt.config.js中配置下面的内容 npm install nuxtjs/sitemap npm install axios在static/s…...

VMware VSAN 入门

一、虚拟化的存储 1.1、对于数据中心来说最重要的是数据&#xff0c;而承载数据的设备就是存储设备&#xff08;Storage&#xff09; 1.2、物理服务器的本地存储阵列 与 虚拟化服务器的本地存储阵列 对比 1.3、避免单台服务器故障的虚拟化高级特性&#xff1a;vSphere HA技术 …...

【设计模式】备忘录模式

文章目录 1.备忘录模式定义2.备忘录模式的角色3.备忘录模式实现3.1.场景说明3.2.结构类图3.3.代码实现 4.备忘录模式优缺点5.备忘录模式适用场景6.备忘录模式总结 主页传送门&#xff1a;&#x1f481; 传送 1.备忘录模式定义 备忘录&#xff08;Memento Pattern&#xff09;模…...

vue3+elementUiPlus表格导出功能

1.下载需要的组件包 npm install file-saver xlsx 2.页面中导入 import FileSaver from file-saver import * as XLSX from xlsx; 3.页面中的表格加一个id <el-table :data"tableData" ref"multipleTableRef" style"width…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

Matlab实现任意伪彩色图像可视化显示

Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中&#xff0c;如何展示好看的实验结果图像非常重要&#xff01;&#xff01;&#xff01; 1、灰度原始图像 灰度图像每个像素点只有一个数值&#xff0c;代表该点的​​亮度&#xff08;或…...