Mysql - 配置Mysql主从复制-keepalived高可用-读写分离集群

news2024/11/24 2:13:57

目录

高可用:

为什么需要高可用呢?

高可用的主要作用:

keepalived是什么?它用在哪里?

什么是VRRP协议,它的作用是什么?

搭建一个基于keepalived的高可用Mysql主从复制读写分离集群

一、项目中的IP地址配置表:

二、项目拓扑图:

项目步骤:(主从复制、读写分离、单vip高可用、双vip高可用)

1、搭建Mysql的主从复制功能:

2、使用Mysqlrouter搭建MySQL的读写分离功能

3、安装配置keepalived服务

4、修改keepalived的配置文件(从36行以下的全部都不需要)(配置单vip的高可用服务)

5、模拟测试:如果master挂掉了,那么vip是否会转移到backup上去呢?

7、外部连接测试keepalived实现的高可用效果:

8、配置双vip实现keepalived配置(跟MySQL的主主复制十分相似)

9、 负载均衡器的使用

10、进行Mysql的压力测试:

脑裂现象

脑裂有没有危害?

什么时候keepalived会产生脑裂现象呢?

情况一:vrid不一样

情况二:防火墙拦截了vrrp报文通信

 情况三:修改认证密码,查看是否出现脑裂现象


高可用:

高可用性(High Availability,HA)是指系统或功能提供者在经过设计后,该系统或功能能够长时间的保持在正常状态运行的能力。在现代信息化的环境中,高可用性已经成为了一个必不可少的概念。

为什么需要高可用呢?

防止出现单点故障,主要是因为现代IT系统对于稳定性具有较高的要求,一旦系统出现故障(出现单点故障),将会影响到业务的正常运转,甚至会导致数据丢失等重大问题,从而造成严重的损失。所以,必须确保系统能够尽可能地持续稳定地运行,保证了业务的连续性与数据的可靠性。

高可用的主要作用:

高可用的主要作用包括:

  1. 提高系统的稳定性:高可用架构通过冗余、备份、灾备等措施,可以避免单点故障,提高系统的稳定性和可用性,保证服务的连续性。

  2. 提高业务的可靠性:高可用架构可以保证业务的可靠性,避免因为系统故障导致的数据丢失等问题,从而保证业务的正常运转。

  3. 改善用户体验:高可用架构可以提高系统的性能和响应速度,改善用户的体验,同时还可以提高系统的扩展性和可靠性。

  4. 降低维护成本:通过高可用架构降低应用程序的停机时间和维护成本,避免出现服务中断而导致的维护费用增加。

总之,高可用性是一种确保业务连续性的重要手段,它可以避免因为单点故障而带来的损失,并且可以保证业务的持续稳定运行。

keepalived是什么?它用在哪里?

keepalived的官方网站:Keepalived for Linux

keepalived是一种开源软件,它提供了一个简单而高效的方式来实现负载均衡和故障转移。keepalived能够监视可用服务器的状态,并确保将请求路由到可用服务器上,同时在服务器故障时能够及时切换到备用服务器,以保证服务的高可用性。

keepalived主要用于以下几个方面:

  1. 实现负载均衡:keepalived能够使用不同的算法,例如轮询(Round Robin)、加权轮询、最少连接数等,将客户端请求平均地分配到多个后端服务器上,以达到负载均衡的目的。

  2. 提高系统的可用性:keepalived可以对多台服务器进行监视,并自动切换到另一个可用的节点来避免单点故障。通过自动检测和切换,keepalived可以确保应用程序始终处于可用状态,从而提高系统的可用性。

  3. 构建高可用性架构:通过配合其他技术,例如虚拟IP地址(Virtual IP address)、虚拟路由器冗余协议(VRRP)等,keepalived可以帮助构建高可用性架构,从而保证服务的连续性和稳定性。

总之,keepalived是一款功能强大的开源软件,它可以帮助构建高可用性、可伸缩性和安全性的应用程序。它在各种Web应用程序、负载均衡设备、邮件服务器等系统中得到了广泛的应用。

什么是VRRP协议,它的作用是什么?

VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)是一种网络协议用于提高路由器系统的可用性和可靠性。它通过将多个路由器组合成一个虚拟路由器,只有一个路由器处于活动状态,其他路由器都是备份状态,从而达到提供冗余和故障转移的目的。

vip:virtual ip 虚拟IP地址,这个地址是对外提供服务的

参考文档:VRRP原理及配置 - 榕霖 - 博客园 (cnblogs.com)

具体来说,VRRP的作用包括:

  1. 提供冗余:通过将多个路由器组合成一个虚拟路由器,只有一个路由器处于活动状态,其他路由器都是备份状态,当活动路由器出现故障时,备用路由器可以自动接管其工作,确保网络服务不中断。

  2. 提高可用性:由于VRRP使用了路由器的冗余,所以即使在单个设备或链路出现故障时,也能够保持网络的连通性,从而提高了网络的可用性和可靠性。

  3. 支持负载均衡:当多个路由器同时处于活动状态时,VRRP可以自动将流量分布到各个路由器之间,实现负载均衡。

总之,VRRP协议是一种非常有效的网络协议,主要用于提供网络冗余和故障转移,提高网络的可用性和可靠性。它被广泛应用于企业内部网络、互联网服务提供商(ISP)等各种网络环境中。

vid:虚拟ip地址,这个地址是对外提供服务的

搭建一个基于keepalived的高可用Mysql主从复制读写分离集群

一、项目中的IP地址配置表:

中间件:安装mysqlrouter 和 keepalived

master:192.168.2.181

backup:192.168.2.182

vip:192.168.2.221

Linux客户机:192.168.2.43

Mysql服务器:安装Mysql数据库

master:192.168.2.150

slave-1:192.168.2.151

slave-2:192.168.2.152

二、项目拓扑图:

项目步骤:(主从复制、读写分离、单vip高可用、双vip高可用)

1、搭建Mysql的主从复制功能:

参考:Mysql - 主从复制介绍_Claylpf的博客-CSDN博客

xxx

2、使用Mysqlrouter搭建MySQL的读写分离功能

参考:Mysql - 读写分离_mysql读写分离的工具_Claylpf的博客-CSDN博客 

mysqlrouter.conf 配置文件配置:(mysqlrouter必须绑定到vip上或者使用任意地址0.0.0.0

(切记不能添加注释,我添加是为了方便解释,否则会报错)

[root@mysqlrouter-1 mysqlrouter]# cat mysqlrouter.conf 
# Copyright (c) 2015, 2023, Oracle and/or its affiliates.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA

#
# MySQL Router configuration file
#
# Documentation is available at
#    http://dev.mysql.com/doc/mysql-router/en/

[DEFAULT]
logging_folder = /var/log/mysqlrouter
runtime_folder = /run/mysqlrouter
config_folder = /etc/mysqlrouter

[logger]
level = INFO

# If no plugin is configured which starts a service, keepalive
# will make sure MySQL Router will not immediately exit. It is
# safe to remove once Router is configured.
[keepalive]
interval = 60

[routing:read_write]
bind_address = 192.168.2.221  #vip地址  虚拟IP地址,可以在keepalived配置之前确定 当然我们可以使用0.0.0.0(任意IP地址),那么不管是vip还是本机的ip地址所对应的7001端口都能访问到     
bind_port= 7001               #自己的端口号      
destinations = 192.168.2.150:3306   #设置目的机器IP地址,可以填master的IP,端口为mysqld运行的端口    
mode = read-write             #设置目的机器IP地址,可以填master的IP,端口为mysqld运行的端口        
max_connections = 65535
max_connect_errors = 100
client_connect_timeout = 9
 
[routing:read_only_1]
bind_address = 192.168.2.221        
bind_port= 7002                     
destinations = 192.168.2.151:3306   #设置目的机器IP地址,可以填master的IP,端口为mysqld运行的端口
mode = read-only                    
max_connections = 65535
max_connect_errors = 100
client_connect_timeout = 9

[routing:read_only_2]
bind_address = 192.168.2.221        
bind_port= 7003                     
destinations = 192.168.2.152:3306   #设置目的机器IP地址,可以填master的IP,端口为mysqld运行的端口
mode = read-only                    
max_connections = 65535
max_connect_errors = 100
client_connect_timeout = 9
[root@mysqlrouter-1 mysqlrouter]# 

成功刷新mysqlrouter服务

[root@mysqlrouter-1 mysqlrouter]# service mysqlrouter restart
Redirecting to /bin/systemctl restart mysqlrouter.service
[root@mysqlrouter-1 mysqlrouter]# 

查看端口:

[root@mysqlrouter-1 mysqlrouter]# netstat -anpult |grep mysqlrouter
tcp        0      0 192.168.2.221:7001      0.0.0.0:*               LISTEN      42847/mysqlrouter   
tcp        0      0 192.168.2.221:7002      0.0.0.0:*               LISTEN      42847/mysqlrouter   
tcp        0      0 192.168.2.221:7003      0.0.0.0:*               LISTEN      42847/mysqlrouter   
[root@mysqlrouter-1 mysqlrouter]# 

3、安装配置keepalived服务

下载keepalived服务:

[root@mysqlrouter-1 mysqlrouter]# yum install keepalived -y
已安装:
  keepalived.x86_64 0:1.3.5-19.el7                                                                                                                                                           

作为依赖被安装:
  lm_sensors-libs.x86_64 0:3.4.0-8.20160601gitf9185e5.el7                net-snmp-agent-libs.x86_64 1:5.7.2-49.el7_9.2                net-snmp-libs.x86_64 1:5.7.2-49.el7_9.2               

完毕!

4、修改keepalived的配置文件(从36行以下的全部都不需要)(配置单vip的高可用服务)

master上的配置

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
#   vrrp_strict       # 这一行需要注释:原因是因为会在iptables里添加一条规则,会阻止网络通信,导致出现脑裂现象
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {    # 定义一个vrrp协议的实例 名字是VI_1 表示第一个vrrp实例
    state MASTER        # 做master角色
    interface ens33     # 指定监听网络的接口,其实就是vip绑定到那个网络接口上
    virtual_router_id 81  # 虚拟路由器ID 81表示的是编号,另外一台机器上的配置也必须是81
    priority 160          # 优先级 数字越大就越容易成为master
    advert_int 1          # 宣告消息的时间间隔 为1s
    authentication {
        auth_type PASS    # 密码认证 password
        auth_pass 1111    # 具体密码 可以不用修改
    }
    virtual_ipaddress {   # vip 虚拟ip地址 可以配置多个
        192.168.2.221     # 配置的vip
        #192.168.200.17
        #192.168.200.18
    }
}

backup上的配置

[root@mysqlrouter-2 keepalived]# cat keepalived.conf 
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
  # vrrp_strict       # 这一行需要注释:原因是因为会在iptables里添加一条规则,会阻止网络通信,导致出现脑裂现象
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {    # 定义一个vrrp协议的实例 名字是VI_1 表示第一个vrrp实例
    state BACKUP        # 做backup角色
    interface ens33     # 指定监听网络的接口,其实就是vip绑定到那个网络接口上
    virtual_router_id 81  # 虚拟路由器ID 81表示的是编号,另外一台机器上的配置也必须是81
    priority 100          # 优先级 数字越大就越容易成为master
    advert_int 1          # 宣告消息的时间间隔 为1s
    authentication {
        auth_type PASS    # 密码认证 password
        auth_pass 1111    # 具体密码 可以不用修改
    }
    virtual_ipaddress {   # vip 虚拟ip地址 可以配置多个
        192.168.2.221     # 配置的vip 必须与master配置的vip是一样的
        #192.168.200.17
        #192.168.200.18
    }
}
[root@mysqlrouter-2 keepalived]# 

重新启动keepalived服务

[root@mysqlrouter-1 keepalived]# service keepalived restart
Redirecting to /bin/systemctl restart keepalived.service
[root@mysqlrouter-1 keepalived]# 

查看效果:

[root@mysqlrouter-1 keepalived]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::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 1000
    link/ether 00:0c:29:90:87:dc brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.181/24 brd 192.168.2.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.2.221/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe90:87dc/64 scope link 
       valid_lft forever preferred_lft forever
[root@mysqlrouter-1 keepalived]# 

5、模拟测试:如果master挂掉了,那么vip是否会转移到backup上去呢?

我们将master上的keepalived关闭,查看backup上的ip地址

[root@mysqlrouter-1 keepalived]# service keepalived stop
Redirecting to /bin/systemctl stop keepalived.service
[root@mysqlrouter-1 keepalived]# 

backup上的IP地址

[root@mysqlrouter-2 keepalived]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::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 1000
    link/ether 00:0c:29:a9:7f:87 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.182/24 brd 192.168.2.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.2.221/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fea9:7f87/64 scope link 
       valid_lft forever preferred_lft forever
[root@mysqlrouter-2 keepalived]# 

成功观察到我们想要的效果,vip真的漂移到了backup上了

当我们重启master,vip又会从backup上漂移到master上去的

[root@mysqlrouter-1 keepalived]# service keepalived start
Redirecting to /bin/systemctl start keepalived.service
[root@mysqlrouter-1 keepalived]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::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 1000
    link/ether 00:0c:29:90:87:dc brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.181/24 brd 192.168.2.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.2.221/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe90:87dc/64 scope link 
       valid_lft forever preferred_lft forever
[root@mysqlrouter-1 keepalived]# 

7、外部连接测试keepalived实现的高可用效果:

当我通过Linux上访问192.168.2.221:7001端口的时候,他会访问到我们的master机器的3306端口上去(Mysql数据库的默认端口是3306)

[root@mysql-2 ~]#  mysql -h 192.168.2.221 -P 7001 -u claylpf -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 21
Server version: 5.7.41-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.

claylpf@(none) 18:54  mysql>exit
Bye
[root@test ~]# 

[root@mysql-2 ~]#  mysql -h 192.168.2.221 -P 7002 -u claylpf -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20
Server version: 5.7.41 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.

claylpf@(none) 19:15  mysql>

8、配置双vip实现keepalived配置(跟MySQL的主主复制十分相似)

双 VIP 可以用于实现高可用性架构。在一个服务器出现故障时,流量可以被自动切换到另一个服务器,从而保持服务的连续性。这在负载均衡、高可用的网络应用中特别有用。

master配置文件:

[root@mysqlrouter-1 keepalived]# cat keepalived.conf 
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
  # vrrp_strict       
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {    
    state MASTER        
    interface ens33     
    virtual_router_id 81  
    priority 160          
    advert_int 1          
    authentication {
        auth_type PASS    
        auth_pass 1111   
    }
    virtual_ipaddress {   
        192.168.2.221     
    }
}

vrrp_instance VI_2 {    
    state BACKUP        
    interface ens33     
    virtual_router_id 101  
    priority 100          
    advert_int 1          
    authentication {
        auth_type PASS    
        auth_pass 1111   
    }
    virtual_ipaddress {   
        192.168.2.201     
    }
}
[root@mysqlrouter-1 keepalived]# 

backup配置文件:

[root@mysqlrouter-2 keepalived]# cat keepalived.conf 
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
  # vrrp_strict       # 这一行需要注释:原因是因为会在iptables里添加一条规则,会阻止网络通信,导致出现脑裂现象
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {    # 定义一个vrrp协议的实例 名字是VI_1 表示第一个vrrp实例
    state BACKUP        # 做backup角色
    interface ens33     # 指定监听网络的接口,其实就是vip绑定到那个网络接口上
    virtual_router_id 81  # 虚拟路由器ID 81表示的是编号,另外一台机器上的配置也必须是51
    priority 100          # 优先级 数字越大就越容易成为master
    advert_int 1          # 宣告消息的时间间隔 为1s
    authentication {
        auth_type PASS    # 密码认证 password
        auth_pass 1111    # 具体密码 可以不用修改
    }
    virtual_ipaddress {   # vip 虚拟ip地址 可以配置多个
        192.168.2.221     # 配置的vip 必须与master配置的vip是一样的
    }
}

vrrp_instance VI_2 {    # 定义一个vrrp协议的实例 名字是VI_1 表示第一个vrrp实例
    state MASTER        # 做backup角色
    interface ens33     # 指定监听网络的接口,其实就是vip绑定到那个网络接口上
    virtual_router_id 101  # 虚拟路由器ID 101表示的是编号,另外一台机器上的配置也必须是101
    priority 120          # 优先级 数字越大就越容易成为master
    advert_int 1          # 宣告消息的时间间隔 为1s
    authentication {
        auth_type PASS    # 密码认证 password
        auth_pass 1111    # 具体密码 可以不用修改
    }
    virtual_ipaddress {   # vip 虚拟ip地址 可以配置多个
        192.168.2.201     # 配置的vip 必须与master配置的vip是一样的
    }
}
[root@mysqlrouter-2 keepalived]# 

查看master和backup的IP地址

9、 负载均衡器的使用

配置负载均衡器来实现流量的合理分配:

我们可以通过DNS域名解析来配置负载均衡器或者是通过nginx来配置负载均衡器

10、进行Mysql的压力测试:

Mysql压力测试工具:Mysqlslap、Sysbench(数据库专用测试工具)

可以模拟每秒钟处理完的请求数,每秒处理事务处,一次请求所需的平均数,系统内处理的并发请求数。

脑裂现象

脑裂有没有危害?

"脑裂"(Brain Split)通常用于指代分布式计算系统中的一个问题,特别是在集群环境下,其中集群中的节点在某种情况下无法与其他节点进行通信,导致节点之间的数据不一致。脑裂问题可能会导致严重的系统故障和数据损坏。

脑裂问题的危害在于:

  1. 数据不一致性:脑裂可能导致节点之间的数据不一致。如果在脑裂发生时,某些节点认为其他节点不可用,从而导致不同节点之间的数据更新没有被正确传播,最终导致数据不一致。

  2. 故障和系统崩溃:脑裂可能导致系统中的节点以不同的状态运行,从而影响整个系统的稳定性。这可能导致故障和系统崩溃,因为无法在节点之间协调操作。

  3. 无法达成共识:分布式系统通常需要在节点之间达成共识以进行操作,例如领导选举、数据复制等。脑裂可能会破坏共识机制,导致系统无法正常运行。

什么时候keepalived会产生脑裂现象呢?

脑裂现象:

1、vrid不一样的时候会产生

2、中间存在防火墙,阻止了网络之间的keepalived的master和backup的选举过程,vrrp报文无法通信(网络通信出现错误)

3、认证密码不一样也会出现脑裂现象

情况一:vrid不一样

当我们的master的vrid是82,而backup上的vrid是81,那么会产生脑裂现象

master上和backup上都出现了vip,这说明出现了脑裂现象 

 

情况二:防火墙拦截了vrrp报文通信

添加iptables防火墙规则

除了22号端口(ssh协议)能够通信,其他端口都不能通信

查看 master上和backup上是否都出现了vip,发现都出现了,说明产生了脑裂现象

  

最后去除防火墙规则

 情况三:修改认证密码,查看是否出现脑裂现象

查看 master上和backup上是否都出现了vip,发现都出现了,说明产生了脑裂现象

  

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

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

相关文章

【vue3】解决scope.row.id套标签太多无法随着点击按钮而变化

实现要求:再点击每一行的修改按钮时&#xff0c;动态拿取该行的id传给后端作为pk(主键)实现数据库数据的修改&#xff0c;并显示在vue前端&#xff1b; 我遇到的问题&#xff1a;在2处使用 scope 作用域插槽拿取每一行的数据&#xff0c;在3处&#xff0c;删除按钮那一行代码&a…

BGP小综合

实验要求及拓扑 一、思路 1.使用OSPF使R2-R7之间可通。 2.各自宣告AS区域&#xff0c;两个区域两两之间建邻&#xff0c;AS2两个小区域之间建联邦&#xff08;R2与R5、R4与R7&#xff09;。 3.使R3、R6为路由反射器 RR反射器选取各小区域的路由器作为客户端 、非客户端 4.优…

分布式事务模式理论详解

&#x1f680; 分布式事务 &#x1f680; &#x1f332; AI工具、AI绘图、AI专栏 &#x1f340; &#x1f332; 如果你想学到最前沿、最火爆的技术&#xff0c;赶快加入吧✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;CSDN-Java领域优质创作者&#x1f3c6;&…

SaaS,PaaS,IaaS之间的主要区别

SaaS&#xff0c;PaaS&#xff0c;IaaS之间的主要区别 不久之前&#xff0c;公司的所有IT系统都是本地部署&#xff0c;而云也只是天空中蓬松的白色物体。现在&#xff0c;几乎所有系统和进程都可以使用云平台。SaaS&#xff0c;PaaS和IaaS只是描述如何在企业中使用云的三种方…

DL_20无线串口模块

今日介绍一块最近入手的无线串口模块&#xff0c;40r左右&#xff0c;精简好用&#xff0c;虽然感觉配置波特率啥的并不智能化&#xff0c;但250米的通信距离还是很顶的&#xff01;它的升级版甚至有1000米的通信距离&#xff08;空旷地带&#xff09; 这篇文章不多讲其余话&am…

(二)结构型模式:1、适配器模式(Adapter Pattern)(C++实现示例)

目录 1、适配器模式&#xff08;Adapter Pattern&#xff09;含义 2、适配器模式应用场景 3、适配器模式的UML图学习 4、C实现适配器模式的示例 1、适配器模式&#xff08;Adapter Pattern&#xff09;含义 将一个接口转换为客户端所期待的接口&#xff0c;从而使两个接口…

Java基础篇--运算符

目录 算术运算符 赋值运算符 比较运算符 逻辑运算符 条件运算符&#xff08;?:&#xff09; instanceof 运算符 Java运算符优先级 在程序中经常出现一些特殊符号&#xff0c;如、-、*、、>等&#xff0c;这些特殊符号称作运算符。运算符用于对数据进行算术运算、赋值…

@RequestHeader使用

RequestHeader 请求头参数的设置 GetMapping("paramTest/requestHeader")public String requestHeaderTest(RequestHeader("name") String name){return name;} 在Postman的Headers中添加请求头参数&#xff0c;不过貌似不能加中文

k8s 滚动更新控制(一)

在传统的应用升级时&#xff0c;通常采用的方式是先停止服务&#xff0c;然后升级部署&#xff0c;最后将新应用启动。这个过程面临一个问题&#xff0c;就是在某段时间内&#xff0c;服务是不可用的&#xff0c;对于用户来说是非常不友好的。而kubernetes滚动更新&#xff0c;…

Java泛型集合简明教程

前言 我们编写一个数组并对数组进行排序&#xff0c;不管是对浮点型数组、整型数组、字符串数组或者是其他任何类型的数组进行排序&#xff0c;我们可以利用方法重载的方式&#xff0c;针对每种类型的数组分别编写一个排序方法&#xff0c;需要为几种类型的数组排序&#xff0…

Java课题笔记~ JSP编程

4.1 JSP基本语法 JSP (全称Java Server Pages) 是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求&#xff0c;而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。 JSPHTMLJava JSP的本质是Servlet 访问JSP的时候&#x…

【逗老师的PMP学习笔记】10、项目沟通管理

目录 一、规划沟通管理1、【关键工具】沟通技术2、【关键工具】沟通模型&#xff08;沟通模式&#xff09;3、【关键工具】沟通方法4、【关键工具】文化意识5、【关键输出】沟通管理计划 二、管理沟通1、【关键工具】会议管理 三、监督沟通 一、规划沟通管理 规划沟通管理是基于…

光威神策DDR5 6800超频破10GHz,国产良心价高端内存创造历史

前段时间光威把8000MHz的DDR5内存打到了千元以内&#xff0c;但是因为当时AMD平台还不支持&#xff0c;确实是馋哭了很多AMD玩家&#xff0c;这两天AMD总算发布了新版AM5主板固件&#xff0c;AGESA 1.0.0.7B BIOS&#xff0c;让AMD Ryzen 7000系列CPU和主板能够支持8000MHZ以上…

MySQL 中读写分离可能遇到的问题

前言 MySQL 中读写分离是经常用到了的架构了&#xff0c;通过读写分离实现横向扩展的能力&#xff0c;写入和更新操作在源服务器上进行&#xff0c;从服务器中进行数据的读取操作&#xff0c;通过增大从服务器的个数&#xff0c;能够极大的增强数据库的读取能力。 MySQL 中的…

JavaWeb-Servlet服务连接器(一)

目录 1.Servlet生命周期 2.Servlet的配置 3.Servlet的常用方法 4.Servlet体系结构 5.HTTP请求报文 6.HTTP响应报文 1.Servlet生命周期 Servlet&#xff08;Server Applet&#xff09;是Java Servlet的简称。其主要的功能是交互式地浏览和修改数据&#xff0c;生成一些动态…

《数据同步-NIFI系列》Nifi配置UpdateAttribute实现字符串时间戳转日期

Nifi配置UpdateAttribute实现字符串时间戳转日期 数据处理流程如下&#xff1a;查询源数据库&#xff0c;将Avro转为Json格式&#xff0c;然后使用EvaluateJsonPath修改字段名&#xff0c;最后使用replaceText将参数组成SQL&#xff0c;最后PutSQL。 一、字段串时间戳导致无法插…

章节5:脚本注入网页-XSS

章节5&#xff1a;脚本注入网页-XSS XSS &#xff1a;Cross Site Script 恶意攻击者利用web页面的漏洞&#xff0c;插入一些恶意代码&#xff0c;当用户访问页面的时候&#xff0c;代码就会执行&#xff0c;这个时候就达到了攻击的目的。 JavaScript、Java、VBScript、Activ…

web-js

<html><head><title>基本语法</title></head><body><script>// window.alert("js");// document.write("js");// console.log("js");// function add(a,b){// return ab;// }var result functio…

Linux基础与应用开发系列九:各类系统函数

open_close函数 OPEN函数 头文件&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> 函数原型&#xff1a; 当文件存在时 int open(const char* pathname,int flags) 当文件不存在时 int open (const char* pathname,int f…

解决“先commit再pull”造成的git冲突

一、问题场景 在分支上修改了代码然后commit&#xff08;没有push&#xff09;&#xff0c;此时再git pull&#xff0c;拉下了别人的修改&#xff0c;但是报错无法merge 二、解决步骤 1.在idea下方工具栏选择git -> log&#xff0c;可以看到版本变化链表&#xff0c;右键…