【Mysql高可用集群-双主双活-myql+keeplived】

Mysql高可用集群-双主双活-myql+keeplived

该教程在centos7系统下安装测试, 文档由本人亲自部署搭建并一步一步编写,如有不合理的地方,请帮忙及时提出更正。

一、介绍

问题案例: 当应用服务开发过程中使用了mysql-1连接信息,在打包发布后,数据库连接信息已经固定,当数据库mysql-1出现异常时,需要人工干预先将应用服务停止,再将应用服务的mysql连接信息改为mysql-2,再在启动应用服务器,比较繁琐,且中断业务,修复故障时间延长,严重时会造成灾难性的后果。

解决方案: Mysql原生的主从复制功能+keepalived 实现双主双活互备,具体如下:
MySQL双活是指两台mysql服务器mysql-1、mysql-2都为master主节点服务器,同时又是对方的slave从节点,每个数据库都可作为主数据库使用,并将对数据库操作的数据时会同步至另外一台mysql服务中;见架构图

在这里插入图片描述
说明:keepalived通过虚拟一个VIP(mysql-3)并代理mysql1,mysql2提供数据库服务,实现高可用。在相同集群内发送组播包,master主通过VRRP协议发送组播包,告诉从主的状态。当master停止时,VIP会漂移到到另外一台服务器,完成了mysql数据库切换。如:当mysql-3实际代理mysql-1时,mysql-1服务出现故障后,keepalived通过自身机制,自动将mysql-2作为实际代理主服务器,不需要人工干预去修改mysql配置信息,业务无感知的情况下完成了切换,实现了高可用。

二、准备工作

1.两台centos7 linux服务器

mysql-1:192.168.1.128

mysql-2:192.168.1.129

2.mysql安装包

版本:mysql-5.7.36-el7-x86_64.tar.gz

下载地址:https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.36-el7-x86_64.tar.gz

3.keepalived安装包

版本:keepalived-2.2.7.tar.gz

下载地址:https://www.keepalived.org/software/keepalived-2.2.7.tar.gz

三、安装mysql

1.在128、129两台服务器根据《linux安装mysql服务-两种安装方式教程》按方式一安装好mysql应用。
2.修改128服务器/etc/my.cnf配置文件,没有的话可自行创建,配置如下:
[client]
#客户端连接端口
port=3306
#客户端连接sock
socket=/opt/mysql/5.7.36/log/mysql.socka
#客户端编码
default-character-set=utf8[mysqld]
#mysql服务端口
port=3306
#安装目录
basedir=/opt/mysql/5.7.36/
#数据存放目录
datadir=//opt/mysql/5.7.36/data
#sock文件地址
socket=/opt/mysql/5.7.36/log/mysql.sock
#错误日志存放地址
log-error=/opt/mysql/5.7.36/log/mysql.log
#pid文件地址
pid-file=/opt/mysql/5.7.36/log/mysql.pid#下面内容为mysq主备时配置,单mysql部署护理下面配置
#server-id 多台服务器时,此表示需要唯一
server-id=1
#主从同步bin-log日志文件名
log-bin=mysql-bin
#主从同步时,需要同步的数据库,多个数据库写多行binlog_do_db配置
binlog_do_db=test_db
#主从同步时,不需要同步的数据库,多个数据库写多行binlog_ignore_db配置
#binlog_ignore_db=mysql
#binlog_ignore_db=information_schema
#binlog_ignore_db=sys
#binlog_ignore_db=performance_schema
#主从同步方式
binlog_format=row
#服务端编码
character-set-server=utf8!includedir /etc/my.cnf.d

3.修改129服务器/etc/my.cnf配置文件,只有server-id不同,为2配置如下

[client]
#客户端连接端口
port=3306
#客户端连接sock
socket=/opt/mysql/5.7.36/log/mysql.socka
#客户端编码
default-character-set=utf8[mysqld]
#mysql服务端口
port=3306
#安装目录
basedir=/opt/mysql/5.7.36
#数据存放目录
datadir=/opt/mysql/5.7.36/data
#sock文件地址
socket=/opt/mysql/5.7.36/log/mysql.sock
#错误日志存放地址
log-error=/opt/mysql/5.7.36/log/mysql.log
#pid文件地址
pid-file=/opt/mysql/5.7.36/log/mysql.pid#下面内容为mysq主备时配置,单mysql部署护理下面配置
#server-id 多台服务器时,此表示需要唯一
server-id=2
#主从同步bin-log日志文件名
log-bin=mysql-bin
#主从同步时,需要同步的数据库,多个数据库写多行binlog_do_db配置
binlog_do_db=test_db
#主从同步时,不需要同步的数据库,多个数据库写多行binlog_ignore_db配置
#binlog_ignore_db=mysql
#binlog_ignore_db=information_schema
#binlog_ignore_db=sys
#binlog_ignore_db=performance_schema
#主从同步方式
binlog_format=row
#服务端编码
character-set-server=utf8!includedir /etc/my.cnf.d

4.重启128,129的mysql服务

[root@128 mysql5.7]# systemctl stop mysqld
[root@128 mysql5.7]# systemctl start mysqld

四、mysql数据库双主双从配置

1.连接128服务器mysql,并创建主从同步账户slavebak,并查看master状态,记录下file、psition值,配置129mysql从库时使用

[root@128 ~]# /opt/mysql/5.7.36/bin/mysql -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> grant replication slave on *.* to slavebak@'%' identified by 'slavebak';
mysql> flush privileges;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |     1287 | test_db      |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)
mysql>

2.连接129服务器,使用slavebak用户远程登录128mysql,测试连接是否正常。

[root@129 ~]# /opt/mysql/5.7.36/bin/mysql -h192.168.222.128 -uslavebak -pslavebak
mysql: [Warning] Using a password on the command line interface can be insecure.
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> exit;
[root@129 ~]# 

3.在129服务器用root连接本服务器mysql,并配置128的主库信息

[root@129 ~]# /opt/mysql/5.7.36/bin/mysql -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> change master to -> master_host='192.168.1.128',            #128服务器mysql ip-> master_port=3306,                         #128服务器mysql端口-> master_user='slavebak',                   #128服务器mysql从库同步用户-> master_password='slavebak',               #128服务器mysql从库同步用户密码-> master_log_file='mysql-bin.000002',       #前面记录的128服务mysql file值-> master_log_pos=1287;                      #前面记录的128服务mysql psition值
Query OK, 0 rows affected, 2 warnings (0.02 sec)mysql> start slave;            #启动从库配置

4.查看129从库配置是否成功Slave_IO_Running、Slave_SQL_Running都为yes则成功

mysql> show slave status;
mysql> show slave status \G;
*************************** 1. row ***************************......Slave_IO_Running:  Yes                    #此值为yes配置成功Slave_SQL_Running: Yes                    #此值为yes配置i成功......
1 row in set (0.01 sec)

5.在129服务器mysql创建主从同步账户slavebak,查看master状态,记录下file、psition值

mysql> grant replication slave on *.* to slavebak@'%' identified by 'slavebak';
mysql> flush privileges;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |     848  | test_db      |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)

6.连接128服务器并使用root用户连接本服务器mysql,配置129的主库信息

[root@128 ~]# /opt/mysql/5.7.36/bin/mysql -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> change master to -> master_host='192.168.1.129',            #129服务器mysql ip-> master_port=3306,                         #129服务器mysql端口-> master_user='slavebak',                   #129服务器mysql从库同步用户-> master_password='slavebak',               #129服务器mysql从库同步用户密码-> master_log_file='mysql-bin.000002',       #前面记录的129服务mysql file值-> master_log_pos=848;                       #前面记录的129服务mysql psition值
Query OK, 0 rows affected, 2 warnings (0.02 sec)mysql> start slave;            #启动从库配置

7.查看128从库配置是否成功Slave_IO_Running、Slave_SQL_Running都为yes则成功

mysql> show slave status;
mysql> show slave status \G;
*************************** 1. row ***************************......Slave_IO_Running:  Yes                    #此值为yes配置成功Slave_SQL_Running: Yes                    #此值为yes配置i成功......
1 row in set (0.01 sec)

到这里,128服务器,129服务器双主双从配置完成。

五、MySQL双主双从测试

1.连接128服务器,使用root用户连接本机mysql,并创建test_db数据库,t_test表,并插入一条数据id=1,name=‘zhangsan’
[root@128 ~]# /opt/mysql/5.7.36/bin/mysql -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> create database test_db;
Query OK, 1 row affected (0.00 sec)mysql> use test_db;
mysql> create table t_test(id int primary key, name varchar(30));
Query OK, 0 row affected (0.01 sec)
mysql> insert into t_test values (1, 'zhangsan');
Query OK, 1 row affected (0.01 sec)
mysql> select * from t_test;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
+----+----------+
1 rows in set (0.00 sec)
2.连接129服务器,使用root用户连接mysql,查看test_db数据库、t_test表以及数据是否同步,并插入id=2,name=‘lisi’
[root@129 ~]# /opt/mysql/5.7.36/bin/mysql -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_db            |        #test_db数据库已同步过来
+--------------------+
5 rows in set (0.01 sec)mysql> use test_db;
mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| t_test            |        #t_test表已同步过来
+-------------------+
1 row in set (0.01 sec)mysql> select * from t_test;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |            #数据已同步过来
+----+----------+
1 rows in set (0.00 sec)mysql> insert into t_test values (2, 'lisi');
Query OK, 1 row affected (0.01 sec)
3.在128服务器查看id=2,name=“lisi” 是否同步
[root@128 ~]# /opt/mysql/5.7.36/bin/mysql -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> select * from t_test;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |            #lisi数据已同步
+----+----------+
1 rows in set (0.00 sec)

到这里,数据库双主双从测试完成。

六、keepalived安装

128、129两台服务器安装步骤相同,配置文件不同,下面有介绍。

1.安装相关依赖包,并下载keepalived安装包,解压,配置,编译
[root@128 ~]# cd /opt
[root@128 opt]# yum -y install gcc openssl-devel popt-devel psmisc
[root@128 opt]# wget https://www.keepalived.org/software/keepalived-2.2.7.tar.gz
[root@128 opt]# tar -zxvf keepalived-2.2.7.tar.gz
[root@128 opt]# cd keepalived-2.2.7
[root@128 keepalived-2.2.7]# ./configure --prefix=/opt/keepalived-2.2.7
[root@128 keepalived-2.2.7]# make && make install
2.将文件复制到对应目录下
[root@128 keepalived-2.2.7]# mkdir /etc/keepalived
[root@128 keepalived-2.2.7]# cp etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf
[root@128 keepalived-2.2.7]# cp  keepalived-2.2.7/keepalived/etc/init.d/keepalived /etc/init.d/
[root@128 keepalived-2.2.7]# cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@128 keepalived-2.2.7]# cp sbin/keepalived /usr/sbin/
3.新建/etc/keepalived/shutdown.sh文件,这个脚本作用是当keepalived检测到本机的mysql停止服务后,将keepalived线程停止服务,另外一台keepalived就升级为主节点,达到切换的目的
#!/bin/bash
#该脚本是在mysql服务出现异常时,将keepalived应用停止,从而使虚拟vip主机自动连接到另一台mysql上
killall keepalived
4.使用ifconfig命令查看下网卡名称,本机网卡名称为ens33
[root@128 keepalived-2.2.7]ifconfig

在这里插入图片描述

5.修改128服务器/etc/keepalived/keepalived.conf配置文件,内容如下:
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_MASTERvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTER#interface为刚才查到的本机网卡名称interface ens33#同一网段中同一组virtual_router_id值相同。不同组virtual_router_id值唯一。#如server-1、server-2为一组,virtual_router_id=51#server-3、server-4为一组,则virtual_router_id不能为51virtual_router_id 51#字数越大,优先级越高,master必须大于backuppriority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {#该ip为虚拟出来的vip地址192.168.1.130}
}#配置virtual_server  ip为上面配置的虚拟vip地址  端口为mysql的端口
virtual_server 192.168.1.130 3306 {delay_loop 6lb_algo rrlb_kind NATpersistence_timeout 50protocol TCP#real_server 该配置为实际物理机ip地址 以及实际物理机mysql端口real_server 192.168.1.128 3306 {#当该ip 端口连接异常时,执行该脚本notify_down /etc/keepalived/shutdown.shTCP_CHECK {#实际物理机ip地址connect_ip 192.168.1.128#实际物理机port端口connect_port 3306connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}
6.修改129服务器/etc/keepalived/keepalived.conf配置文件,与128的配置不同地方为real_server、connect_ip 两个配置,需要配置对应的实际主机ip,详细内容如下:
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_MASTERvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state BACKUP#interface为刚才查到的本机网卡名称interface ens33#同一网段中同一组virtual_router_id值相同。不同组virtual_router_id值唯一。#如server-1、server-2为一组,virtual_router_id=51#server-3、server-4为一组,则virtual_router_id不能为51virtual_router_id 51#字数越大,优先级越高,master必须大于backuppriority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {#该ip为虚拟出来的vip地址192.168.1.130}
}#配置virtual_server  ip为上面配置的虚拟vip地址  端口为mysql的端口
virtual_server 192.168.1.130 3306 {delay_loop 6lb_algo rrlb_kind NATpersistence_timeout 50protocol TCP#real_server 该配置为实际物理机ip地址 以及实际物理机mysql端口real_server 192.168.1.129 3306 {#当该ip 端口连接异常时,执行该脚本notify_down /etc/keepalived/shutdown.shTCP_CHECK {#实际物理机ip地址connect_ip 192.168.1.129#实际物理机port端口connect_port 3306connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}

详细配置参考《Keepalived 安装和配置详解》

7.将128、129服务器keepalived加入开机自启,并启动服务
[root@128 keepalived-2.2.7]# systemctl enable keepalived
[root@128 keepalived-2.2.7]# systemctl start keepalived
8.启动后keepalived状态为:active(running)则正常
[root@128 keepalived-2.2.7]# systemctl status keepalived

在这里插入图片描述

9.启动后相当于虚拟出一个vip 192.168.1.130,可使用远程连接工具,连接该服务器,连接进去后使用ifconfig查看该虚拟vip实际上使用的实体服务器是129服务器。
10.将128服务器的keepalived应用停止,再次查看130服务ifconfig,可以看到,130服务器自动将实体机ip漂移到了129服务器上, 在129上面运行hostname -I
[root@128 keepalived-2.2.7]# hostname -I
192.168.1.129 192.168.1.130

七、mysql双主双活+keepalived高可用整体测试

1.首先将128、129两台服务器mysql、keepalived应用全部启动,然后用mysql连接工具连接keepalived虚拟出来的192.168.1.130服务器

在这里插入图片描述

2.再130数据库test_db库t_test表插入id=3,name=‘hello’

在这里插入图片描述

3.此时可以查看128、129数据库,数据已同步

在这里插入图片描述

4.通过ssh工具连接130服务器ifconfig实际使用的物理机为128,所以128服务器mysql为主数据库。

在这里插入图片描述

5.此时手动将128服务器mysql停止,keepalived检测到128服务3306端口连接失败,会执行/etc/keepalived/shutdown.sh脚本,将128服务器keepalived应用结束。
[root@128 keepalived-2.2.7]# systemctl stop mysqld
6.此时再ssh工具连接130服务下,ifconfig查看,发现已经实际将物理机由128转移到129服务器上

在这里插入图片描述

7.再使用mysql连接工具连接130的mysql,插入一条数据id=4,name=‘zhaoli’,测试是否将数据存入129服务器mysql中

在这里插入图片描述

8.查看129服务器mysql数据,数据已同步,说明keepalived搭建高可用成功,当128服务器mysql出现问题后keepalived自动漂移IP到实体机129服务器上,从而使129服务器mysql作为主数据库。

在这里插入图片描述

9.此时再启动128服务器mysql、keepalived应用
[root@128 keepalived-2.2.7]# systemctl start mysqld
10.查看128数据库t_test表数据,数据已同步成功。

在这里插入图片描述

11.如果漂移失败,可能是virtual_router_id在同网段内重复导致。可执行命令查看是否有其他ip使用
[root@128 keepalived-2.2.7]# tcpdump -i 网卡名 vrrp -n |grep virtual_router_id值
#例如:
[root@128 keepalived-2.2.7]# tcpdump -i eno16777736 vrrp -n |grep 51

mysql双主双活+keepalived高可用部署并测试完成。

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

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

相关文章

mynet开源库

1.介绍 个人实现的c开源网络库. 2.软件架构 1.结构图 2.基于event的自动分发机制 3.多优先级分发队列,延迟分发队列 内部event服务于通知机制的优先级为0,外部event优先级为1. 当集中处理分发的event_callback时&#xff0c…

Flutter如何集成到已有iOS工程上

大家好,我是咕噜铁蛋,今天我将和大家分享一个实用的技术教程——如何将Flutter集成到已有的iOS工程中。Flutter是Google推出的一款开源的移动UI框架,它允许开发者使用Dart语言来开发高性能、美观的原生应用,并支持iOS和Android两大…

聚观早报 | 百度文心一言上线新功能;腾势Z9GT将发布

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 4月08日消息 百度文心一言上线新功能 腾势Z9GT将发布 华为将举办鸿蒙春季沟通会 苹果与Shutterstock达成协议 O…

LeetCode初级算法书Java题解日常更新

LeetCode初级算法高效题解(含思路注释) 文章目录 LeetCode初级算法高效题解(含思路注释)前言一、数组1.删除排序数组中的重复项2.买卖股票的最佳时机 II3.旋转数组4.存在重复元素 总结 前言 决定用四个月过一下算法 一、数组 1.…

threejs 组-层级模型 | 本地坐标和世界坐标 | 局部坐标系和世界坐标系 | 本地矩阵.materix和世界矩阵.matrixWorld

文章目录 组- THREE.Group递归遍历模型树结构object3D.traverse()object3D.add (object.Object3D..) 添加对象 和 object3D.remove(object.Object3D..) 移除对象 局部坐标系和世界坐标系辅助坐标器 AxesHelper 本地坐标和世界坐标 - 基于世界坐标系的位置本地坐标与世界坐标的理…

Redis7(二)数据类型及其用法

一、概述 命令不区分大小写&#xff0c;key区分大小写 数据类型针对value String List Set Hash ZSet bitmap GEO HyperLogLog Stream bitfield 二、String <K,V> 1、设值/取值 getrange key index1 index2 getrange key 0 -1//获取所有的值 SETRANGE KEY_N…

XC7A35T-2FGG484 嵌入式FPGA现场可编程门阵列 Xilinx

XC7A35T-2FGG484 是一款由Xilinx&#xff08;赛灵思&#xff09;制造的FPGA&#xff08;现场可编程门阵列&#xff09;芯片 以下是XC7A35T-2FGG484 的主要参数&#xff1a; 1. 系列&#xff1a;Artix-7 2. 逻辑单元数量&#xff1a;33280个 3. 工艺技术&#xff1a;28nm 4. …

Linux 5.10 Pstore 功能测试

目录 简介环境配置内核配置参考备注 简介 Pstore(Persistent store support)是用于系统发生oops或panic时&#xff0c;自动保存内核log buffer中的日志。随着功能不断完善&#xff0c;Duo S使用Linux 5.10已经支持保存console日志、ftrace消息和用户空间日志的收集&#xff0c…

STC89C52学习笔记(三)

STC89C52学习笔记&#xff08;三&#xff09; 综述&#xff1a;本文讲述了通过51单片机控制LED闪烁、流水灯、按键控制LED亮灭、按键控制LED实现二进制、按键控制LED左右移。 一、LED 1.LED闪烁 1&#xff09;LED电路原理 LED采用共阳极&#xff0c;当LED另一端为低电平时…

前端二维码工具小程序产品使用说明书

一、产品概述 前端二维码工具小程序是一款便捷实用的二维码生成与识别工具&#xff0c;通过本小程序&#xff0c;用户可以轻松根据文本或链接生成二维码&#xff0c;并支持扫一扫功能识别二维码内容&#xff0c;同时提供复制识别内容的功能。此外&#xff0c;本小程序还具备美…

登录信息失效后多次请求提示合并成一次

在通常的业务场景中经常会出现进入页面之后一次性发送好多个请求,如果登录信息失效,那就会出现很多提示 类似这种多个提示的,看起来不美观,希望改成可以把在短时间内出现相同的错误信息,只提示一次,其他的就不提示了 实现思路 通常业务中每一个请求的code都是有具体的意思,可以…

网络安全 | 什么是区块链?

关注WX&#xff1a;CodingTechWork 概述 定义 区块链是一个共享的、不可篡改的账本&#xff0c;旨在促进业务网络中的交易记录和资产跟踪流程。资产可以是有形的&#xff08;如房屋、汽车、现金、土地&#xff09;&#xff0c;也可以是无形的&#xff08;如知识产权、专利、…

【记录】LangChain|llama 2速通版

官方教程非常长&#xff0c;我看了很认可&#xff0c;但是看完了之后呢就需要一些整理得当的笔记让我自己能更快地找到需求。所以有了这篇文章。【写给自己看的&#xff0c;里面半句废话的解释都没有&#xff0c;如果看不懂的话直接看官方教程再看我的】 我是不打算一开始就用…

RabbitMQ基本使用及企业开发中注意事项

目录 一、基本使用 二、使用注意事项 1. 生产者重连机制 - 保证mq服务是通的 2. 生产者确认机制 - 回调机制 3. MQ的可靠性 4. Lazy Queue模式 5. 消费者确认机制 一、基本使用 部署完RabbitMQ有两种使用方式&#xff1a; 网页客户端Java代码 MQ组成部分&#xff1a;…

Verilog语法——按位取反“~“和位宽扩展的优先级

前言 先说结论&#xff0c;如下图所示&#xff0c;在Verilog中“~ ”按位取反的优先级是最高的&#xff0c;但是在等式计算时&#xff0c;有时候会遇到位宽扩展&#xff0c;此时需要注意的是位宽扩展的优先级高于“~”。 验证 仿真代码&#xff0c;下面代码验证的是“~”按位取…

ChernoCPP 2

视频链接&#xff1a;【62】【Cherno C】【中字】C的线程_哔哩哔哩_bilibili 参考文章&#xff1a;TheChernoCppTutorial_the cherno-CSDN博客 Cherno的C教学视频笔记&#xff08;已完结&#xff09; - 知乎 (zhihu.com) C 的线程 #include<iostream> #include<th…

【攻防世界】catcat-new

首先进入环境&#xff0c;这是一个介绍猫的网站&#xff1a; 网站的URL没有发现问题&#xff0c;使用dirsearch对网站进行扫描&#xff0c;看是否有可以访问的窗口&#xff1a; 发现 /admin 可以访问&#xff0c;我们尝试访问&#xff1a; /admin中没有flag。我们返回初始界面&…

Redis数据库的简介、部署及常用命令

关系数据库与非关系型数据 关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。sQL语句&#xff08;标准数据查询语言&#xff09;就是一种基于关系型数据库的语言&#xff0c…

LangChain - OpenGPTs

文章目录 MessageGraph 消息图认知架构AssistantsRAGChatBot 持久化配置新模型新工具astream_events总结 关键链接&#xff1a; OpenGPT GitHub 存储库YouTube 上的 OpenGPT 演练LangGraph&#xff1a;Python、JS 两个多月前&#xff0c;在 OpenAI 开发日之后&#xff0c;我们…

项目管理中的估算活动资源

在项目管理中&#xff0c;资源估算是一项至关重要的任务。正确地估算活动资源可以确保项目的顺利进行&#xff0c;避免资源浪费和不必要的延误。以下是对项目管理中常见的活动资源类型的详细分析。 一、人力资源 人力资源是项目管理中最基本的资源之一。它包括项目团队成员的…