Orchestrator使用讲解

news/2024/7/4 21:24:31/文章来源:https://www.cnblogs.com/longfeij/p/18279466

1、提前部署Mysql主从(一主两从)

2、配置orch到所有机器的免密,配置好主机名/etc/hosts

3、安装orch

配置文件

{"Debug": true,"EnableSyslog": false,     //是否把日志输出到系统日志里"ListenAddress": ":3000",  "MySQLTopologyUser": "root",    //orch管理mysql的用户"MySQLTopologyPassword": "abc123",  //orch管理mysql的密码"MySQLTopologyCredentialsConfigFile": "","MySQLTopologySSLPrivateKeyFile": "","MySQLTopologySSLCertFile": "","MySQLTopologySSLCAFile": "","MySQLTopologySSLSkipVerify": true,"MySQLTopologyUseMutualTLS": false,"MySQLOrchestratorHost": "10.211.55.2",  //orch元数据信息存放数据库host"MySQLOrchestratorPort": 4000,          //orch元数据信息存放数据库port"MySQLOrchestratorDatabase": "orchestrator", //orch元数据信息存放数据库database"MySQLOrchestratorUser": "orchestrator",    //orch元数据信息存放数据库user"MySQLOrchestratorPassword": "orchestrator",  //orch元数据信息存放数据库password"MySQLOrchestratorCredentialsConfigFile": "","MySQLOrchestratorSSLPrivateKeyFile": "","MySQLOrchestratorSSLCertFile": "","MySQLOrchestratorSSLCAFile": "","MySQLOrchestratorSSLSkipVerify": true,"MySQLOrchestratorUseMutualTLS": false,"MySQLConnectTimeoutSeconds": 1,"DefaultInstancePort": 3306,"DiscoverByShowSlaveHosts": false,   //通过show slave hosts自动发现slave,需在mysql配置文件中设置正确的report_host和report_port"InstancePollSeconds": 5,   //每隔5s获取状态"DiscoveryIgnoreReplicaHostnameFilters": ["a_host_i_want_to_ignore[.]example[.]com",".*[.]ignore_all_hosts_from_this_domain[.]example[.]com","a_host_with_extra_port_i_want_to_ignore[.]example[.]com:3307"],"UnseenInstanceForgetHours": 240, "SnapshotTopologiesIntervalHours": 0,"InstanceBulkOperationsWaitTimeoutSeconds": 10, //在进行批量操作时, 等待单个实例的最大时间(秒)"HostnameResolveMethod": "default",  //如何解析主机名,none: 直接返回传入的hostname,default: 直接返回传入hostname,cname: resolves an IP or hostname into a normalized valid CNAME,ip: 返回ip"MySQLHostnameResolveMethod": "@@hostname","SkipBinlogServerUnresolveCheck": true,"ExpiryHostnameResolvesMinutes": 60,"RejectHostnameResolvePattern": "","ReasonableReplicationLagSeconds": 0,  //合理的复制滞后秒数. 高于这个值就是有问题的"ProblemIgnoreHostnameFilters": [],"VerifyReplicationFilters": false,"ReasonableMaintenanceReplicationLagSeconds": 20,"CandidateInstanceExpireMinutes": 60,"AuditLogFile": "","AuditToSyslog": false,"RemoveTextFromHostnameDisplay": ".mydomain.com:3306","ReadOnly": false,"AuthenticationMethod": "basic","HTTPAuthUser": "admin","HTTPAuthPassword": "admin","AuthUserHeader": "","PowerAuthUsers": ["*"],"ClusterNameToAlias": {"127.0.0.1": "test suite"},"ReplicationLagQuery": "",   //提供ReplicationLagQuery 时, 计算出的复制延迟. 否则与SecondsBehindMaster 相同"DetectClusterAliasQuery": "SELECT SUBSTRING_INDEX(@@hostname, '.', 1)","DetectClusterDomainQuery": "","DetectInstanceAliasQuery": "","DetectPromotionRuleQuery": "","DataCenterPattern": "[.]([^.]+)[.][^.]+[.]mydomain[.]com","PhysicalEnvironmentPattern": "[.]([^.]+[.][^.]+)[.]mydomain[.]com","PromotionIgnoreHostnameFilters": [],"DetectSemiSyncEnforcedQuery": "","ServeAgentsHttp": false,"AgentsServerPort": ":3001","AgentsUseSSL": false,"AgentsUseMutualTLS": false,"AgentSSLSkipVerify": false,"AgentSSLPrivateKeyFile": "","AgentSSLCertFile": "","AgentSSLCAFile": "","AgentSSLValidOUs": [],"UseSSL": false,"UseMutualTLS": false,"SSLSkipVerify": false,"SSLPrivateKeyFile": "","SSLCertFile": "","SSLCAFile": "","SSLValidOUs": [],"URLPrefix": "","StatusEndpoint": "/api/status","StatusSimpleHealth": true,"StatusOUVerify": false,"AgentPollMinutes": 60,"UnseenAgentForgetHours": 6,"StaleSeedFailMinutes": 60,"SeedAcceptableBytesDiff": 8192,"PseudoGTIDPattern": "","PseudoGTIDPatternIsFixedSubstring": false,"PseudoGTIDMonotonicHint": "asc:","DetectPseudoGTIDQuery": "","BinlogEventsChunkSize": 10000,"SkipBinlogEventsContaining": [],"ReduceReplicationAnalysisCount": true,"FailureDetectionPeriodBlockMinutes": 1,"FailMasterPromotionOnLagMinutes": 0,"RecoveryPeriodBlockSeconds": 10, //一旦集群经历了恢复,那么在这段时间内将阻止自动恢复,以避免抖动"FailMasterPromotionIfSQLThreadNotUpToDate": false,"DelayMasterPromotionIfSQLThreadNotUpToDate": true, //等slave relay log apply完成"RecoveryIgnoreHostnameFilters": [],"RecoverMasterClusterFilters": [   "*"],  //只对列表中正则表达式匹配的集群做故障恢复操作"RecoverIntermediateMasterClusterFilters": ["*"],  //只对列表中正则表达式匹配的IntermediateMaster做故障恢复操作"OnFailureDetectionProcesses": ["echo 'Detected {failureType} on {failureCluster}. Affected replicas: {countSlaves}' >> /tmp/recovery.log"], //检测出故障时执行(在决定是否进行故障转移之前)"PreGracefulTakeoverProcesses": ["echo 'Planned takeover about to take place on {failureCluster}. Master will switch to read_only' >> /tmp/recovery.log" //在主变为只读之前立即执行],"PreFailoverProcesses": ["echo 'Will recover from {failureType} on {failureCluster}' >> /tmp/recovery.log"], //在执行恢复操作之前立即执行。任何这些进程的失败(非零退出代码)都会中止恢复。"PostFailoverProcesses": ["echo '(for all types) Recovered from {failureType} on {failureCluster}. Failed: {failedHost}:{failedPort}; Successor: {successorHost}:{successorPort}' >> /tmp/recovery.log","sh -x /usr/local/orchestrator/orch_hook.sh {failureType} {failureClusterAlias} {failedHost} {successorHost} >> /tmp/orch.log"],   //成功恢复结束后,执行的脚本,这里调用切换vip的脚本"PostUnsuccessfulFailoverProcesses": [],"PostMasterFailoverProcesses": ["echo 'Recovered from {failureType} on {failureCluster}. Failed: {failedHost}:{failedPort}; Promoted: {successorHost}:{successorPort}' >> /tmp/recovery.log"],"PostIntermediateMasterFailoverProcesses": ["echo 'Recovered from {failureType} on {failureCluster}. Failed: {failedHost}:{failedPort}; Successor: {successorHost}:{successorPort}' >> /tmp/recovery.log"],  //在intermediate master(新主)恢复成功后执行的脚本"PostGracefulTakeoverProcesses": ["echo 'Planned takeover complete' >> /tmp/recovery.log","sh -x /usr/local/orchestrator/orch_hook.sh {failureType} {failureClusterAlias} {failedHost} {successorHost} >> /tmp/orch.log"], //在手动主从切换,旧的主节点挂在新的主节点上之后执行"CoMasterRecoveryMustPromoteOtherCoMaster": true, //双主的场景. 如果一个主库故障, 当该参数为true时, 只会提升另一个"主库"为新主库(看起来怪怪的), 否则集群中所有节点都可能提升为新主库"DetachLostSlavesAfterMasterFailover": true, //某些从库再恢复过程中可能会丢失。当为true时,Orchestrator将通过detach-replica命令将其强行中断复制"ApplyMySQLPromotionAfterMasterFailover": true, //当为true时,Orchestrator将会在新的master上执行:reset slave all 和 set read_only=0两条命令"PreventCrossDataCenterMasterFailover": false, //默认false,当为true时,Orchestrator只会使用同一个DC下的服务器进行恢复。如果在同一DC中找不到,那么恢复就会失败"PreventCrossRegionMasterFailover": false,  //默认false,当为true时,Orchestrator将会在同一区域内的服务器上进行故障恢复,如果找不到,那么恢复就会失败"FailMasterPromotionOnLagMinutes": 0,        "MasterFailoverDetachReplicaMasterHost": false, //当是true,Orchestrator将发出一个detach-replica-master-host命令到新的master上(确保新的master将不会复制旧的master)。 orchestrator将发出一个detach-replica-master-host升级的母版(这可以确保新的母版不会重生旧的母版)。默认值:false。如果ApplyMySQLPromotionAfterMasterFailover是true,那么该参数是无意义的。MasterFailoverDetachSlaveMasterHost是别名"MasterFailoverLostInstancesDowntimeMinutes": 0, //故障转移之后,所有的服务器的停机分钟数。默认为0"PostponeReplicaRecoveryOnLagMinutes": 0, //在故障恢复过程中,复制的延迟超过给定时间的从库,只有在选出master并且执行了所有process流程之后,才会在恢复的后期进行恢复。0为禁用。PostponeSlaveRecoveryOnLagMinutes是别名"OSCIgnoreHostnameFilters": [],"GraphiteAddr": "","GraphitePath": "","GraphiteConvertHostnameDotsToUnderscores": true,"ConsulAddress": "","ConsulAclToken": "","ConsulKVStoreProvider": "consul"
}

切换逻辑如下

逻辑如下:
1、分析mysql实例的故障类型并得到DeadCoMaster的故障
2、获取DeadCoMaster对应的处理函数,为checkAndRecoverDeadCoMaster()
3、登记failure detection记录到后端数据库并执行OnFailureDetectionProcesses的hook。执行成功则执行下面的流程,否则不执行下面所有流程1、执行PreFailoverProcesses的hook,成功则执行下面的子流程1、选择新主2、无论选择新主成功与否,清理failure detection的登记,将记录active设为0。2、选择新主成功且开启ApplyMySQLPromotionAfterMasterFailover配置时,将新主的read_only设为false3、选择新主成功情况下,执行PostMasterFailoverProcesses的hook4、如果上述的恢复成功,执行PostFailoverProcesses的hook。上述恢复执行失败则执行PostUnsuccessfulFailoverProcesses的hook

4、准备脚本

起停脚本

start.sh

#!/bin/bashnohup ./orchestrator --debug --config orchestrator.conf.json http > arch.log &

stop.sh

#!/bin/bashps -ef|grep orchestrator|grep http|awk '{print $2}'|xargs -i kill -9 {}

vip切换脚本

orch_hook.sh

#!/bin/bash
isitdead=$1
#cluster=$2
oldmaster=$3
newmaster=$4ssh=$(which ssh)logfile="/home/mysql/usr/local/orchestrator/orch.log"
#interface='enp0s3'
interface='eth0'
user=mysql
#VIP=$($ssh -tt ${user}@${oldmaster} "sudo ip address show dev enp0s3|grep -w 'inet'|tail -n 1|awk '{print \$2}'|awk -F/ '{print \$1}'")
VIP='10.37.129.10'
VIP_TEMP=$($ssh -tt ${user}@${oldmaster} "sudo ip address|sed -nr 's#^.*inet (.*)/32.*#\1#gp'")
#remove '\r' at the end $'192.168.56.200\r'
VIP_TEMP=$(echo $VIP_TEMP|awk -F"\\r" '{print $1}')if [ ${#VIP_TEMP} -gt 0 ]; thenVIP=$VIP_TEMP
fi
echo ${VIP}
echo ${interface}if [[ $isitdead == "DeadMaster" ]]; thenif [ !-z ${!VIP} ] ; thenecho $(date)echo "Revocering from: $isitdead"echo "New master is: $newmaster"echo "/home/mysql/usr/local/orchestrator/orch_vip.sh -d 1 -n $newmaster -i ${interface} -I $VIP -u ${user} -o ${oldmaster}"/home/mysql/usr/local/orchestrator/orch_vip.sh -d 1 -n $newmaster -i ${interface} -I $VIP -u ${user} -o ${oldmaster}elseecho "Cluster does not exist!" | tee $logfilefi
fi
[mysql@tidb-4 orchestrator]$ cat orch_hook.sh
#!/bin/bash
isitdead=$1
#cluster=$2
oldmaster=$3
newmaster=$4ssh=$(which ssh)logfile="/home/mysql/usr/local/orchestrator/orch.log"
interface='eth0'
user=mysql
VIP='10.37.129.10'
VIP_TEMP=$($ssh -tt ${user}@${oldmaster} "sudo ip address|sed -nr 's#^.*inet (.*)/32.*#\1#gp'")
#remove '\r' at the end $'192.168.56.200\r'
VIP_TEMP=$(echo $VIP_TEMP|awk -F"\\r" '{print $1}')if [ ${#VIP_TEMP} -gt 0 ]; thenVIP=$VIP_TEMP
fi
echo ${VIP}
echo ${interface}if [[ $isitdead == "DeadMaster" ]]; thenif [ !-z ${!VIP} ] ; thenecho $(date)echo "Revocering from: $isitdead"echo "New master is: $newmaster"echo "/home/mysql/usr/local/orchestrator/orch_vip.sh -d 1 -n $newmaster -i ${interface} -I $VIP -u ${user} -o ${oldmaster}"/home/mysql/usr/local/orchestrator/orch_vip.sh -d 1 -n $newmaster -i ${interface} -I $VIP -u ${user} -o ${oldmaster}elseecho "Cluster does not exist!" | tee $logfilefi
fi
[mysql@tidb-4 orchestrator]$ cat orch_vip.sh
#!/bin/bashfunction usage {cat << EOFusage: $0 [-h] [-d master is dead] [-o old master ] [-s ssh options] [-n new master] [-i interface] [-I] [-u SSH user]OPTIONS:-h        Show this message-o string Old master hostname or IP address-d int    If master is dead should be 1 otherweise it is 0-s string SSH options-n string New master hostname or IP address-i string Interface exmple eth0:1-I string Virtual IP-u string SSH user
EOF}while getopts ho:d:s:n:i:I:u: flag; docase $flag ino)orig_master="$OPTARG";;;d)isitdead="${OPTARG}";;;s)ssh_options="${OPTARG}";;;n)new_master="$OPTARG";;;i)interface="$OPTARG";;;I)vip="$OPTARG";;;u)ssh_user="$OPTARG";;;h)usage;exit 0;;;*)usage;exit 1;;;esac
doneif [ $OPTIND -eq 1 ]; thenecho "No options were passed";usage;
fishift $(( OPTIND - 1 ));# discover commands from our path
ssh=$(which ssh)
arping=$(which arping)
ip2util=$(which ip)
#ip2util='ip'# command for adding our vip
cmd_vip_add="sudo -n $ip2util address add $vip dev $interface"
# command for deleting our vip
cmd_vip_del="sudo -n $ip2util address del $vip/32 dev $interface"
# command for discovering if our vip is enabled
cmd_vip_chk="sudo -n $ip2util address show dev $interface to ${vip%/*}/32"
# command for sending gratuitous arp to announce ip move
cmd_arp_fix="sudo -n $arping -c 1 -I ${interface} ${vip%/*}"
# command for sending gratuitous arp to announce ip move on current server
#cmd_local_arp_fix="sudo -n $arping -c 1 -I ${interface} ${vip%/*}"
cmd_local_arp_fix="$arping -c 1 -I ${interface} ${vip%/*}"vip_stop() {rc=0echo $?echo "$ssh ${ssh_options} -tt ${ssh_user}@${orig_master} \\"[ -n \"\$(${cmd_vip_chk})\" ] && ${cmd_vip_del} && \sudo -n ${ip2util} route flush cache || [ -z \"\$(${cmd_vip_chk})\" ]\""# ensure the vip is removed$ssh ${ssh_options} -tt ${ssh_user}@${orig_master} \"[ -n \"\$(${cmd_vip_chk})\" ] && ${cmd_vip_del} && \sudo -n ${ip2util} route flush cache || [ -z \"\$(${cmd_vip_chk})\" ]"rc=$?return $rc
}vip_start() {rc=0# ensure the vip is added# this command should exit with failure if we are unable to add the vip# if the vip already exists always exit 0 (whether or not we added it)echo "$ssh ${ssh_options} -tt ${ssh_user}@${new_master} \\"[ -z \"\$(${cmd_vip_chk})\" ] && ${cmd_vip_add} && ${cmd_arp_fix} || [ -n \"\$(${cmd_vip_chk})\" ]\""$ssh ${ssh_options} -tt ${ssh_user}@${new_master} \"[ -z \"\$(${cmd_vip_chk})\" ] && ${cmd_vip_add} && ${cmd_arp_fix} || [ -n \"\$(${cmd_vip_chk})\" ]"rc=$?echo "vip started"#$cmd_local_arp_fixreturn $rc
}vip_status() {$arping -c 1 -I ${interface} ${vip%/*}echo "$arping -c 1 -I ${interface} ${vip%/*}"if ping -c 1 -W 1 "$vip"; thenreturn 0elsereturn 1fi
}
if [[ $isitdead == 0 ]]; thenecho "Online failover"if vip_stop; thenif vip_start; thenecho "$vip is moved to $new_master."elseecho "Can't add $vip on $new_master!"exit 1fielseecho $rcecho "Can't remove the $vip from orig_master!"exit 1fi
elif [[ $isitdead == 1 ]]; thenecho "Master is dead, failover"# make sure the vip is not availableif vip_status; thenif vip_stop; thenecho "$vip is removed from orig_master."elseecho $rcecho "Couldn't remove $vip from orig_master."exit 1fifiif vip_start; thenecho "$vip is moved to $new_master."elseecho "Can't add $vip on $new_master!"exit 1fi
elseecho "Wrong argument, the master is dead or live?"fi

5、启动orch并检查拓扑

./start.sh$ orchestrator-client -c topology -i tidb-4.0-control:3306tidb-4-1:3306           [0s,ok,5.7.41-log,rw,ROW,>>,GTID,semi:master]
+ tidb-4-2:3306         [0s,ok,5.7.41-log,ro,ROW,>>,GTID,semi:master,semi:replica]
+ tidb-4.0-control:3306 [0s,ok,5.7.41-log,rw,ROW,>>,GTID,semi:master,semi:replica]

6、手动平滑切换

orchestrator-client -c graceful-master-takeover -a tidb-4.0-control:3306 -d tidb-4-1:3306

注: -a 为旧主 , -d为新主。切换后旧主需手动start slave。

7、强制关闭主库切换

确保旧主库已经提前配置vip,如没配置需执行:

/usr/sbin/ip address add 10.37.129.10 dev eth0

停止主库:

mysql > shutdown;

自动重新change master,并且飘移vip.

该场景下的问题:在主从延迟的情况下,从库会立即提升为主库,新主库有数据不一致的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BPI-M4 Berry 蓝牙调试

通过命令行连接蓝牙 1、首先,确定设备是否有蓝牙设备。输入hciconfig 如果镜像没有则使用下面命令进行安装sudo apt install bluez 2、可以看到有一个hci0的蓝牙设备,接下来就开始连接其他蓝牙设备sudo bluetoothctlpower on #打开蓝牙网卡 devices #列出蓝牙网卡已经配…

win10 php_imagick 扩展的安装

http://www.hzhcontrols.com/new-1729990.html本篇文章介绍的内容是关于win10_php_imagick 扩展的安装,现在分享给大家,有需要的朋友可以参考一下 PHP_imagick 这个扩展是我迄今为止遇到最难安装的扩展主要问题在于正确的文档太少, 今天终于是把这个扩展安装好了. 下面分享一…

BPI-M4 Berry以太网口和WiFi测试

以太网口测试 1、首先将网线的一端插入M4Berry的以太网接口,另一端接入路由器,并确保网络是畅通的。 2、系统启动后会通过DHCP自动给以太网卡分配IP地址。可以输入以下命令查看ip:ifconfig或者ip a 可以看到eth0获取到了10.1.1.207的ip地址 接下来,ping一下百度测试网络是否…

BPI-M4 Berry创建热点和设置静态IP

create_ap是一个帮助快速创建Linux上的WIFI热点的脚本,并且支持bridge和NAT模式,能够自动结合hostapd, dnsmasq和iptables完成WIFI热点的设置,避免了用户进行复杂的配置,github地址如下: https://github.com/oblique/create_ap 使用NET模式创建AP 1、首先使用 ls /sys/cla…

BPI-M4 Berry 远程连接开发板

使用SSH远程 1、需要使用到软件mobaxterm,请前往官网(https://mobaxterm.mobatek.net/download.html?spm=wolai.workspace.0.0.768c378fz9RNFi)进行下载 2、将开发板启动,并使用网线连接路由器,或者与你的电脑连接。 打开mobaxterm。点击左上角的"session"图标…

BPI-M4 Berry自动登陆及关闭桌面

3-1 BPI-M4 Berry自动登陆及关闭桌面此方法仅适用BPI-M4Berry的ubuntu和debian系统系统默认登录账号,密码当开发板启动完成,输入账号密码即可登录。由Banana Pi提供的镜像,默认账号/密码分别是root/bananapi和pi/bananapi。(输入密码时是不可见的,输入时注意别输入大写字母…

PART1-Oracle关系数据结构

2. Oracle关系数据结构 2.1. 表和表簇 2.1.1. 模式对象简介 数据库模式是数据结构的逻辑容器,这些数据结构称为模式对象。模式对象的例子有表和索引。模式对象是通过 SQL 创建和操作的。 一个数据库用户拥有密码和各种数据库权限。每个用户拥有一个与其同名的模式。模式包含了…

ros - slam - 电机控制之速度控制实验

前面说到通过控制对应的IO上的PWM占空比即可完成对电机速度的控制。关于PWM的介绍在ROS2硬件控制篇的舵机控制中已经介绍过了,所以我们知道通过改变PWM的占空比可以实现对输出电压的大小调节。占空比越大,输出电压越高;占空比越小,输出电压越低。接着我们通过一个实验来验证…

BPI-M4 Berry在windows系统下连接串口调试

串口线 我手头的串口线是这样的,包含如下四个针脚:VCC、GND、TX、RX。串口针脚说明: 其他的串口线可能不止四根线,而且杜邦线的颜色也不一定和我的一样。 请看清楚接口标注,按照下面介绍,将其接到板子上对应的接口板子串口GNDGNDTXDRXDRXDTXD VCC是电源,可以不用接。有的…

智慧旅游不再难,免费可视化工具一键搞定!

在过去,复杂的数据分析软件和昂贵的服务费用让许多中小旅游企业望而却步。而今,免费可视化工具彻底改变了这一局面,今天要说的工具就是山海鲸可视化。它不仅功能强大,而且免费使用,大大降低了数据可视化的门槛,即便是资源有限的旅游企业或是个人也能轻松上手。在这个数据…

平衡樹專題Treap

前言:题单在此:HL平衡树0701 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 平衡树 什么是平衡树? 首先我们需要知道二叉查找树的内容。 二叉查找树(BST:Binary Search Tree) 首先,他是一棵二叉树 其次,他的左子树的权值<根节点的权值<右子树的权值 最后,…

BUUCTF刷题:[DDCTF 2019]homebrew event loop

[DDCTF 2019]homebrew event loop 代码审计 from flask import Flask, session, request, Response import urllib import urllib.parseapp = Flask(__name__) app.secret_key = ********************* # censored url_prefix = /d5afe1f66147e857def FLAG():return *********…

PHP8.0正常,PHP7.2,PHP7.3报错Connection failed: SQLSTATE[HY000] [2054] The server re....

构建网站API接口的时候,使用了PDO进行数据库连接,原文如下 测试后发现,PHP8.0版本下,可以正常输出,但是PHP7.2和7.3则会报错:Connection failed: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client 经查验,发现因为所用的PHP7.…

H3C之防火墙拆堆叠升级

组网及说明两台防火墙F1070组成IRF,做冗余主备,并配置BFD MAD 进行分裂检测。业务在deviceA上跑,若deviceA上下行链路故障,则切换到deviceB。 现要求在业务中断最短的情况下,堆叠主备防火墙从域间策略的软件版本升级至安全策略的软件版本。现有版本为 Release R9345P14 升…

神经网络图像数据训练集成应用 | 可视化图像处理 | 可视化训练器

〇、写在前面 本应用基于开源UI框架PyDracula进行开发,除去最基本的UI框架外,所有功能的前后端实现都由我个人开发完成,但也有部分UI(如开关控件和进度条)是参考其他大佬的分享。 这个应用是我的本科毕业设计,但因为个人能力不足,姑且只能使用Python+PySide6开发。 开发…

【别再为可视化工具付费了!】智慧交通实时路况监测,这款免费可视化工具的功能超乎想象

在智慧交通领域,实时路况监测是确保城市交通高效运转的关键。山海鲸可视化作为一款免费的可视化工具,其功能非常强大。面对智慧交通的复杂需求,山海鲸可视化凭借其二三维融合、易用性、安全性和高质量的画面渲染等特色,成为智慧交通管理的不二选择。山海鲸可视化的二三维融…

数据增强mosaic实现

mosaic 是yolov4中提出的一个数据增强的方式,通过将4张图片拼接在一起送入训练,有效提升了模型的mapmosaic 是yolov4中提出的一个数据增强的方式,通过将4张图片拼接在一起送入训练,有效提升了模型的map。mosaic的优点包括如下:增加数据多样性,随机选取四张图像进行组合,…

springboot3(cloud 2022.0.0)整合seata1.7.1

一、第一步下载对应版本的seata服务 二、修改conf下的application.yml配置 注意:主要是连接nacos的一些配置:注册中心和服务发现的配置1 # Copyright 1999-2019 Seata.io Group.2 #3 # Licensed under the Apache License, Version 2.0 (the "License");4 # you…

Linux 文件系统扩展

今天发现/usr目录空间不够。需要扩展。之前没有处理过。今天试了一下调整。并且记录下来整个过程。 1 使用fdisk -l 查看磁盘信息2、使用fdisk /dev/sda 对磁盘进行分区操作完后,多了一个/dev/sda34 使用 pvcreate /dev/sda3创建物理卷5、使用vgextend ol /dev/sda3 扩展磁盘 …