Relative Content

K4NZDROID

category

「VMFS」- Virtual Machine File System

该笔记将整理并介绍与 VMFS 有关的内容。
与 VMFS 相关的工具
在 ESXi 中,默认 VMFS 文件系统。如果文件出现问题,则需要进行一些调试。对于文件系统调试,需要文件系统特定的工具。
vmfs-tools
功能概述: 该工具用于从非 ESXi 主机中访问 VMFS 文件系统。目前(11/18/2019, vmfs-tools (0.2.5-1))支持只读,写入还在开发。
命令列表: 包含如下命令(apt-file list vmfs-tools | grep ‘bin/’): 1)vmfs-fuse – 用于挂载 VMFS 文件系统。这个算是最常用的命令,可以挂载 VMFS 文件系统,并复制其中的文件。 2)debugvmfs – 用于调试 VMFS 文件系统。这是第二常用的命令,可以对 VMFS 进行调试。该命令与 debugfs 命令类似。 3)fsck.vmfs – 用于检查 VMFS 文件系统。该命令与 fsck 命令类似。 4)vmfs-lvm – 逻辑卷管理工具。(本人对 ESXi 的研究还不够深入,并不知道该命令如何使用)
在 Debian 中,通过命令 apt-get install vmfs-tools 进行安装。
在 Linux 下,挂载 VMFS 文件系统
How to Mount/Access VMware VMFS filesystems in Ubuntu Linux
通过 vmfs-tools 工具,然后使用其中的命令即可。比如使用vmfs-fuse /dev/sdb5 /mnt/vmfs命令挂载分区。
相关链接
VMware VMFS (Virtual Machine File System)[……]

READ MORE

「MySQL」- 表空间(Tablespace)

内容简介
在MySQL中,有多种表空间,不同的表空间也有不同的用途。下面简要介绍和说明一下这些表空间的概念。
# 通用表空间(General tablespace)
使用CREATE TABLESPACE语法创建的共享InnoDB表空间。「通用表空间」可以在MySQL数据目录之外创建,能够保存多个表,并支持所有行格式的表。 在MySQL 5.7.6中引入了「通用表空间」。
使用CREATE TABLE tbl_name … TABLESPACE [=] tablespace_name或ALTER TABLE tbl_name TABLESPACE [=] tablespace_name语法将表添加到「通用表空间」。
注意与「系统表空间」和「表文件表空间」对比。
# 系统表空间(System tablespace)
它是一个或多个数据文件(ibdata文件),他们包含:

与InnoDB相关的对象(InnoDB数据字典)的元数据,
「更改缓冲」,「双写缓冲」和可能的「撤消日志」的「存储区域」。

根据innodb_file_per_table设置(OFF),它还可能包含InnoDB表的表和索引数据。「系统表空间」中的数据和元数据适用于MySQL实例中的所有数据库。
在MySQL 5.6.7之前,默认设置是将所有InnoDB表和索引保留在「系统表空间内」,这通常会导致此文件变得非常大。由于系统表空间永远不会缩小,因此如果加载并删除大量临时数据,则可能会出现存储问题。
在MySQL 5.6.7及更高版本中,默认值为「表文件」模式,其中每个表及其关联的索引存储在单独的.ibd文件中。此默认设置使得使用依赖于Barracuda文件格式的InnoDB功能变得更加容易,例如表压缩,「页外列的高效存储」以及「大索引键前缀」(innodb_large_prefix)。
将所有表数据保存在「系统表空间」或「单独的.ibd文件」(在「通用表空间」中的.ibd文件)中通常会影响存储管理。MySQL Enterprise Backup产品可能会备份一小组大文件或许多较小的文件。在具有数千个表的系统上,处理数千个.ibd文件的文件系统操作可能会导致瓶颈。
在MySQL 5.6及更高版本中,innodb_undo_tablespaces定义了撤消日志的撤消表空间数。
# 表文件表空间(File-Per-Table Tablespaces)
由innodb_file_per_table选项控制的设置的通用名称,这是影响InnoDB文件存储、功能可用性、I/O特性方面的重要配置选项。
从MySQL 5.6.7开始,默认情况下启用innodb_file[……]

READ MORE

「DBMS」- Navicat | 数据库管理工具

认识
官网:https://navicat.com/en/products 文档:https://www.navicat.com/en/support/online-manual
组成
WIP
构建
WIP
性质
Structure Synchronization | https://www.navicat.com/manual/online_manual/en/navicat_16/win_manual/#/structure_sync Navicat allows you to compare and modify the table structures and other objects with detailed analytical process. In other words, Navicat compares objects between two databases and/or schemas and states the differential in structure.
Data Synchronization | https://www.navicat.com/manual/online_manual/en/navicat_16/win_manual/#/data_sync Navicat allows you to transfer data from one database and/or schema to another with detailed analytical process. In other words, Navicat provides the ability for data in different databases and/or schemas to be kept up-to-date so that each repository contains the same information.
Data Transfer | https://www.navicat.com/manual/online_manual/en/navicat_16/win_manual/#/data_transfer Navicat allows you to transfer objects from one database/schema to another, or to a sql file (RDBMS) or a Javascript file (MongoDB). The target database and/or schema can be on the same server as the source or on another serve[……]

READ MORE

「MySQL」- MySQL Workbench

认识
官网:https://www.mysql.com/products/workbench/ 文档:https://dev.mysql.com/doc/workbench/en/ 仓库:https://github.com/mysql/mysql-workbench
MySQL Workbench is a unified visual tool for database architects, developers, and DBAs. MySQL Workbench provides data modeling, SQL development, and comprehensive administration tools for server configuration, user administration, backup, and much more. MySQL Workbench is available on Windows, Linux and Mac OS X. 简而言之,MySQL Workbench 是个 DBMS 管理工具,能够协助我们进行 数据建模、SQL 开发、DBMS 管理、……
组成
WIP
构建
版本 6.3.9
配置、构建、安装
从 Linux 发行版的源中直接安装

# Ubuntu 16.04 TLS
# mysql-workbench:主程序;
# mysql-workbench-data:相关的数据、SQL、脚本文件;
apt-get install mysql-workbench mysql-workbench-data

如果发行版的源里没有的话,可以直接到官网上下载已经打包好的安装包;
老样子,依旧是从源码开始安装。老规矩,看 INSTALL 文件;
下载、解压、进入源码目录

#!/bin/sh

wget https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community-6.3.9-src.tar.gz
tar -xf mysql-workbench-community-6.3.9-src.tar.gz
cd mysql-workbench-community-6.3.9-src

安装依赖

# – 移除 iodbc
apt-get remove iodbc

# – 安装依赖
apt-get install build-essential cmake cmake-data autoconf automake pkg-config libtool libzip-dev libxml2[……]

READ MORE

「MySQL」- FEDERATED

将远程数据表(来自与其他数据库实例)挂载到本地数据表。此时,访问本地数据表等同于访问远程数据表。
启用/禁用 FEDERATED 引擎
MySQL 5.6
启用:命令行使用 –federated 以启用。
禁用:命令行使用 –skip-federated 以禁用,或者配置文件使用 skip-federated 以禁用。
参考文献
MySQL 5.6 Reference Manual/Alternative Storage Engines/The FEDERATED Storage Engine[……]

READ MORE

「Redis」- 数据类型及操作

String、List、Set、Hash、Sorted set、Bitmap(Bit array, Simply bitmap)、HyperLogLog、Stream
String
是最基本的类型。
结构:KEY VALUE
命令:GET, SET
List
是简单的字符串列表,按照插入顺序排序。可以向列表“头部”或者列表“尾部”添加新元素。
结构:KEY VALUE [VALUE …]
命令:LPUSH, LRANGE
Set
是String类型的无序集合,通过哈希表实现,不存在重复元素。
结构:KEY VALUE0 [VALUE1 …]
命令:SADD, SMEMBERS
值不能够重复。如果元素已经存在,不会再次添加。
Sorted set
也是String类型的集合,不存在重复元素。每个元素都有一个分数,以实现排序。
结构:KEY SCORE MEMBER [SCORE MEMBER …]
命令:ZADD, ZRANGEBYSCORE
值不能够重复。如果元素已经存在,不会再次添加。
Hash
是键值对集合。
结构:KEY FIELD VALUE [FIELD VALUE …]
命令:HMSET, HGET
Bitmap(Simply bitmap, Bit array)
是基于String类型的数据类型,但是有自己的语义。
使用特殊命令,可以像处理“位数组(bit array)”一样处理字符串值:设置和清除各个位、统计所有设置为1的位、查找第一个设置或未设置的位等等。
HyperLogLog
也是基于String类型的数据类型,但是有自己的语义。
这是一种概率数据结构,用于估计集合的基数。 它比看起来更简单…参阅手册的「HyperLogLog」部分。
Stream
“仅追加”的“类MAP的条目”的集合,它们提供抽象日志数据类型。参考「Introduction to Redis Streams」中的详细介绍。
参考文献
Redis 数据类型 Data types An introduction to Redis data types and abstractions[……]

READ MORE

「KUBERNETES-OBJECTS」- 使用 kubernetes 对象

问题描述
与 Kubernetes Object 以及 API 进行基本交互;
每个对象都有各自的字段;
Kubernetes API Server 管理的 spec 描述的对象应有的状态,而 status 保存了真实的状态;
该笔记将记录:与 Kubernetes Object(比如 Service、Pod、Deployment 等等)相关的内容;
6.1. Discovering API Endpoints of the Kubernetes API Server
找出 API 服务器上的各个访问点:
(1)代理访问:kubectl proxy –port=8001 –api-prefix=/ (2)直接访问:直接访问 api server 服务;
使用curl localhost:8001/foobar可以查看所有该 API 上的访问点;
查看 API 是会看到不同的「访问点」,例如:

/api/v1
/apis/apps
/apis/authentication.k8s.io
/apis/authorization.k8s.io
/apis/autoscaling
/apis/batch

每个「访问点」都对应一个「APIGroup」。通过一个「APIGroup」内,包含很多「Object」,比如 Pod、Service、Ingress 等等。「Object」通过「版本控制」(比如,v1beta1、v1beta2 等等)来显示对象的成熟度;
「Object」所属的「APIGroup」是「apiVersion」的一部分;
https://kubernetes.io/docs/reference/
如何查看所有可以使用的对象?
方法一、kubectl api-resoureces

# 查看全部资源对象
kubectl api-resources

# 查看属于命名空间的资源
kubectl api-resources –namespaced=true

# 查看属于非命名空间的资源
kubectl api-resources –namespaced=false

方法二、the API Reference guide
Kubernetes/Reference
Kubernetes API v1.18/API OVERVIEW Kubernetes API v1.12/API OVERVIEW
如何指定 apiVerison 属性?
简单的方法
我们以 1.18 为例,我们需要定义 Deployment 资源,按如下步骤进行操作[……]

READ MORE

「MySQL基准测试(Benchmark)」

主题:MySQL基准测试的相关内容及可用的工具。

什么是基准测试
为什么要做基准测试
MySQL基准测试中要注意的问题
基准测试方案
MySQL基准测试工具及使用方法

什么是基准测试
benchmark:基准,参照; 标准检查程序; 水准标。
在计算中,基准是运行计算机程序、一组程序或其他操作的行为,以便通过对其进行一些标准测试和试验来评估对象的相对性能。 “基准”一词也主要用于精心设计的基准程序本身。
基准测试通常与评估计算机硬件的性能特征相关联,例如CPU的浮点运算性能。但是有些技术也适用于软件。例如,针对编译器或数据库管理系统,来运行软件基准测试。
基准测试提供了一种比较不同子系统在不同芯片/系统架构上的性能的方法。
测试套件是一种旨在评估软件正确性的系统。
为什么要做基准测试
基准测试用于模拟组件或系统上特定类型的工作负载。基准测试可以解决一下问题,或者更多:

掌握系统:掌握系统的行为,在某些压力下系统会有什么表现。
问题重现:重现系统中的某些问题,从而可以解决这些问题。
发现瓶颈:模拟高负载,可以找出系统瓶颈所在。
新环境性能:新硬件的可靠性测试,测试系统在新的环境中的表现。
规划业务:评估系统能支持的业务能力。评估所需要加入的硬件容量、带宽等。
环境适应能力:测试出系统对不同数据分布情况的处理,或者随机并发下的表现。
证明:某个优化操作是否真的有效。硬件的升级、系统的升级或者软件的升级是否达到了预期的效果。

MySQL基准测试中要注意的问题
基准测试并不是那么容易就完成的,通常要进行若干轮的迭代,才能达到精准和有用。而且解释基准测试的数据也是比较复杂的。有如下的问题:

基准测试并不是真实的压力测试,基准测试的压力相对比较简单。但是,基准测试却可以针对某个问题进行分析,而压力测试中的变化因素过多,不利于问题分析。
基准测试要求尽快的完成,所以为了完成基准测试,我们会在给系统非常大的压力。
基准测试工具也会影响到准确性。
不能根据基准测试的结果做简单的推断。基准测试只是针对某个点进行了评估,但是随着系统的增长,系统的各个方面都在增长,所以不能根据某个基准测试结果做简单的推断。
基准测试要简单直接,以处理问题为主。再说一次:基准测试不是压力测试,基准测试只是为了发现某一个点。
数据集:为了结果能够尽可能的准确,测试所用的数据集应该尽可能的接近真实的数据集,如果可以,应该采用生产环境的数据快照。

基准测试方案
集成式(full-stack)
对整个系统进行测试。之所以要对整个系统做基准测试[……]

READ MORE

「MySQL」- mysql | 命令行工具

认识
官网: 文档:https://dev.mysql.com/doc/refman/8.4/en/mysql.html 仓库:
组成
WIP
构建
WIP
性质
–force | Continue even if an SQL error occurs

# 05/25/2025 TDSQL-C MySQL, mysql 8.0 使用 –force 选项,再遇到某些 /*! SET … 语句时,仍旧会退出。或是我们操作的问题。

–one-database, -o | Ignore statements except those that occur while the default database is the one named on the command line.

# 05/26/2025 当使用该选项时,需要其行为模式。
https://dev.mysql.com/doc/refman/8.4/en/mysql-command-options.html

应用
当导入数据时,忽略 INSERT / SET 语句
DeepSeek / 通过 mysql 导入数据时,如何忽略所有 insert 语句 DeepSeek / 通过 mysql 导入数据时,如何忽略所有 /*! 语句
我们暂 05/25/2025 未找到通过命令行选项忽略 INSERT 语句的方法。针对其他大部分方法,多是预处理 .sql 文件,移除 INSERT 语句:

sed ‘/^INSERT/d’ your_file.sql | mysql -u username -p database_name
grep -v “^INSERT” your_file.sql | mysql -u username -p database_name

grep -v “^INSERT” your_file.sql > your_file.sql.without-insert
mysql -u username -p < your_file.sql.without-insert

针对某些数据库产品(例如,TDSQL-C MySQL、……),当导入数据时,针对 /*! SET … 语句,亦将导致错误。我们使用相似的方法处理:

grep -v -E “^\/\*\!” your_file.sql > your_file.sql.without-set
mysql -u username -p < your_file.sql.without-set

当导入数据时,仅导入[……]

READ MORE

「MySQL」- 检查复制状态

问题描述
在管理复制的过程中,确保复制正在进行是最常见的任务,并且要保证主从复制没有错误。
执行 SHOW SLAVE STATUS \G 语句可以查看同步(复制)状态,该语句必须在从库上执行。
但是该语句它会输出一大堆的内容,这些内容会经常让人摸不着头绪,不知所云。
本文将揭开面纱,详细介绍输出中各个字段的含义,以及它们所代表的信息。
关键字段
Slave_IO_State – 从库的当前状态
Section 8.14.6, “Replication Slave I/O Thread States” Section 8.14.7, “Replication Slave SQL Thread States”
Checking master version – 在建立与主站的连接之后,非常短暂地发生的状态。 Connecting to master – 线程正在尝试连接到主服务器。 Queueing master event to the relay log – 线程已读取事件,并将其复制到 Relay Log ,以便SQL线程可以处理它。 Reconnecting after a failed binlog dump request – 线程正在尝试重新连接到主服务器。 Reconnecting after a failed master event read – 线程正在尝试重新连接到主服务器。 当再次建立连接时,状态变为:Waiting for master to send event Registering slave on master – 建立与主站连接后非常短暂的状态。 Requesting binlog dump – 在建立与主站的连接之后,非常短暂地发生的状态。线程从请求的 Bin Log 文件名和位置开始向主机发送对其 Bin Log 内容的请求。 Waiting for master to send event – 线程已连接到主服务器并正在等待 Bin Log 事件到达。 如果主站空闲,这可能会持续很长时间。 如果等待持续slave_net_timeout秒,则发生超时。 此时,线程认为连接被破坏并尝试重新连接。 Waiting for master update – 在Connecting to master之前的初始状态 Waiting for slave mutex on exit – 线程停止时短暂发生的状态。 Waiting for the slave SQL thread to free enough relay log space – 您正在使用非零的relay_log_space_limit值,并且 Relay Log 已经增长到足以使其组合大小超过此值。 「I/O线[……]

READ MORE

「HTTP」- 头部字段 | 学习笔记

Header 信息包含的 Response Header 和 Entity Header 详细,具体字段可以参考 RFC2916,这里不再详细列举;
常用请求头部字段 | Request Header
Accept:客户端可接受的 MIME 类型 Accept-Encoding:客户端能够进行解码的数据编码方式,比如 gzip Accept-Language:客户端所希望的语言种类,当服务器能够提供一种以上的语言版本时需要 Authorization:授权信息,通常出现在对服务器发送的 WWW-Authenticate 头的应答中 Content-Type:表示数据属于什么 MIME 类型。默认为 text/plain 纯文本格式 Content-Length:表示请求消息正文的长度 Host:客户端要访问的主机名 Referer:客户端通过该字段表示自己从哪个资源来访问服务器的,该字段包含一个 URL,表示从该 URL 代表的页面出发访问当前请求的页面 User-Agent:该字段包含发出请求的用户信息,客户端类型 Cookie:用于客户端保存服务器返回的数据,通常保存用户身份信息 Connection:表示处理完该次请求后是否断开连接
常见响应头部字段 | Response Header
Allow:服务器支持哪些请求方法(如 GET、POST 等) Content-Encoding:文档的编码(Encode)方法。只有在解码之后,才可以得到 Content-Type 头指定的内容类型

Content-Encoding: gzip | 表示资源通过 gzip 压缩,客户端将解压后才能得到内容 |
How to know if a site is gzipped?
Content-Length:表示内容长度。只有当客户端使用持久 HTTP 连接时才需要该字段
Content-Type:表示数据属于什么 MIME 类型。默认为 text/plain 纯文本格式
Date:当前的 GMT 时间
Location:该字段配合 302 状态码使用,用于重定向到一个新 URI 地址。表示客户端应当去寻找并提取资源的位置
Server:表示服务器的类型
Set-Cookie:设置和页面关联的 Cookie
Transfer-Encoding:数据的传送格式
WWW-Authenticate:表示客户应该在 Authorization 头中提供什么类型的授权信息,在包含 401(Unauthorized)状态行的应答中这个字段是必需的

设置 HTTP 响应头往往和状态码结合起来。例如,表示“位置已经改变”的状态代码通常伴随着一个 Location 头,而 401(Un[……]

READ MORE

「Redis」- Amazon ElastiCache | Redis OSS

认识
官网:https://aws.amazon.com/elasticache/redis/ 文档:https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/WhatIs.html 仓库:
简而言之,Redis OSS 是 AWS 提供的 Redis 服务。
组成
构造
性质
应用
公网访问
根据我们了解到的知识,ElastiCache Redis OSS 暂时 05/13/2025 未支持直接公网访问。
需要通过其他方式来暴露 Redis 服务 | Accessing your ElastiCache cluster or replication group | https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/accessing-elasticache.html | 在文档中,其演示通过 NAT 来暴露 Redis 服务。
针对 EKS 环境,

可在集群中部署 RedisInsight 服务,通过 Web 访问。
可在集群中部署 Bitnami/nginx 服务,通过 streamServerBlock 进行转发。[……]

READ MORE

「Atlas」- 数据库中间件

认识
官网:https://github.com/Qihoo360/Atlas 文档:https://github.com/Qihoo360/Atlas 仓库:https://github.com/Qihoo360/Atlas
Atlas is a MySQL protocol-based database middleware project developed and maintained by infrastructure team of the Web platform Department in QIHU 360 SOFTWARE CO. LIMITED(NYSE:QIHU). It fixed lots of bugs and added lot of new functions on the basis of MySQL-Proxy 0.8.2. Currently the project has been widely applied in QIHU, many MySQL business has connected to the Atlas platform. The number of read and write requests forwarded by Atlas has reached billions. 简而言之,Atlas 功能类似于 MySQL Proxy 组件,目的是为了实现高可用、大规模的数据库集群,其具有很多功能,例如,读写分离、负载均衡、故障转移、数据分片、……
# 05/24/2025 GitHub 最终提交为 5082aa0 · 7 years ago
构建
关于日志轮转
在 GitHub/Wiki、test.cnf 中都没有对日志轮转的描述,因此可能无法通过 reload、signal 等等方式进行日志轮转。
但是还有其他方式进行日志轮转:

支持前台方式运行(daemon = false),可以配合 systemd 使用;
Atlas 源自 MySQL Proxy,虽然 Atlas 文档没有叙述,但是 MySQL Proxy 支持 –log-use-syslog 选项;

应用
采用奇虎360的atlas+keepalived实现数据库读写分离代码如何实现 简书/Atlas Qihoo360/Atlas[……]

READ MORE

「FreeRADIUS」- 报文处理

The processing of a request depends on the following four pieces of information:

The data associated with the request,
the contents of the individual processing section, ⇒ The contents of the request processing section are Unlang statements
an action table associated with each processing section, and
the processing of the algorithm itself.

请求类型 | Request
request | Contains attributes that were received in the request
reply | Contains the attributes that will be sent in any reply
control | Contains “internal” attributes that are used by the server as a temporary storage area. None of these attributes are sent in a request or reply
proxy-request | Contains the attributes that are sent in any proxied request. Its contents are taken from the “request” list before any proxying is performed
proxy-reply | Contains the attributes that have been received from a home server and is used to re-initialize the “reply” list
coa | Valid only for Access-Request and Accounting-Request packets. Used to create a CoA-Request packet that is sent to the NAS. The word “disconnect” can be used instead, causing the server to send a Disconnect-Request packet to[……]

READ MORE

「MySQL」- 安装 | 升级

问题描述
这原本应该很简单,执行apt-get install mysql-server命令就可以了。但是,实际情况可能会复杂一些: 1)我们目前使用的发行版是 Debian 8,源里只有 MySQL-5.5; 2)但系统中已安装的某些包依赖于 MySQL 5.5(比如 mailutils),这就导致在系统中已安装某些 MySQL 相关包的文件(比如 /etc/mysql 配置 ); 3)如果直接使用源码编译或安装已编译的二进制包,由于上面提到的已经存在的配置文件会导致 MySQL 的配置和管理变得混乱。我们可能还要在配置文件里覆盖发行版的 MySQL 的配置;
针对上面的这些原因,我们决定还是想办法从发行版的源里安装 MySQL 5.7,而不再使用源码去自己编译,也不使用预编译的二进制包;
硬件要求
MySQL 5.7 Minimum Server Requirements How do you determine the hardware needed for a server?
Oracle doesn’t publish such specs because it depends so much on how the server will be used, and on the OS.
See MySQL Memory Allocation for some pointers.
You could probably get by with 512MB or less, but I would not want to.
One core is usually adequate. — MySQL won’t use more than one core per connection, so having multiple cores is not needed until you have a lot of traffic.
MySQL has done just fine with simple spinning disks; RAID and/or SSDs are nice, but not a requirement.
However, if you are going with less than 4GB of RAM, you will need to crank down the tunables. Swapping is really bad for performance.
版本选择
通常由需求方决定,我们则是根据需求进行部署。
服务部署
数据库配置 | Configuration
该笔记将记录:与 MySQL 配置相关的内容,及相[……]

READ MORE

「Proxy Profile」

设置代理服务器,默认所有的请求都将通过代理服务器。通过配置,可以使某些请求地址不通过代理服务器。 支持的协议有:SOCKS4/5,HTTP(s)

上图的配置为Proxy Profile配置。
Proxy Servers表示对不同的URL方案使用指定的协议及代理服务器:

Schema(default)Protocol(DIRECT):表示默认情况下直连;
Schema(http://%EF%BC%89Protocol%EF%BC%88SOCKS5%EF%BC%89%EF%BC%9A%E5%AF%B9http%E8%AF%B7%E6%B1%82%E4%BD%BF%E7%94%A8socks5%E5%8D%8F%E8%AE%AE%EF%BC%8C%E5%9C%B0%E5%9D%80%E5%8F%8A%E7%AB%AF%E5%8F%A3%E4%B8%BA127.0.0.1:24098;
Schema(https://%EF%BC%89Protocol%EF%BC%88SOCKS5%EF%BC%89%EF%BC%9A%E5%AF%B9https%E8%AF%B7%E6%B1%82%E4%BD%BF%E7%94%A8socks5%E5%8D%8F%E8%AE%AE%EF%BC%8C%E5%9C%B0%E5%9D%80%E5%8F%8A%E7%AB%AF%E5%8F%A3%E4%B8%BA127.0.0.1:24098;
Schema(ftp://%EF%BC%89Protocol%EF%BC%88use default):对ftp请求使用默认配置,这里的默认配置为第一条:Schema(default)Protocol(DIRECT);

Bypass List表示不通过代理的请求,有关的语法规则参考chrome.proxy#bypass_list
左侧Apply changes按钮的绿色表示有未保存的修改内容。
使用过程中遇到的问题
该配置模式在使用过程中遇到的最大的问题就是要向Bypass List中添加大量的服务器地址。[……]

READ MORE

「MySQL」- ERROR 1205

问题描述
执行 INSERT 语句时,产生如下错误:

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

从字面上看是因为达到了innodb_lock_wait_timeout设置的超时时间。
但是为什么会产生这个问题呢,总不能盲目的去修改这个超时时间吧?
系统环境

SELECT @@version;
5.6.14-log

SHOW VARIABLES LIKE ‘%autocommit%’;
autocommit=ON

SHOW VARIABLES LIKE ‘innodb_lock_wait_timeout’;
innodb_lock_wait_timeout=50

问题原因
对于 InnoDB 引擎,所有的用户活动都会触发一个内部的事务。如果启用了autocommit模式,则每个 SQL 语句自己形成一个事务。默认情况下,每个连接的autocommit都是启动的,可以通过SHOW VARIABLES LIKE ‘%autocommit%’;语句查看当前连接是否为autocommit=ON的状态。在autocommit=ON状态下,如果语句执行成功,那会被自动提交。如果失败,提交或者回滚取决于错误类型,参考「Section 14.21.4, “InnoDB Error Handling”」手册。
超时的事务,尝试锁定表,但是该表被另一个进程持有,并且超时变量设置的比较短,所以它显示错误。
可以通过 SHOW ENGINE INNODB STATUS \G 命令查看更多状态,通过 SHOW OPEN TABLES WHERE in_use > 0; 查看被锁的表,最后通过 SHOW FULL PROCESSLIST 命令查看。
解决办法
现在,可以结束线程,或等待完成它。
参考文献
14.7.2.2 autocommit, Commit, and Rollback Getting “Lock wait timeout exceeded; try restarting transaction” even though I’m not using a transaction How can I show mysql locks? How to debug Lock wait timeout exceeded on MySQL?[……]

READ MORE

「EC2」- AWS | 云服务器 | Elastic Compute Cloud

认识
官网:https://docs.aws.amazon.com/ec2 文档:https://aws.amazon.com/ec2 仓库:
Amazon EC2 —— Secure and resizable compute capacity for virtually any workload. 简而言之,EC2 是 AWS 推出的云计算虚拟机产品。
构建
性能测试及调优
网络延迟测试

通过 ping 命令,ping ec2.[region-code].amazonaws.com,例如,测试香港地区 ping ec2.ap-east-1.amazonaws.com 延迟
通过 MTR 命令,mtr ec2.[region].amazonaws.com
通过 AWS Global Infrastructure Map 查看
通过 https://ping.pe/ 工具,其能够测试国内到特定站点的延迟;
EC2 Reachability Test | http://ec2-reachability.amazonaws.com/

参考
DeepSeek / 如何测试国内到亚马逊各区域的网络延迟[……]

READ MORE

「NGINX-INGRESS-CONTROLLER」- 常见问题处理

开启 gzip 特性
gzip in gke with nginx-ingress
针对 Ingress Controller 服务,开启 gzip 特性
use-gzip: true; | https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#use-gzip gzip-types: “*”; | https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#gzip-types
修改 ConfigMap 资源,增加如上配置:

kubectl edit configmap -n ingress-nginx ingress-nginx-controller

针对特定 Ingress 资源,开启 gzip 特性
Activate gzip support #179

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
kubernetes.io/ingress.class: “nginx”
nginx.org/server-snippets: “gzip on;”

配置 GeoIP 模块
How to block a country in Nginx ingress? : kubernetes
# 07/03/2022 我们暂时放弃通过 GeoIP 来实现安全访问控制,而采用其他方案。所以,我们这里仅简单记录配置思路,而具体配置可能存在错误;
NGINX Ingress Controller 支持 MaxMind GeoIP2 数据库,使用流程如下:

申请 MaxMind 的许可 | IP Geolocation and Online Fraud Prevention | MaxMind
调整 NGINX Ingress Controller 的配置,以使用许可 | NGINX Ingress Controller/ConfigMap/use-geoip2
通过 Annotation 进行相关配置:


metadata:
annotations:
nginx.ingress.kubernetes.io/server-snippet: |
# server block
map $g[……]

READ MORE

「English」- Words

facial 面部的 Note facial features: note distinguishable facial features
forgetful 健忘的
firm 公司
fate 致命 fatal 致命的
forward look forward to 期待 盼望 We look forward to seeing you again.
feed feed on 以……为食 All animals including men feed on plants or other animals.
feasible:adjective 可行的 可行, 切实, 可能的
E.g. /iːˈdʒiː/ stands for “exempli gratia,” meaning “for example,” and is used to provide specific examples that fall under a more general category.

The company provides a number of benefits (e.g., yearly bonuses and generous sick pay) that make it an attractive place to work.

I.e. stands for “id est,” meaning “that is,” and is used to clarify or rephrase a statement to make it more precise or specific.

Please contact us during normal working hours (i.e., between 9 a.m. and 5 p.m. on a weekday).

in-house
DeepSeek / 解释 in-house 含义
in-house 是个常用术语,通常作形容词或副词使用。含义是“机构内部的”“在内部完成的”或“由内部人员/团队处理的”。其核心是强调某事在组织或公司内部进行,而非外包给外部机构。多用于商业、科技、法律等领域,强调对资源或流程的自主控制权。例如,公司可能选择 in-house development 以保护知识产权,或通过 in-house meetings 讨论机密项目。
含义

内部的、自有的
指资源、团队、服务或活动由公司或组织自身提供,而非依赖外部供应商。
– 例:*We have an in-house design team.*(我们有自己的内部设计团队。[……]

READ MORE

「COLUMNS」

COLUMNS,该表提供了表中列的信息。

INFORMATION_SCHEMA Name
SHOW Name
Remarks
说明

TABLE_SCHEMA
 
 
所在的数据库的库名

TABLE_NAME
 
 
所在的表的表名

TABLE_CATALOG
 
def
该列的值总是def

PRIVILEGES
Privileges
MySQL extension
权限(SELECT)

ORDINAL_POSITION
 
see notes
列在表中的顺序

NUMERIC_SCALE
Type
 
小数点后的位数

NUMERIC_PRECISION
Type
 
数字值的精度

IS_NULLABLE
Null
 
是否可以为空

GENERATION_EXPRESSION
 
MySQL extension
生成列时使用的表达式。GENERATION_EXPRESSION对于生成的列是非空的,并显示出用于用于计算列值的表达式

EXTRA
Extra
MySQL extension
附加数据(比如:auto_increment)

DATETIME_PRECISION
Type
 
日期精度

DATA_TYPE
Type
 
数据类型(TINYINT、INT、TIMESTAMP)

COLUMN_TYPE
Type
MySQL extension
列的类型(比如:`tinyint(3) unsigned’、`int(10) unsigned’)

COLUMN_NAME
Field
 
列名

COLUMN[……]

READ MORE

「MySQL」- 监控复制延迟

使用 pt-heartbeat 监控复制延迟
第一步、更新心跳数据(连接主库)
执行连接主库的命令,用于在主库特定表中插入心跳数据:

pt-heartbeat –create-table –database “percona” –table “hearbeat” \
–ask-pass ‘h=master-01,P=3306,u=root’ \
–update

第二步、检测心跳数据(连接从库)
执行连接从库的命令,用于检测同步延迟:

pt-heartbeat –create-table –database “percona” –table “hearbeat” \
–ask-pass ‘h=slave-01,P=3306,u=root’ \
–monitor

参考文献
Percona Toolkit/pt-heartbeat[……]

READ MORE

「KUBERNETES-OBJECTS」- Ingress

描述
Ingress 是个 API 对象,管理外部(集群外部)对内部服务的访问,暴露“从集群外到集群内部服务的”HTTP 与 HTTPS 路由;
原理
关于 Ingress 网络 | Understanding kubernetes networking: ingress Studying the Kubernetes Ingress system
Ingress Controller
注意与 Ingress Controller 进行区分,Ingress Controller 负责执行 Ingress 资源的定义。Ingress Controller 类似于我们平时作为反向代理存在的 Nginx 服务,而 Ingress 则像 Nginx 配置;
该笔记将记录:与 Ingress 资源有关的内容(但不包含 Ingress Controller 组件部署相关内容),以及常见问题的处理;
Ingress 可以由不同的控制器来实现,通常具有不同的配置。每个 Ingress 应指定一个类,即对 IngressClass 资源的引用,该资源包含其他配置,包括应实现该类的控制器的名称。
应用
pathType
Each path in an Ingress is required to have a corresponding path type. Paths that do not include an explicit pathType will fail validation.
There are three supported path types:

ImplementationSpecific: With this path type, matching is up to the IngressClass. Implementations can treat this as a separate pathType or treat it identically to Prefix or Exact path types.

Exact: Matches the URL path exactly and with case sensitivity.

Prefix: Matches based on a URL path prefix split by /. Matching is case sensitive and done on a path element by element basis. A path element refers to the list of labels in the path[……]

READ MORE

「MySQL」- 表 | Table

文档:https://dev.mysql.com/doc/refman/5.7/en/create-table.html
CREATE TABLE
主题:介绍 MySQL 中的 CREATE TABLE 的语法;
吐槽一下自己,下面是我能写出的最复杂的 CREATE TABLE 语句了:

CREATE TABLE DEMO(
ID INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(16) NOT NULL DEFAULT ” COMMENT ‘Username’,
…….
)ENGINE=INNODB DEFAULT CHARSET UTF8

语法
这个的语法功能可是很长的,远比想想中多得多,而平时用的却是基础中的基础:
语句结构概览

权限
CREATE TABLE 时必须有 CREATE 权限;
默认情况下,表创建在当前数据库中,存储引擎为 InnoDB。表已经存在,或者没有选择当前数据库,或者数据不存在则报错;
在硬盘中,CREATE TABLE 创建的文件
MySQL 通过.frm 表格式(定义)文件表示每张表,默认使位于 data 目录的。所以.frm 文件使共有的。但是存储引擎可能会创建其他文件;
对于 MyISAM 存储引擎 会在硬盘上创建三个文件:

tbl_name.frm 表格式定义文件;
tbl_name.MYD 数据文件
tbl_name.MYI 索引文件

对于 InnoDB 存储引擎 对于在独立表文件表空间中创建的 InnoDB 表或者一般表空间,表数据和关联的索引存储在 ibd 文件中。当在系统表空间中创建了 InnoDB 表,表数据和索引存储在表示系统表空间的 ibdata* 文件中。innodb_file_per_table 选项控制了在默认情况下是创建独立表文件表空间还是系统表空间。TABLESPACE 选项可以无视 innodb_file_per_table 选项的设置,控制表存放在独立表文件表空间、一般表空间、系统表空间;
其他存储引擎 对于其他存储引擎创建的文件,查看:https://dev.mysql.com/doc/refman/5.7/en/storage-engines.html 如果表名中含有特殊字符,表文件名称会包含这些字符的编码版本,查看:https://dev.mysql.com/doc/refman/5.7/en/identifier-mapping.html
ibdata 文件 文件名为 ibdata1、ibdata2…的文件集合组成了 InnoD[……]

READ MORE

「MySQL」- 外键约束(语句、语法)

################# 准备

  create table t_group (
   id int not null,
   name varchar(30),
   primary key (id)
);
并插入两条记录
  insert into t_group values (1, ‘Group1’);
insert into t_group values (2, ‘Group2’);

################ 演示

(三种外键约束模式)

1、级联(cascade)方式:(从表中的列也会删除)

  级联方式
  create table t_user (
   d int not null,
   name varchar(30),
   groupid int,
   primary key (id),
   foreign key (groupid) references t_group(id) on delete cascade on update cascade
  );
  参照完整性测试:(从表中的外键必须在主表中存在)
  insert into t_user values (1, ‘qianxin’, 1); #可以插入
  insert into t_user values (2, ‘yiyu’, 2); #可以插入
insert into t_user values (3, ‘dai’, 3); #错误,无法插入,外键3不存在,与参照完整性约束不符

  约束方式测试
  insert into t_user values (1, ‘qianxin’, 1);
  insert into t_user values (2, ‘yiyu’, 2);
  insert into t_user values (3, ‘dai’, 2);
  delete from t_group where id=2; #导致t_user中的2、3记录级联删除
  update t_group set id=2 where id=1; #导致t_user中的1记录的groupid级联修改为2

2、置空(set null)方式(主表中的记录被删除,从表则会被设置为null)

  置空方式
  create table t_user (
   id int not null,
   name varchar(30),
   groupid int,
   primary key (id),
   foreign key (groupid) references t_group(id) on delete set null on update set null
  );
参照完整性测试
inse[……]

READ MORE

「Gitea」- 基于 Git 的代码托管服务 | 自建 | Git-based

认识
官网:https://about.gitea.com/ 文档:https://docs.gitea.com/ 仓库:https://github.com/go-gitea/gitea/
Gitea is a community fork of the popular self-hosted Git service Gogs. We’re a growing group of former Gogs users and contributors who found the single-maintainer management model of Gogs frustrating and thus decided to make an effort to build a more open and faster development model. 简而言之,Gitea 类似于 GitLab 是个开源的 DevOps 平台,基于 Git 进行代码托管。
组成
配置文件 app.ini
/path/to/gitea/conf/app.ini
Configuration Cheat Sheet | https://docs.gitea.com/administration/config-cheat-sheet
构建
v1.23.8 | on Kubernetes | with Helm Chart
How to change SSh git clone url? https://docs.gitea.com/installation/install-on-kubernetes
Giteat v1.23.8, Kubernetes v1.30.0-tke.9, Helm Chart version 12.0.0
我们使用自建的 MySQL 数据库,针对 Giteat v1.23.8 版本,我们使用 MySQL 8.0.37 版本。原因在于,

我们 PostgreSQL 经验较少,其官方 Chart 不处理数据库服务升级。
复用已有 MySQL 数据库实例,降低资源消耗。

数据库初始化操作 | Database Preparation / MySQL | https://docs.gitea.com/installation/database-prep

CREATE USER ‘gitea’@’%’ IDENTIFIED BY ‘WOJsfAYKFHOXSW0’;
CREATE DATABASE gitea CHARACTER SET ‘utf8mb4’ COLLATE ‘utf8mb4_bin’;
GRANT ALL PRIVILEGES[……]

READ MORE

「KUBERNETES」- 通过源码编译

13.1. Compiling from Source
我们需要安装 Go,并需要从 GitHub Kubernetes 的源代码。我们将介绍如何编译整个 Kubernetes kubectl 等具体的组件。
如何从源代码制作自己的 Kubernetes 可执行文件,而不是下载官方发行的可执行文件(请参阅 2.4 节),或第三方的产品?
克隆 Kubernetes Git 代码仓库,并编译源代码。
如果在 Docker 的主机上,可以使用顶层 Makefile 的 quick-release 目标,如下所示:

# git clone https://github.com/kubernetes/kubernetes
# cd kubernetes
# make quick-release

!!!基于 Docker Docker 服务可以使用的内存足够。对于 MacOS,通过 Docker for Mac 选项增加分配给 Docker 的内存。
编译好的可执行文件保存在_output/release-stages 目录中,完整的包再_output/release-tars 中。
如果有设置好的 Golang,则可以使用 Makefile 的 release 目标:

# git clone https: //github. com/kubernetes/kubernetes
# cd kubernetes
# make

编译好的可执行文件保存在_output/bin 目录中。
具体的开发者指南:https://gtubcom/kubernetes/community/tree//contributors/devel
13.2. Compiling a Specific Component
如何从源代码编译特定 Kubernetes 组件而不是所有的组件,例如,编译客户端 kubectl1?
使用 make kubectl
顶层 Makefile 中包含了用于编译各个组件的的目标。例如,编译 kubectl kubeadm hyperkube 的命令如下所示:

make kubectl
make kubeadm
make hypercube

编译好的可执行文件保存在_output/bin 目录中。[……]

READ MORE

「REDIS」- 集群及高可用性

# TODO Redis 集群架设和使用、Cluster、监控 Redis 3.2.1集群搭建
Redis 的集群模式两种: 1)主从模式: 2)集群模式:
#2 集群模式
集群模式是为了解决内存瓶颈的问题,将数据分布在不同的Redis节点上。
一个 Redis 集群包含 16384 个哈希槽,集群中的每个节点负责处理一部分哈希槽:

节点 A 负责处理 0 号至 5500 号哈希槽
节点 B 负责处理 5501 号至 11000 号哈希槽
节点 C 负责处理 11001 号至 16384 号哈希槽

使用这种做法:

添加节点时,可以将某些槽移动到新节点就可以了
删除节点时,将某些槽从节点中移出就可以了

即使是5主5从,节点也是16384个槽,而不是“主节点增加,槽数也增加”。分槽是要平均的分配给主节点。将KEY分布在哪个槽中是根据“CRC16%16384“得出的
主节点要部署在不同的主机上。当主节点故障时,从节点会继续承担写的任务。
集群节点之间通过GOSSIP协议通讯。
当前Redis集群不支持NAT和IP、端口重新映射的环境。
这种模式适用于数据量巨大的场景,数据量较少时使用「主从复制 + Sentinel」即可。
相关链接
Redis Cluster Specification
中间件(Middleware)
twemproxy
GitHub/twitter/twemproxy
Codis
GitHub/CodisLabs/codis
由豌豆夹出品。「redis cluster及codis之间该如何选择?」
参考文献
Redis各种模式总结 redis的三种集群方式[……]

READ MORE

「KUBERNETES-INGRESS-CONTROLLER」- AWS Load Balancer Controller

认识
官网:https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/ 文档:https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html 项目:https://github.com/kubernetes-sigs/aws-load-balancer-controller
A Kubernetes controller for Elastic Load Balancers. This project was formerly known as “AWS ALB Ingress Controller”, we rebranded it to be “AWS Load Balancer Controller”. 简而言之,其为 EKS 集群的组件,负责处理 Ingress、Service 资源。
组成
WIP
构建
通过 Helm 安装:https://docs.aws.amazon.com/eks/latest/userguide/lbc-helm.html
性质
可以直接把 Ingress 发布为 ALB,可以一个 ALB 关联多个 Ingress,跨 namespace 都行
里面有两种分配模式,一种是静态的,就是先创建 ALB,然后 SREVICE 去映射这个 ALB; 另一种是动态的,就是每个 SERVICE 创建的时候自动拉起一个 ALB;具体哪种模式看您们的业务需求,通常建议静态的。
https://github.com/kubernetes-sigs/aws-load-balancer-controller
配置了 aws-load-balancer-controller,然后 LoadBalancer 类型是直接使用 AWS 的 NLB,如果是 Ingress 就是 ALB,都要配置很多的 annotation
https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.8/how-it-works/
https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html
Ingress Annotations
https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.9/guide/ingress/annotations/[……]

READ MORE

「NACOS」- 服务发现 | 配置管理 | Dynamic Naming and Configuration Service

认识
官网:https://nacos.io/ 文档:https://nacos.io/docs/latest/what-is-nacos/ 仓库:https://github.com/alibaba/nacos
Nacos /nɑ:kəʊs/ 是个更易于构建云原生应用的动态服务发现、配置管理、服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。简而言之,Nacos 是个平台,提供微服务相关的功能,例如,配置管理、服务发现、……[……]

READ MORE