mysql一主多从 读写分离_MySQL主从复制原理

mysql一主多从 读写分离_MySQL主从复制原理文章目录前言一、基本概念1.读写分离(1)什么是读写分离(2)为什么要读写分离(3)什么时候要读写分离(4)主从复制与读写分离2.MySQL主从复制(1)mysql支持的复制类型(2)主从复制的工作过程(3)mysql主从复制高延迟的原因(4)mysql主从复制高延迟的解决办法3.常见的MySQL读写分离方式(1)基于程序代码内部实现(2)基于中间代理层实现二、MySQL主从复制架构搭建1.服务器配置2.实验前准备3.mysql主从服务器时间同步4.主服务器

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

  在企业应用中,成熟的业务通常数据量都比较大。单台 mysql 在安全性、高可用性和高并发方面都无法满足实际的需求,实际生产环境中经常会配置多台主从数据库服务器以实现读写分离。

一、基本概念

1. 读写分离

(1) 什么是读写分离

在这里插入图片描述
  读写分离,基本的原理是让主数据库处理事务性 增、删、改 操作(INSERT、UPDATE、DELETE),而从数据库处理 (SELECT) 操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库中。

(2) 为什么要读写分离

  因为数据库的 (写 10000 条数据可能要 3 分钟)操作是比较耗时的。但是数据库的 (读 10000 条数据可能只要 5 秒钟)操作非常迅速。所以读写分离解决的是数据库的写入性能太低影响了查询的效率的问题。

(3) 什么时候要读写分离

  数据库不一定要读写分离,如果程序使用数据库较多时,而更新少,查询多的情况下会考虑使用。利用数据库主从同步,再通过读写分离可以分担数据库压力,提高性能。

(4) 主从复制与读写分离

  在实际的生产环境中,如果数据库的读和写都在同一个数据库服务器中,无论是在安全性、高可用性还是高并发能力等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。有点类似于 rsync,但是不同的是 rsync 是对磁盘文件做备份,而 mysql 主从复制是对数据库中的数据、语句做备份。

2. MySQL 主从复制

(1) mysql 支持的复制类型

  • STATEMENT:基于语句的复制。在服务器上执行 sql 语句,在从服务器上执行同样的语句,mysql 默认采用基于语句的复制,执行效率高。
  • ROW:基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
  • MIXED:混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。

(2) 主从复制的工作过程

在这里插入图片描述

  • Master 节点将数据的改变记录成二进制日志(bin log),当 Master 上的数据发生改变时,则将改变写入二进制日志中。
  • Slave 节点会在一定时间间隔内对 Master 的二进制日志进行探测其是否发生改变,如果发生改变,则开始一个 I/O 线程请求 Master 的二进制事件。
  • 同时 Master 节点为每个 I/O 线程启动一个 dump 线程,用于向其发送二进制事件,并保存至 Slave 节点的中继日志(Relay log)中,Slave 节点将启动 SQL 线程从中继日志中读取二进制日志,在本地重放,即解析成 sql 语句逐一执行,使得其数据和 Master 节点的保持一致,最后 I/O 线程和 SQL 线程将进入睡眠状态,等待下一次被唤醒。

PS:

  • 中继日志通常会位于 OS 缓存中,所以中继日志的开销很小。
  • 复制过程有一个很重要的限制,即复制在 Slave 上是串行化的,也就是说 Master 上的并行更新操作不能在 Slave 上并行操作。

(3) mysql 主从复制高延迟的原因

  • master 服务器高并发,形成大量事务
  • 网络延迟
  • 主从硬件设备导致(cpu 主频、内存 io、硬盘 io)
  • 本来就不是同步复制、而是异步复制

(4) mysql 主从复制高延迟的解决办法

  • 从库优化 Mysql 参数。比如增大 innodb_buffer_pool_size,让更多操作在 mysql 内存中完成,减少磁盘操作
  • 从库使用高性能主机(高性能 cpu、大内存),避免使用虚拟云主机,使用物理主机,提升 I/O 吞吐量
  • 从库使用 SSD 磁盘
  • 网络优化,避免跨机房实现同步

3. 常见的 MySQL 读写分离方式

(1) 基于程序代码内部实现

  在代码中根据 select、insert 进行路由分类,这类方法也是目前生产环境应用最广泛的。优点是性能较好,因为在程序代码中实现,不需要增加额外的硬件设备开支。缺点是需要开发人员来实现, 运维人员无从下手。
  需要注意的是,并不是所有的应用都适合在程序代码中实现读写分离,像一些大型复杂的 Java 应用,如果在程序代码中实现读写分离对代码改动就较大。

(2) 基于中间代理层实现

  代理一般位于客户端和服务器之间,代理服务器接到客户端请求后通过判断后转发到后端数据库,有以下代表性代理应用程序:

  • MySQL-Proxy
    MySQL-Proxy 为 MySQL 开源项目,通过其自带的 lua 脚本进行 SQL 判断。

  • Atlas
    是由奇虎 360 的 Web 平台部基础架构团队开发维护的一个基于 MySQL 协议的数据中间层项目。它是在 mysql-proxy0.8.2 版本的基础上,对其进行了优化,增加了一些新的功能特性。360 内部使用 Atlas 运行的 mysql 业务,每天承载的读写请求数达几十亿条,支持事物以及存储过程。

  • Amoeba
    由陈思儒开发,作者曾就职于阿里巴巴。该程序由 Java 语言进行开发,阿里巴巴将其用于生产环境。但是它不支持事务和存储过程。由于使用 MySQL-Proxy 需要写大量的 Lua 脚本,这些 Lua 并不是现成的,而是需要自己去写。这对于并不熟悉 MySQL-Proxy 内置变量和 MySQL Protocol 的人来说是非常困难的。Amoeba 是一个非常容易便用、可移植性非常强的软件。因此它在生产环境中被广泛应用于数据库的代理层。

二、MySQL 主从复制架构搭建

1. 服务器配置

服务器 主机名 IP 应用
Master 服务器 master 192.168.10.20 mysql5.7
Slave1 服务器 slave1 192.168.10.30 mysql5.7
Slave2 服务器 slave2 192.168.10.40 mysql5.7
Amoeba 服务器 amoeba 192.168.10.50 jdk1.6、Amoeba
客户端 服务器 client 192.168.10.90 mysql

2. 实验前准备

所有主机关闭防火墙和 SELINUX

systemctl stop firewalld && systemctl disable firewalld
setenforce 0

3. mysql 主从服务器时间同步

master 服务器(192.168.10.20)

yum -y install ntp

vim /etc/ntp.conf
#--末尾添加--
server 127.127.10.0							#设置本地是时钟源,注意修改自己的网段
fudge 127.127.10.0 stratum 8				#设置时间层级为 8(限制在 15 内)

service ntpd start

slave1 服务器(192.168.10.30)

yum -y install ntp ntpdate

service ntpd start
/usr/sbin/ntpdate 192.168.10.20				#进行时间同步

crontab -e
*/30 * * * * /usr/sbin/ntpdate 192.168.10.20

slave2 服务器(192.168.10.40)

yum -y install ntp ntpdate

service ntpd start
/usr/sbin/ntpdate 192.168.10.20

crontab -e
*/30 * * * * /usr/sbin/ntpdate 192.168.10.20

4. 主服务器的 mysql 配置

vim /etc/my.cnf
#添加如下配置
server-id = 1			#定义 server-id,每台主机不可相同
log-bin=master-bin		#主服务器开启二进制日志
binlog_format = MIXED	#本次使用 MIXED 模式
log-slave-updates=true	#允许从服务器更新二进制日志

systemctl restart mysqld

mysql -uroot -p123456
#设置从服务器账号并授权
mysql> GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.10.%' IDENTIFIED BY '123456';
mysql> FLUSH PRIVILEGES;
mysql> use mysql;
mysql> select user,host,authentication_string from user;
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      603 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

# File 列显示日志名,Position 列显示偏移量

在这里插入图片描述
注意将两个模块的字符集注释掉(主从)

5. 从服务器的 mysql 配置

(1) slave1

vim /etc/my.cnf
server-id = 2					#修改,注意 id 与其他主机都不能相同
relay-log=relay-log-bin			#添加,开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index	#添加,定义中继日志文件的位置和名称
relay_log_recovery = 1                  #选配项
#当 slave 从库宕机后,假如 relay-log 损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的 relay-log,并且重新从 master 上获取日志,这样就保证了relay-log 的完整性。默认情况下该功能是关闭的,将 relay_log_recovery 的值设置为 1 时, 可在 slave 从库上开启该功能,建议开启。

systemctl restart mysqld

mysql -u root -p123456
mysql> CHANGE master to master_host='192.168.10.20',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=603;
#配置同步,注意 master_log_file 和 master_log_pos 的值要与 Master 查询的一致
mysql> start slave;
#启动同步,如有报错执行 reset slave;

mysql> show slave status\G;			#查看 Slave 状态,确保 IO 和 SQL 线程都是 Yes,代表同步正常
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.10.20
                  Master_User: myslave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000001
          Read_Master_Log_Pos: 603
               Relay_Log_File: relay-log-bin.000002
                Relay_Log_Pos: 321
        Relay_Master_Log_File: master-bin.000001
             Slave_IO_Running: Yes		#负责与主机的 IO 通信
            Slave_SQL_Running: Yes		#负责自己的 slave mysql 进程
					..........     

(2) slave2

vim /etc/my.cnf
server-id = 3		#注意和 master 和 slave1 不同
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
relay_log_recovery = 1

systemctl restart mysqld

mysql -uroot -p123456
mysql> CHANGE master to master_host='192.168.10.20',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=603;
mysql> start slave;
mysql> show slave status\G;

(3) 一般 Slave_IO_Running: No 的可能性

  • 网络不通
  • my.cnf 配置有问题
  • 密码、file 文件名、pos 偏移量不对
  • 防火墙没有关闭

6. 验证主从复制效果

master 服务器(192.168.10.20)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

slave1 服务器(192.168.10.30)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

slave2 服务器(192.168.10.40)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

三、MySQL 读写分离架构搭建

1. amoeba 服务器软件安装

(1) 安装 java 环境

因为 amoeba 是基于 jdk1.5 开发的,所以官方推荐使用 jdk1.5 或 1.6 版本,高版本不建议使用。

wget http://101.34.22.188/jdk1.6/jdk-6u14-linux-x64.bin -P /opt
cp -a /opt/jdk-6u14-linux-x64.bin /usr/local
chmod +x /usr/local/jdk-6u14-linux-x64.bin
cd /usr/local				#生成的 jdk 目录会在当前目录
./jdk-6u14-linux-x64.bin	#回车或按空格至用户选项,输入 yes 最后再回车
mv /usr/local/jdk1.6.0_14/ /usr/local/jdk1.6

vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin

source /etc/profile
java -version		#注意 java 版本是不是 1.6,不是找找原因

(2) 安装 amoeba 软件

wget http://101.34.22.188/amoeba/amoeba-mysql-binary-2.2.0.tar.gz -P /opt/
mkdir /usr/local/amoeba
tar zxvf /opt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/
/usr/local/amoeba/bin/amoeba	#如显示 amoeba start|stop 说明安装成功

2. 配置 amoeba 读写分离,两个 slave 读负载均衡

master、slave1、slave2 的 mysql 上开放权限给 amoeba 访问

mysql> grant all on *.* to test@'192.168.10.%' identified by '123456';
mysql> select user,host,authentication_string from mysql.user;

amoeba 服务器配置 amoeba 服务

#修改配置文件前先做备份
cd /usr/local/amoeba/conf/
cp amoeba.xml amoeba.xml.bak
cp dbServers.xml dbServers.xml.bak


vim /usr/local/amoeba/conf/amoeba.xml		#修改 amoeba 配置文件
#--30行--
<property name="user">amoeba</property>
#--32行-- 
<property name="password">123456</property>
#--115行--
<property name="defaultPool">master</property>
#--117行-120行,取消注释并修改
<property name="writePool">master</property>
<property name="readPool">slaves</property>
......


vim /usr/local/amoeba/conf/dbServers.xml	#修改数据库配置文件
#--23行--注释掉 作用:默认进入 test 库,以防 mysql 中没有 test 库时会报错
<!-- <property name="schema">test</property> -->
#--26--修改,使用之前创建的授权用户
<property name="user">test</property>
#--29--去掉注释,密码为之前创建的授权用户密码
<property name="password">123456</property>
#--45--修改,设置主服务器的名 master
<dbServer name="master"  parent="abstractServer">
#--48--修改,设置主服务器的地址
<property name="ipAddress">192.168.10.20</property>
#--52--修改,设置从服务器的名 slave1
<dbServer name="slave1"  parent="abstractServer">
#--55--修改,设置从服务器1的地址
<property name="ipAddress">192.168.10.30</property>
#--58--复制上面 6 行粘贴,设置从服务器 2 的名 slave2 和地址
<dbServer name="slave2"  parent="abstractServer">
<property name="ipAddress">192.168.10.40</property>
#--65行--修改
<dbServer name="slaves" virtual="true">
#--71行--修改
<property name="poolNames">slave1,slave2</property>
......


/usr/local/amoeba/bin/amoeba start &		#启动 amoeba 软件,按 ctrl+c 返回
netstat -anpt | grep java					#查看 8066 端口是否开启,默认端口为 TCP 8066

3. 客户端测试读写分离

client:192.168.10.90

客户端快速安装 mysql

yum -y install mariadb-server mariadb
systemctl start mariadb.service && systemctl status mariadb.service

(1) 客户端建表

客户端操作

#通过 amoeba 服务器代理访问 mysql,在通过客户端连接 mysql 后写入的数据只有主服务会记录,然后同步给从服务器
#这里通过 192.168.10.50 主机的 8066 端口使用用户 amoeba 登录 mysql
mysql -uamoeba -h 192.168.10.50 -P8066
MySQL [(none)]> show databases;
MySQL [(none)]> use test;
MySQL [test]> create table test(id int,name char(20));
MySQL [test]> show tables;

master 服务器

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test           |
+----------------+
1 row in set (0.00 sec)

slave1 服务器

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test           |
+----------------+
1 row in set (0.00 sec)

slave2 服务器

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test           |
+----------------+
1 row in set (0.00 sec)

测试结果:客户端中做出的修改,在所有服务器上都能看到。

(2) 关闭 slave 功能后在主从服务器插入数据

slave1 服务器

mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test values(1,'slave1');
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+------+--------+
| id   | name   |
+------+--------+
|    1 | slave1 |
+------+--------+
1 row in set (0.00 sec)

slave2 服务器

mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test values(2,'slave2');
Query OK, 1 row affected (0.01 sec)

mysql> select * from test;
+------+--------+
| id   | name   |
+------+--------+
|    2 | slave2 |
+------+--------+
1 row in set (0.00 sec)

master 服务器

mysql> insert into test values(3,'master');
Query OK, 1 row affected (0.01 sec)

mysql> select * from test;
+------+--------+
| id   | name   |
+------+--------+
|    3 | master |
+------+--------+
1 row in set (0.00 sec)

client 服务器

MySQL [test]> select * from test;
+------+--------+
| id   | name   |
+------+--------+
|    2 | slave2 |
+------+--------+
1 row in set (0.00 sec)

MySQL [test]> select * from test;
+------+--------+
| id   | name   |
+------+--------+
|    1 | slave1 |
+------+--------+
1 row in set (0.00 sec)

MySQL [test]> select * from test;
+------+--------+
| id   | name   |
+------+--------+
|    2 | slave2 |
+------+--------+
1 row in set (0.01 sec)

MySQL [test]> select * from test;
+------+--------+
| id   | name   |
+------+--------+
|    1 | slave1 |
+------+--------+
1 row in set (0.00 sec)

测试结果:客户端在 slave1、slave2 中轮询查看数据。由于从服务器都关闭了 slave 功能,因此无法查看 master 服务器中的修改。

(3) 关闭 slave 功能后,客户端服务器写入数据

客户端服务器

MySQL [test]> insert into test values(4,'client1');
Query OK, 1 row affected (0.01 sec)

MySQL [test]> select * from test;
+------+--------+
| id   | name   |
+------+--------+
|    2 | slave2 |
+------+--------+
1 row in set (0.01 sec)

MySQL [test]> select * from test;
+------+--------+
| id   | name   |
+------+--------+
|    1 | slave1 |
+------+--------+
1 row in set (0.01 sec)

master 服务器

mysql> mysql> select * from test;
+------+---------+
| id   | name    |
+------+---------+
|    3 | master  |
|    4 | client1 |
+------+---------+
2 rows in set (0.00 sec)

slave1 服务器

mysql> select * from test;
+------+--------+
| id   | name   |
+------+--------+
|    1 | slave1 |
+------+--------+
1 row in set (0.00 sec)

slave2 服务器

mysql> mysql> select * from test;
+------+--------+
| id   | name   |
+------+--------+
|    2 | slave2 |
+------+--------+
1 row in set (0.00 sec)

测试结果:客户端服务器的修改操作是对于 master 服务器进行的,因此 master 服务器上可以看到客户端服务器所做的 insert 操作。由于客户端服务器的 select 操作是对从服务器进行的,而从服务器关闭了 slave 功能,无法获取更新,因此客户端服务器本身以及从服务器都无法查看更新操作。

(4) 从服务器开启 slave 服务

slave1 服务器

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

mysql> select * from test;
+------+---------+
| id   | name    |
+------+---------+
|    1 | slave1  |
|    3 | master  |
|    4 | client1 |
+------+---------+
3 rows in set (0.00 sec)

slave2 服务器

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from test;
+------+---------+
| id   | name    |
+------+---------+
|    2 | slave2  |
|    3 | master  |
|    4 | client1 |
+------+---------+
3 rows in set (0.00 sec)

master 服务器

mysql> select * from test;
+------+---------+
| id   | name    |
+------+---------+
|    3 | master  |
|    4 | client1 |
+------+---------+
2 rows in set (0.00 sec)

客户端服务器

MySQL [test]> select * from test;
+------+---------+
| id   | name    |
+------+---------+
|    1 | slave1  |
|    3 | master  |
|    4 | client1 |
+------+---------+
3 rows in set (0.00 sec)

MySQL [test]> select * from test;
+------+---------+
| id   | name    |
+------+---------+
|    2 | slave2  |
|    3 | master  |
|    4 | client1 |
+------+---------+
3 rows in set (0.00 sec)

测试结果:从服务器开启 slave 服务后可以从 master 服务器上获取更新,但是从服务器上的更新不会被 master 服务器看到。

(5) 客户端服务器再次插入数据

客户端服务器

MySQL [test]> insert into test values(5,'client2');
Query OK, 1 row affected (0.01 sec)

MySQL [test]> select * from test;
+------+---------+
| id   | name    |
+------+---------+
|    1 | slave1  |
|    3 | master  |
|    4 | client1 |
|    5 | client2 |
+------+---------+
4 rows in set (0.00 sec)

MySQL [test]> select * from test;
+------+---------+
| id   | name    |
+------+---------+
|    2 | slave2  |
|    3 | master  |
|    4 | client1 |
|    5 | client2 |
+------+---------+
4 rows in set (0.01 sec)

master 服务器

mysql> select * from test;
+------+---------+
| id   | name    |
+------+---------+
|    3 | master  |
|    4 | client1 |
|    5 | client2 |
+------+---------+
3 rows in set (0.00 sec)

slave1 服务器

mysql> select * from test;
+------+---------+
| id   | name    |
+------+---------+
|    1 | slave1  |
|    3 | master  |
|    4 | client1 |
|    5 | client2 |
+------+---------+
4 rows in set (0.01 sec)

slave2 服务器

mysql> select * from test;
+------+---------+
| id   | name    |
+------+---------+
|    2 | slave2  |
|    3 | master  |
|    4 | client1 |
|    5 | client2 |
+------+---------+
4 rows in set (0.00 sec)

测试结果:客户端服务器上的数据修改,会同步到所有服务器中。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170339.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python激活码2021 3_通用破解码

    python激活码2021 3_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • MUX VLAN详解与配置实例「建议收藏」

    MUX VLAN详解与配置实例「建议收藏」今天给大家介绍MUIXVLAN的相关理论知识,同时使用华为eNSP模拟器,完成了企业网中常见的MUXVLAN配置。一、MUXVLAN原理MUXVLAN是一种VLAN控制层面的访问控制技术,使用MUXVLAN,可以实现VLAN间的流量隔离,并且比较灵活的提供了多种实现方式。MUXVLAN存在主VLAN(SubordinateVLAN)、隔离性VLAN(SeparateVLAN)、**互通性VLAN(GroupVLAN)**三种类型的VLAN。其中隔离性VLAN和互通型VLAN又被称为从

  • Zuul网关_vue动态路由和静态路由的区别

    Zuul网关_vue动态路由和静态路由的区别1.微服务架构所面临的问题?1)针对某个功能,客户端在微服务架构的情况下需要请求多个模块接口2)针对于身份认证、日志、流量控制等公共模块每个微服务都需要做一遍,不利于业务与非业务的拆分针对于这些问题,Zuul可完美解决,我们可用Zuul做:1)客户端只需要知道网关而不需要知道具体模块的地址,所有服务由网关对外提供2)身份认证类…

  • ParameterizedThreadStart与ThreadStart的区别[通俗易懂]

    ParameterizedThreadStart与ThreadStart的区别[通俗易懂]classProgram  {    //publicstaticvoidCalculate()    //{    //  doubleDiameter=0.5;    //  Console.Write(“TheAreaOfCirclewithaDiameterof{0}is{1}”,Diame

  • windows系统C#(.Net)MySql数据库同步工具

    windows系统C#(.Net)MySql数据库同步工具DbSyncDbSync是一款使用.Net4.5(可以转Core)作为基础框架开发的,目前运行在windows平台的数据库同步工具。此类工具开源社区有很多,这里不是为了重复造轮子,仅仅是因为公司业务需要,不建议直接在生产环境上使用。项目介绍DbSync运行在windows平台的数据库同步工具支持一主多从同步支持同步方式设设置(结构,索引,增量,全量)支持指定表同步和忽略表同步支持同步计划,定时同步展示信息获取本人QQ:724926089,代码比较简单,有需要支持的地

  • Ant Design setFieldsValue 无效问题

    Ant Design setFieldsValue 无效问题

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号