「APACHE-GROOVY」- 基于 Java 的动态编程语言 | APACHE-GROOVY
认识
官网:https://groovy-lang.org/index.html 文档:https://groovy-lang.org/single-page-documentation.html 仓库:https://github.com/apache/groovy
Apache Groovy 是一种基于 Java 平台的动态编程语言。简而言之,Apache Groovy 是种脚本语言,运行在 JVM 上。
组成
命令行程序
groovy |
Running Groovy from the commandline | https://docs.groovy-lang.org/latest/html/documentation/tools-groovy.html
groovy -cp ./src/ ./src/path/to/foo.groovy
性质
它支持面向对象编程、函数式编程、元编程和动态类型语言的特性。 Apache Groovy 可以与 Java 语言无缝集成,可以直接调用 Java 类库,也可以被 Java 代码调用。 Apache Groovy 的语法简洁、易读、易写,它的语法和 Java 语言相似,但却更加灵活,可以更快地开发出高效的应用程序。 Apache Groovy 还支持闭包、类型推断、运行时元编程等高级特性,使得编写代码更加方便快捷。
应用
由于其良好的兼容性和易用性,Apache Groovy 被广泛应用于 Web 开发、测试自动化、数据分析等领域。
Jenkins Pipeline
在学些 Jenkins Pipeline 语法时,我们接触到 Groovy 语言。我们决定对 Groovy 进行简单学习,以编写功能强大的 Pipeline Shared Libraries 库。该笔记将记录:我们学习 Apache Groovy 而产生学习笔记,以及常见问题而解决办法(常用的代码段),以解决 Jenkins Pipeline 中相关问题为核心。[……]
「SwitchyOmega」- 浏览器代理切换工具 | 快速轻松地管理和切换多个代理
认识
官网:https://github.com/FelisCatus/SwitchyOmega 文档:https://github.com/FelisCatus/SwitchyOmega 仓库:https://github.com/FelisCatus/SwitchyOmega
SwitchyOmega by Felis Catus,是 Chrome、Firefox 浏览器上的一个用于配置代理的扩展,可以轻松快捷地管理和切换多个代理设置。但是,SwitchyOmega 并不提供代理、VPN、其他的网络服务。简而言之,SwitchyOmega 的主要作用就是配置浏览器里的请求哪些使用代理、哪些不使用代理以及使用哪个代理、不使用哪个代理。
组成
WIP
构建
SwitchyOmega 为 SwitchySharp 的升级版,免费并且开源,代码托管于 GitHub 上。
on Mozilla Firefox
SwitchyOmega 现在可以在 Firefox 57+ 上安装使用,但目前还是实验版。 The Chromium Projects/Network Settings
火狐浏览器可以直接到 Mozilla Add-Ons 上搜索安装:https://addons.mozilla.org/en-US/firefox/addon/switchyomega/ 或者到 GitHub 上下载安装包(.xpi 文件):https://github.com/FelisCatus/SwitchyOmega/releases
on Google Chrome
Chrome 或者 Chromium 系的浏览器可以到
或 Chrome Web Store 搜索安装 | https://chromewebstore.google.com/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif
或 GitHub 上下载 .crx 安装包 | https://github.com/FelisCatus/SwitchyOmega/releases
直接使用源码编译安装,到 GitHub 获取 SwitchOmega 源码,构建方法参考源码目录下的 README.md 下的Building the project部分。
该插件位于 chrome web store 中,想要安装该插件,需要先设法访问 chrome web store 站点。而设法访问 chrome web store 页面,又需要使用该插件(或者类似的插件)。进而陷入了循环。该笔记将介绍如何解决该问题,在 Chrome 中安装 Proxy Sw[……]
「MariaDB」- 解决无密码就可以登录的问题
解决无密码就可以登录的问题
解决 MariaDB 无密码就可以登录的问题 Mysql (MariaDB 10.0.29): Set root password, but still can login without asking password?
MariaDB 在安装结束之后,在命令行输入 mysql -uroot 可以直接登录到数据库中,无需输入密码。这是因为 MariaDB 中 root 账户的 plugin 设置导致的,mysql.user 表中 root 帐号的 plugin 字段默认的值为 unix_socket,无需密码就可以登录。
如果你先指用密码进行认证,需要执行下面的 SQL 语句:
SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘MyNewPass’);
UPDATE mysql.user SET plugin = ” WHERE user = ‘root’ AND host = ‘localhost’;
FLUSH PRIVILEGES;
MariaDB
CREATE USER – MariaDB Knowledge Base
— 创建用户
CREATE USER foo2@test IDENTIFIED BY ‘password’;
— 如果用户不存在,则进行创建用户
CREATE USER IF NOT EXISTS foo2@test IDENTIFIED BY ‘password’;
— 创建用户,如果用户存在,先删除用户
CREATE OR REPLACE USER foo2@test IDENTIFIED BY ‘password’;
— 与上一条语句等价
DROP USER IF EXISTS foo2@test;
CREATE USER foo2@test IDENTIFIED BY ‘password’;[……]
「NETWORKING」- socat
socat – Multipurpose relay
http://www.dest-unreach.org/socat/ socat: Linux / UNIX TCP Port Forwarder – nixCraft
端口转发:socat TCP-LISTEN:80,fork TCP:202.54.1.5:80
应用
转发多个端口
针对 socat 本身,其并不支持多个端口转发。需要通过其他方式辅助实现:https://askubuntu.com/questions/521953[……]
「KUBERNETES-OBJECTS」- Secret
描述
Secret 是包含少量敏感数据(例如密码、令牌或密钥)的对象。此类信息可能会被放入 Pod 规范或容器镜像中。使用 Secret 意味着您不需要在应用程序代码中包含机密数据。
官方文档:https://kubernetes.io/docs/concepts/configuration/secret/
常见类型
Opaque 1)类型为 Opaque 的证书,该类型证书中保存非结构化数据,能够保存任意键值数据; 2)它与结构化数据不同,比如用于拉取 Docker 镜像的 Secret 需要使用.dockerconfigjson作为键,并且值为特定数据结构;
应用
创建 Secret 实例(增)
kubectl create secret 能够创建三种类型的 Secret: 1)docker-registry:可以用于注册 Docker 2)generic:它可以根据本地文件、目录或者常量值生成 secret,(你需要自行进行 base64 编码) 3)tls:用于创建 Ingress 的 SSL 证书;
从其他 Namespace 同步 Secret 资源
当处理 Cert Manager 相关问题时,我们了解到通过如下组件,能够在命名空间之间同步资源: 1)reflector with support for auto secret reflection 2)kubed with its secret syncing feature 3)kubernetes-replicator secret replication
该处仅做记录,日后遇到相关问题时,我们将进一步学习相关内容及技术;
修改 Secret 内容(改)
当修改 Secret 内容后,挂载到 Pod 内的 Secret 是否会同步更新
If I update a secret, does it automatically gets updated to all resources in which it is volume mounted? Kubernetes/Secrets
When a secret currently consumed in a volume is updated, projected keys are eventually updated as well. The kubelet checks whether the mounted secret is fresh on every periodic sync.
Note: A container using a Secret as a subPath volume mount will not receive Secre[……]
「SSH」- 密钥管理
应用
密钥管理
ssh-keygen -t ed25519 -C “your_email@example.com” # -t 密钥类型 -C 注释
ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub
-y This option will read a private OpenSSH format file and print an OpenSSH public key to stdout.
清理 SSH 公钥
这绝对是常见现象:在 ~/.ssh/authorized_keys 中,存放着大量的公钥,而且没有注释,完全不知道这些公钥的用途。很多时候这些公钥并不是服务使用的,而是方便连接服务器而添加的。
我们今天的任务就是“清理”这些公钥,仅在服务器中保留必要的公钥信息。当然这和 JumpServer 没有关系,但是我们是借助 JumpServer 来完成该任务(使用其中的 Jobcenter/Batch command 功能,终究是在使用 Ansible 的功能)。
该笔记将记录:如何清理掉服务器上的 SSH 公钥,以及相关问题处理。
我们应该先找到服务器中被使用的公钥,这能够通过 SSH 登录日志来过滤,参考 Find out which ssh key used to access an account 笔记。
但是我们不想搞这么麻烦(偷懒),所以我们备份原来的 SSH KEY,然后将新的、仅有的、期望的公钥写入文件。这里没有什么技巧,仅是利用了 ~/.ssh/authorized_keys2 文件来“备份”,将新的密钥写入 ~/.ssh/authorized_keys 文件文件。
sudo -u root cp -v /root/.ssh/authorized_keys /root/.ssh/authorized_keys2
echo ‘public key’ | sudo -i tee /root/.ssh/authorized_keys
注意事项: 1)受 SSH 版本限制,在 CentOS 7.x 中,无法使用 ~/.ssh/authorized_keys2 文件[……]
「OpenLDAP」- 开源的、功能完备 LDAP 实现
认识
OpenLDAP 是一个开源的、功能完备的 LDAP 实现,由 OpenLDAP 项目组开发维护。OpenLDAP 因其开源特性、稳定性和灵活性,成为企业级目录服务的流行选择。简而言之,OpenLDAP 是 LDAP 协议的一个流行实现。
组成
基本架构
OpenLDAP 采用 Client/Server 架构:
服务器端(slapd)存储数据并处理查询
通过 LDAP 协议,客户端与服务端实现通信
slapd:独立的 LDAP 守护进程(服务器)
slurpd:用于多服务器复制的守护进程(较新版本已被其他机制替代)
客户端工具:如 ldapsearch、ldapadd、ldapmodify 等
管理工具:如 ldapdelete、ldappasswd 等
数据组织方式
OpenLDAP 数据以树状结构(DIT – Directory Information Tree)组织,条目(DN)包含各种属性,遵循特定的对象类和属性模式(schema)。
服务端口 | Port Number
Slapd will now listen on port 389 for LDAP and 636 for LDAPS. The server can also negotiate TLS/SSL using the StartTLS extended operation over port 389.
构建
on Ubuntu |https://documentation.ubuntu.com/server/how-to/openldap/
apt install slapd
apt install ldap-utils
性质
– 目录服务:专门优化的数据库,用于快速读取操作 – 网络协议:支持 LDAP 及其安全版本 LDAPS – 客户端和服务器工具
– 跨平台:支持 Linux、Unix、Windows 等多种操作系统 – 高性能:特别优化用于读取密集操作 – 灵活性:支持多种数据库后端 – 安全性:支持 SASL、TLS/SSL 加密 – 可扩展:通过模块支持各种功能扩展 – 标准兼容:符合 LDAPv3 协议标准
客户端
ldapsearch
-x Use simple authentication
-b searchbase
-H ldapuri
-D binddn
-w passwd
ldapsearch -H ldap://ldap.example.com:3890 \
-b “dc=example,dc=org”[……]
「MySQL」- 识别被锁住的表
查找被锁定的表
使用 SHOW OPEN TABLES 查看锁表:
SHOW OPEN TABLES [{FROM | IN} db_name] [LIKE ‘pattern’ | WHERE expr]
In_user
表示是否锁表。每个锁表请求都会导致该字段加壹。首个锁表请求会将该字段设置为壹,后续锁表请求会导致该字段增加,但是锁表动作会被阻塞。
为 0 表示未锁表。每当要锁表时,该字段增加 1,后续的锁表请求会被阻塞
为 1 表示被锁表。
为 N (N>1) 表示有壹个初始锁与N-1 个被阻塞的锁。
Name_locked
指示表名是否锁定(比如 DROP 或 REANME 请求)
查看 InnoDB 状态
SHOW ENGINE INNODB STATUS;
第二步、结束锁定表的查询
show PROCESSLIST;
KILL 123353 ;
参考文献
MySQL : Identify Locked Tables MySQL :: MySQL 8.4 Reference Manual :: 15.7.7.24 SHOW OPEN TABLES Statement transactions – How to detect deadlocks in Mysql / innodb? – Stack Overflow[……]
「Virtual Profile」
Virtual Profile配置可以代表任何其他的配置。
Virtual Profile有什么作用?
如果有多个规则指向同一个配置时,当要进行切换配置时,需要修改每个规则中的配置。
有了Virtual Profile后,多个规则可以指向同一个Virtual Profile,然后Virtual Profile指向某个配置,当需要更换配置时,只需要修改Virtual Profile中的配置就可以了。
如图,Virtual Profile的Target指向mProxyProfile,这就表示当你使用mVirtualProfile等于在使用mProxyProfile。
参考文献
virtual profile 到底什么作用?[……]
「ERROR 1435 – Trigger in wrong schema」
内容简介
处理ERROR 1435 (HY000): Trigger in wrong schema错误。
问题描述
在执行REANME TABLE a TO b时,产生ERROR 1435 (HY000): Trigger in wrong schema错误。
问题原因
正如「13.1.33 RENAME TABLE Syntax」文档所述:
If a table has triggers, attempts to rename the table into a different database fail with a Trigger in wrong schema (ER_TRG_IN_WRONG_SCHEMA) error.
所以,无法重命名带有触发器的表,这些表要单独处理。
解决办法
单独处理这些触发器:
SELECT
CONCAT(
“CREATE TRIGGER “,
TRIGGER_NAME,
” “,
ACTION_TIMING,
” “,
EVENT_MANIPULATION,
” ON “,
EVENT_OBJECT_SCHEMA,
“.”,
EVENT_OBJECT_TABLE,
” FOR EACH ROW “,
ACTION_STATEMENT
) TRIGGER_SCHEMA,
TRIGGER_NAME,
ACTION_STATEMENT
FROM
information_schema. TRIGGERS;
参考文献
MySQL 5.6 Reference Manual/13.1.32 RENAME TABLE Syntax MariaDB/RENAME TABLE How do you list all triggers in a MySQL database? Create Trigger in MySQL[……]
「MySQL」- 跨实例关联
如果在同一个数据库服务器上,关联数据没啥问题。
但是,现在的情况是,两个库运行在不同的数据库服务器上。
方法一、Manually
分别在不同的机器上执行查询。
然后,手动关联(使用编程、EXCEL等等手段)。
方法二、FEDERATED
WIP 使用FEDERATED存储引擎。 「How to join two tables in different server?」 「How to connect 2 different databases and Join 2 tables that are on different servers?」 「Join tables from two different server」 「MySQL Cross Server Select Query」 「MySQL — Joins Between Databases On Different Servers Using Python?」 「Join operation for two different database tables on different server #1696」 「How can I select data from two differents servers?」 「MySQL Federated table | MySQL join across servers」
方法三、MyCat
(1)同实例,不同库(不可行,场景不符) https://blog.csdn.net/boonya/article/details/73200994
(2)不同实例,同一库名(不可行,分库分表的数据操作,与插入相关的内容,与场景不符) https://blog.csdn.net/c1052981766/article/details/80326197
(3)在MyCat分库分表后的关联操作(不可行,如作者「3.任意表JOIN」部分中所述) https://blog.csdn.net/u013235478/article/details/53178657
(4)关于MyCat的四种JOIN操作可以参考官方「PDF」手册 MyCat以四种方式处理JOIN操作:
Column 1
全局表
不可行。本来就是跨实例的“大表”,如果同步到各个节点上还用MyCat干嘛。
ER Jion
不可行,只能在分库分表的情况下使用。(需要配置分片规则,即使你只有一张表)
Share Join
不可行,只支持两张表关联。(原理:分析[……]
「IME」- 输入法 | Input Method | Input Method Editor
认识
输入法是一种将用户输入的字符(如拼音、笔画、手写或语音)转换为计算机可识别和处理的文字(如汉字、英文单词等)的工具。它是人机交互的重要桥梁,尤其在非字母文字系统(例如,中文、日文、韩文、……)中至关重要。
组成
技术原理
编码匹配:将输入序列(如拼音)与字符编码(如Unicode)对应。
统计语言模型:利用NLP技术预测用户意图(如上下文联想)。
机器学习:通过用户数据优化词库排序和识别准确率。
构造
IBus
iBus 是一个基于 D-Bus 的输入法框架,它使用了一种叫做“总线”的机制来实现输入法和应用程序之间的通信。iBus 支持的语言包括中文、日文、韩文、阿拉伯文、希伯来文等。iBus 的优点在于稳定性和易用性,但是在一些老旧的 Linux 发行版中可能存在兼容性问题。
Fcitx
Fcitx,Free Chinese Input Tool of X
Fcitx 是一个轻量级、高效的输入法框架,它使用了 XIM 协议来实现输入法和应用程序之间的通信。Fcitx 支持的语言包括中文、日文、韩文、藏文、蒙古文等。Fcitx 的优点在于速度快、功能强大,但是需要一定的配置和学习成本;
Fcitx5
Fcitx5 是 Fcitx 的下一代版本,它使用了 DBus 协议来实现输入法和应用程序之间的通信。Fcitx5 支持的语言和功能与 Fcitx 相同,但是在性能和稳定性方面有所提升。Fcitx5 还支持多种主题和插件,可以自由定制输入法的外观和功能;
性质
词库与联想:根据用户输入习惯和常用词频智能推荐候选词。
云输入:联网同步流行词汇(如网络用语、明星姓名)。
个性化:支持自定义皮肤、快捷键、表情符号/颜文字。
多语言支持:中英混合输入、方言拼音(如粤语)。
纠错能力:自动修正拼音错误(如 “suoyi” → “所以”)。
改进
未来趋势
AI智能化:更精准的上下文预测和语义理解。
跨设备同步:手机、电脑、平板无缝切换输入状态。
无障碍输入:优化残障人士的语音/眼动控制输入。
参考
Input method – Wikipedia DeepSeek / 介绍输入法[……]
「MySQL」- 基于位置复制 => 基于 GTID 复制
问题描述
现有数据库基于位置复制,现在需要切换为基于 GTID 复制。
环境概述
(1)现有主从两台服务器,(2)当前它们基于位置复制。
前提条件
1)以下多数操作需要 ROOT 用户,或者具有 SUPER 权限;关机则需要 SHUTDOWN 权限。
解决方法
第一步、完成数据同步,进入只读模式
使两台数据库进入只读模式,未授予 SUPER 权限的客户端用户将无法写入:
SET @@GLOBAL.read_only = ON;
补充说明: 1)使主库能够处理完全部事务(提交或回滚); 2)使从库能够更上主库,让两种数据保持一致;
当数据库启用 GTID 模式后,由于在旧 binlog 中不包含 GTID,所以旧 binlog不能当前数据中应用,也就是说旧 binlog 等同于作废。这也是第五步(丢弃旧备份,创建新备份)存在的原因。
第二步、停止两台数据库服务
在确保两台主机数据一致后,停止数据库服务(详细过程不再赘述)。
第三步、修改配置,以 GTID 启动
配置两台服务器,启用 GTID 模式:
gtid_mode=ON
enforce-gtid-consistency=ON
在配置完成后,启动数据库。在启动从库时,应该使用 –skip-slave-start 选项,防止从库启用复制。
在主库中,必须启用 binlog 以用于复制。在从库中,可以关闭 binlog 功能(skip-log-bin,–log-slave-updates=OFF)
第四步、设置从库,使其从主库读取
设置从库以使用主库作为数据源,并使用基于 GTID 的自动定位:
CHANGE MASTER TO MASTER_HOST = host, MASTER_PORT = port,
MASTER_USER = user, MASTER_PASSWORD = password,
MASTER_AUTO_POSITION = 1;
第五步、丢弃旧备份,创建新备份
对于旧的备份,由于没有启用 GTID 功能,因此无法在启用 GTID 的服务器中使用。
我们需要创建新的备份。可以使用 FLUSH LOG 推进日志论转,然后创建备份。
第六步、启用从库复制,关闭只读模式
在从库上执行,以开始数据复制:
START SLAVE;
关闭两台服务器的只读模式,以允许客户端写入数据:
SET @@GLOBAL.read_only = OFF;
参考文献
MySQL 5.7 Reference Manual / S[……]
「Krakatau」
认识
Krakatau 是作用于 Java 字节码文件的工具
组成
它包含了三个工具:反编译器、反汇编器和汇编器。
构建
系统环境依赖
对于反编译器,需要Python 2.7,同时反编译可能需要安装 JDK。 对于反汇编和,Python 2.7和Python 3都可以。对于反汇编和汇编,JDK 并不是必须的。但是测试汇编器生成的类时,会比较有用。
执行安装
没有什么可安装的的,把源码从 GitHub 的仓库上拉下来就好了,然后加入环境变量。去 Krakatau 的 GitHub 仓库。
安装的可执行程序
2.2 Composition and Management:5 Observability of Service,汇编器。完全支持 JAVA8。 Palm Input,反汇编器。完全支持 JAVA8。 decompile.py,反编译器。只支持 JAVA7,没有 JAVA8,也没有 JAVA6。尤其是 lambdas 的反编译。
注意事项
可以通过将-O 传递给 Python 来禁用内部的调试检查。这将使 Krakatau 运行的稍快一些,因此通常建议使用。
如果想使用 Pypy,则需要使用在 2016 年 2 月 15 日或之后建立的版本。以前版本的 Pypy 有一个错误,导致 Krakatau 运行时产生 segfault 错误。
参考文献
Krakatau 的项目地址 Krakatau/README.txt
disassemble.py
disassemble.py,反汇编器。完全支持 JAVA8。
命令行语法格式(Usage)
python disassemble.py [-out OUT] [-r] [-roundtrip] target
命令描述
该命令将 class 文件转化为可读的汇编格式。不像 javap 命令,该工具可以反汇编不正常的 class 文件,然后输出内容可以重新汇编。
与assemble.py一起,该工具可以通过汇编将任何类进行。将任何 class 转到等价的 Class 中。
如果给出了-roundtrip选项,那么它可以通过汇编来回处理有效的类,并准确地再现原始的二进制类文件。
命令行参数含义
OUT 用于写入源文件的文件或者目录,即反汇编的输出位置。 默认为当前目录。 如果文件名为 zip 或者 jar 结尾,则输出 zip 文件。
-r 反汇编 target 目录中的所有(递归).class 文件。
-roundtrip 创建一个汇编文件,该汇编文件用于汇编回被反汇编的那个二进制文件。 如果没有-roundtrip,它将汇编出等价于原始的并具有相同的[……]
「TMV」- 英雄联盟 | LOL | League of Legends
认识
官网:https://lol.qq.com/main.shtml
构建
德玛西亚 艾欧尼亚
性质
—— 该部分将介绍安装英雄联盟游戏之后,我们能够在游戏中做什么。
Q:英雄联盟窗口化设置教程? A:首先进入一局游戏,然后按住 ESC 键或者点击小地图旁边的齿轮按钮将设置系统打开,视频,窗口模式,……
Q:改名? A:商城 / 账号 / 改名卡 / RMB 49 R:英雄联盟怎么改名?
Q:英雄联盟技能急速怎么理解? A:1、加快技能在施放后再次施放技能的时间,也就是技能的冷却时间加快,和冷却缩减机制的效果相同。2、技能急速是代替冷却缩减的新机制,拥有的效果自然是和冷却缩减相同,但技能急速的收益比冷却缩减差。 R:https://lewan.baidu.com/lewanqapage?gameId=129556370531573760&questionId=240892952852160512&idfrom=5015&answerId=240892952850100225
Q:英雄成就已锁定什么意思?英雄联盟中,成就已锁定是玩家在载入界面的时候,查看英雄具体成就等级时的一种显示字样,造成英雄成就已锁定的主要原因有几点。 A:1、未购买英雄玩家。如果没有购买英雄,只是通过免费的英雄试玩英雄,那么玩家关于这个英雄的成就点数就完全无法获得,成就也就无法解锁。2、玩家购买了英雄但是成就等级不够玩家在购买英雄之后,使用这个英雄进行游戏可以获得成就点数,但是成就解锁是要在玩家成就等级高于 4 级之后才可以的,因此如果玩家成就等级如果只有一二级,那么成就等级同样会锁定。
Q:英雄联盟补兵有时候 14 有时候 21 是怎么回事? A:补近战小兵和远程小兵得到的金币是不一样的,所以有时候 14,有时候 21,而且天赋页里面也有一个天赋,可以在敌方单位死亡后,额外加一个金币。 R:https://zhidao.baidu.com/question/502963850194294884.html
Q:英雄联盟韧性有什么用? A:韧性是 LOL 里英雄的一种属性。韧性的作用是减少控制(晕眩、减速、嘲讽、恐惧、沉默、致盲、变形、禁锢)持续时间。 R:https://lewan.baidu.com/lewanqapage?gameId=129556370531573760&questionId=219110617145417728
Q:英雄联盟永恒星碑有什么用? A:永恒星碑简而言之就是升级版的成就系统,记录英雄数据,可以让你在游戏内外展示英雄基础和专属的成就,效果更炫酷,也更能展示个人魅力。 R:https://lewan.baidu.com/lewanqapag[……]
「COS」- 腾讯云 | 对象存储 | Cloud Object Storage
认识
官网:https://cloud.tencent.com/product/cos 文档:https://cloud.tencent.com/document/product/436 仓库:None
对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,具有高扩展性、低成本、可靠安全等优点。通过控制台、API、SDK 和工具等多样化方式,用户可简单、快速地接入 COS,进行多格式文件的上传、下载和管理,实现海量数据存储和管理。
组成
API and SDK
API 文档 | https://cloud.tencent.com/document/product/436/7751 SDK 文档 | https://cloud.tencent.com/document/product/436/6474
构造
性质
跨云数据迁移
七牛云 KODO 迁移:https://cloud.tencent.cn/document/product/659/81165
当数据迁移成功后,迁移任务能够显示被迁移的数据量,但是 COS 可能会存在延迟(即无法实时显示当前数据量)。
cos2cos,如果迁移失败,则可能是账号欠费。
客户端工具
COS Browser | https://www.tencentcloud.com/document/product/436/11366
应用
域名合规问题 https://cloud.tencent.com/document/faq/436/102489
改进
参考[……]
「Jenkins」- 概念、术语
常见数据保存目录
Where does Jenkins store configuration files for the jobs it runs? – Stack Overflow
JENKINS_HOME
+- config.xml (jenkins root configuration)
+- *.xml (other site-wide configuration files)
+- userContent (files in this directory will be served under your http://server/userContent/)
+- fingerprints (stores fingerprint records)
+- nodes (slave configurations)
+- plugins (stores plugins)
+- secrets (secretes needed when migrating credentials to other servers)
+- workspace (working directory for the version control system)
+- [JOBNAME] (sub directory for each job)
+- jobs
+- [JOBNAME] (sub directory for each job)
+- config.xml (job configuration file)
+- latest (symbolic link to the last successful build)
+- builds
+- [BUILD_ID] (for each build)
+- build.xml (build result summary)
+- log (log file)
+- changelog.xml (change log)
Jenkins 服务配置: 1){JENKINS_HOME}/config.xml 2){JENKINS_HOME}/config-history/ ⇒ 每次修改都备份在该目录中,可从中恢复;
全部 Job 配置信息:{JENKINS_HO[……]
「Redis」- AnotherRedisDesktopManager | 图形化客户端
认识
官网:https://github.com/qishibo/AnotherRedisDesktopManager 文档:https://github.com/qishibo/AnotherRedisDesktopManager 仓库:https://github.com/qishibo/AnotherRedisDesktopManager
A faster, better and more stable Redis desktop manager [GUI client], compatible with Linux, Windows, Mac. 简而言之,Another Redis Desktop Manager 是个 Redis 图形化客户端,用于连接和管理 Redis 服务。[……]
「RADIUS」- 概念术语
由于 RADIUS 协议合并了认证和授权的过程,因此当采用 RADIUS 作为认证服务器时,认证接受报文中也包含了用户的授权信息;
RADIUS Server 授权 VLAN: 1)用户认证成功后,认证服务器将指定 VLAN 授权给用户。此时,设备会将用户所属的 VLAN 修改为授权的 VLAN,授权的 VLAN 并不改变接口的配置; 2)但是,授权的 VLAN 优先级高于用户配置的 VLAN,即用户认证成功后生效的 VLAN 是授权的 VLAN,用户配置的 VLAN 在用户下线后生效;
RADIUS Server 授权 ACL 有 2 种方法:
授权静态 ACL:RADIUS Server 通过 RADIUS 标准属性 Filter-Id 将 ACL ID 授权给用户。为使授权的 ACL 生效,需要提前在设备上配置相应的 ACL 及规则;
授权动态 ACL:RADIUS Server 通过华为 RADIUS 扩展属性 HW-Data-Filter 将 ACL ID 及其 ACL 规则授权给用户。ACL ID 及其 ACL 规则需要在 RADIUS Server 上配置,设备上不需要配置;
RADIUS Server 授权 UCL 组有 2 种方式:
授权 UCL 组名称:RADIUS Server 通过 RADIUS 标准属性 Filter-Id 将 UCL 组名称授权给指定用户;
授权 UCL 组 ID:RADIUS Server 通过华为 RADIUS 扩展属性 HW-UCL-Group 将 UCL 组 ID 授权给指定用户;
无论是哪一种授权 UCL 组方式,都必须提前在设备上配置相应的 UCL 组及 UCL 组的网络访问策略;
报文格式
RADIUS 使用 UDP 传输(端口 1812/1813),报文结构如下:
Code 1 字节报文类型:
1: Access-Request
2: Access-Accept
3: Access-Reject
4: Accounting-Request
5: Accounting-Response
Identifier 1 字节请求 / 响应的匹配标识(防止重放攻击)
Length 2 字节整个报文的长度(包括头部和属性)
Authenticator 16 字节用于验证报文完整性:
Request Authenticator(随机数)
Response Authenticator(MD5 哈希)
Attributes 可变属性-值对(AVP),携带认证 / 授权 / 计费信息(如用户名、VLAN[……]
「GitLab」- 服务部署 | 服务升级 | Docker | 到最新版本 | 容器部署
该笔记将记录:通过 Docker 镜像部署的 GitLab 服务的升级方法,以及常见问题的解决方案;
对于 Docker 部署的 GitLab 服务,仅有一个镜像,升级过程也比较简单:
根据官方文档,对于 Docker 部署,升级过程如下: 1)停止容器,并删除旧容器; 2)拉取镜像,到最新版本; 2)启动新容器,并检查 GitLab 正常运行;
但是,为了保险起见,每次我们仅升级一个次版本号。例如,我们会按照 13.6 => 13.7 => 13.8 => 13.9 的顺序依次升级;
docker-compose.yaml
version: ‘3’
services:
web:
image: docker.io/gitlab/gitlab-ce:16.4.1-ce.0
restart: always
hostname: ‘gitlab’
ports:
– ‘8929:80’
– ‘8930:443′
# – ’22:22’
volumes:
– ./data/etc:/etc/gitlab
– ./data/log:/var/log/gitlab
– ./data/var:/var/opt/gitlab
– /etc/localtime:/etc/localtime
12.4.2-ce.0 to 13.6.3-ce.0
2021-01-05
我们的 GitLab 当前版本为 12.4 版本(容器部署),需要升级到 13.6 版本,以使用某些新功能;
此次升级最主要的问题:在于跨版本升级很可能会失败,这也是不经常升级的缺点;
该部分将记录:如何将 GitLab 从 12.x 升级到 13.x 版本,以及相关问题的解决方法;
第一步、备份数据
运维工作千万条,数据备份第一条。执行如下命令进行数据升级:
rsync -av /data/gitlab/ /data/gitlab.12.4.2-ce.0.backup/
第二步、服务升级
最开始,我们直接从 12.4.2-ce.0 升级到 13.6.3-ce.0 版本,果然会失败;
因此改用逐步升级的方案:12.4.2-ce.0 => 12.10.14-ce.0 => 13.0.0-ce.0 => 13.3.9-ce.0 => 13.6.3-ce.0
其中,从 12.10.14-ce.0 到 13.0.0-ce.0 是非常关键的,这两个版本的变更较大;
建议认真阅读 Upgrading GitLab | GitLab 文档,[……]
「mysql」
MySQL 软件包中包含的的工具或命令的简单介绍。
与 Installation 有关的程序
mysql_tzinfo_to_sql 加载时区表。
mysql_upgrade 检查、升级 MySQL 表。
mysql_secure_installation 用于提高 MySQL 的安装安全。
mysql_ssl_rsa_setup 创建 SSL/RSA 文件
mysql_install_db 初始化 MySQL 的 data 目录。通常在 MySQL 安装时执行一次。
mysql_plugin 配置 MySQL Server 的插件。
comp_err 编译 MySQL 时的错误信息文件。 这个命令在 MySQL 5.7 Linux – Generic 中并不存在。
与 Client 相关的程序
mysql | MySQL 的命令行工具,是一个简单的 SQL SHELL。该命令即支持交互式使用,也支持非交互式使用。 mysqladmin | 管理 MySQL Server 的客户端工具,用于管理 MySQL Server 服务。 mysqlcheck | 表维护程序。用于检查、修复、优化、分析表。 mysqldump | 数据库备份程序。将数据和 Object 转换为 SQL 语句。还可以导出 CSV、TEXT、XML 格式。 mysqlimport | 数据导入程序。实际上使用的就是 LOAD DATA INFILE 语法。 mysqlpump | 同样用于数据库备份程序,但是功能比 mysqldump 更强大。 mysqlshow | 显示数据库、表、列的信息。 mysqlslap | 负载模拟、压力测试。模拟 MySQL 服务器的客户端加载负载,就好像多个客户端正在访问 MySQL 服务器。
mysqlsh 这个命令并不属于 MySQL 软件包,它属于MySQL Shell,需要单独安装。
与 Server 相关的程序
mysqld | MySQL Server 程序文件。
mysqld_safe | MySQL Server 的启动脚本。推荐使用该脚本启动 MySQL。mysql_safe 包含一些安全特性。
mysqld_multi | MySQL Server 的启动脚本。用于管理系统中的多个 MySQL Server,同时操作多台 MySQL Server。
mysql.server | MySQL Server 启动脚本。调用 mysql_safe 来启动 mysql。
管理相关和实用程序
innochecksum 离线 InnoDB 文件 Checksum 工具。检查 InnoDB 文件存储的校验和是否与计算的结果[……]
「PALM-INPUT」- 手心输入法
认识
官网:https://www.xinshuru.com/ 文档: 仓库:
简而言之,手心输入法是款简洁、无广告的输入法。
组成
WIP
构建
下载安装 | https://www.xinshuru.com/index_mob.html
性质
跨端个人词库同步; 跨端剪贴板实时同步;[……]
「OpenSSH」- OpenBSD Secure Shell
认识
OpenSSH 是 SSH 协议的免费开源实现。OpenSSH 提供了服务端后台程序和客户端工具。很多的 Linux 操作系统均集成 OpenSSH 工具。
参考
Wikipedia/OpenSSH Homepage: https://www.openssh.com[……]
「AWS」- Amazon Web Services
认识
官网:https://aws.amazon.com/ 文档:https://docs.aws.amazon.com/ 仓库:None
AWS(Amazon Web Services)是亚马逊公司提供的一套云计算服务。简而言之,我们可以在 AWS 购买工具和服务,来我们代替自建机房的需求。
组成
—— 该部分笔记内容将介绍 AWS 服务平台的组成,以帮助我们构建 AWS 服务。但鉴于我们更加关注与 AWS 的使用,所以该部分不做详细笔记。
Regions, Availability Zones, and Local Zones
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html
ap-southeast-1 Asia Pacific (Singapore)
Global Infrastructure
https://aws.amazon.com/about-aws/global-infrastructure/regions_az/
构建
—— 该部分将介绍如何构建 AWS 服务平台,以使用 AWS 服务。我们更加关注于“使用 AWS 服务”,而非“从零开始构建 AWS 平台”。
帐号注册
AWS 海外区域 | https://portal.aws.amazon.com/billing/signup AWS 中国区域 | https://www.amazonaws.cn/campaign/CloudService
区域选择
如何选择 AWS 地域,时国内访问速度最快
优先选择离中国大陆最近的 AWS 地域
使用 AWS 中国区域(需特殊申请)
优化网络性能: AWS Global Accelerator、CloudFront、Direct Connect、……
实测工具 | AWS Latency Monitoring | https://www.cloudping.co/
性质
—— 该部分笔记内容将介绍在获得 AWS 服务后我们能够使用的功能服务,以帮助我们了解 AWS 能够提供的功能。
价格计算器
https://calculator.aws/#/
aws-cli
文档:https://docs.aws.amazon.com/cli/ 项目:https://github.com/aws/aws-cli
我们通过 Python Virtual Environment 安装该命令。
aws configure | 配置相关信息
Elast[……]
「TMV」- 中文 | 汉语 | Chinese Language
中文 vs. 汉语
中文和汉语的区别
汉语,其指口讲、耳听的语言,
中文,其包括“汉语”,且包含阅读和书写的内容。此外,中文也包括兄弟民族的语文。
常用词汇及其含义
性质
是一个汉语词汇,拼音xìng zhì。
一)指禀性,气质; 二)指质地; 三)指事物的特性,本质; 四)指事物本身所具有的与其他事物不同的根本属性。
后三者多用于科学研究当中作为名词。
目录 Directory
在 Chinese 中,目录,其指书籍正文前所载的目次,是揭示和报道图书的工具。
按一定次序开列出来以供查考的事物名目。
书刊上列出的篇章名目(多放在正文前)。
在 English 中,Directory,(计算机文件或程序的)目录;名录;电话号码簿;公司名录;[……]
「KUBERNETES-INGRESS-CONTROLLER」- NGINX Ingress Controller
认识
Nginx Ingress Controller 是一个基于 Nginx 的开源项目,用于在 Kubernetes 集群中管理和暴露应用程序的路由。它充当一个负载均衡器,将外部流量引导到 Kubernetes 集群内部的服务。
总的来说,Nginx Ingress Controller 是一个强大而灵活的工具,可以帮助您管理和控制 Kubernetes 集群中的流量路由,提供可靠的应用程序访问方式;
官网:https://kubernetes.github.io/ingress-nginx/ 文档:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/ 仓库:https://github.com/kubernetes/ingress-nginx
组成
Nginx Ingress Controller 通过在 Kubernetes 中读取 Ingress 资源来定义路由规则,并根据这些规则将流量转发到相应的服务。
构建
WIP
性质
它支持多种负载均衡算法、SSL/TLS 终止、基于路径和主机的路由,以及各种自定义配置选项;
使用 Nginx Ingress Controller,您可以轻松地将 HTTP 和 HTTPS 流量引导到不同的后端服务,实现高可用性和水平扩展。
它还提供了一些高级功能,如访问控制、请求限速、基于规则的重定向等,可以根据具体需求进行配置;
注解 https://github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/nginx-configuration/annotations.md
应用
针对我们的场景,我们使用 NGINX Ingress Controller 实现,这完全是基于我们具有很多 Nginx 使用经验,此外 Nginx 完全能满足我们的需要。即使日后 NGINX Ingress Controller 无法满足需求,我们亦可安装其他 Ingress Controller 实现,它们之间能够并存;
该部分笔记将记录:在 Kubernetes Cluster 中,部署 NGINX Ingress Controller 的方法,以及相关问题的解决方案;
参考
Basic usage – NGINX Ingress Controller[……]
「MySQL」- INFORMATION_SCHEMA
INFORMATION_SCHEMA,有时也称作数据字典(data dictionary)和系统目录(system catalog)。MySQL 中默认存在的数据库之一,保存了数据库中其他所有的 SCHEMA 的元数据、表名、列名、类型、权限等。
字符类型的列(例如,TABLES.TABLE_NAME)的定义通常是 VARCHAR(N) CHARACTER SET utf8,其中 N 至少为 64。对于所有搜索,排序,比较,对比,MySQL 使用此字符集的默认排序规则(utf8_general_ci)。
因为一些 MySQL 对象被表示为文件,所以在 INFORMATION_SCHEMA 字符串列中的搜索可能受文件系统区分大小写的影响。
使用 INFORMATION_SCHEMA 来替代默认的 SHOW 语句
SELECT … FROM INFORMATION_SCHEMA语句旨在提供比各种 SHOW 语句(SHOW DATABASES,SHOW TABLES 等)提供的信息的更一致的方式。与 SHOW 相比,使用 SELECT 具有以下优点:
它符合 Codd 的规则,因为所有访问都在表上完成。
可以使用 SELECT 语句的语法,只需要学习一些表和列名,使用简单。
实施者不用担心添加关键字。
可以将 INFORMATION_SCHEMA 查询中的结果进行过滤,排序,连接和转换为应用程序需要的任何格式,更加的灵活方便。
这种技术与其他数据库系统更能互操作。例如,Oracle 数据库用户熟悉 Oracle 数据字典中的查询表。
因为 SHOW 语句的熟悉和使用的广泛,所以 SHOW 语句作为可替代的功能保留了下来。
关于这些表的访问权限
每个 MySQL 用户都有权访问这些表,但只能看到表中具有访问权限的行。在某些情况下(例如,INFORMATION_SCHEMA.ROUTINES 表中的 ROUTINE_DEFINITION 列),权限不足的用户将看到 NULL。这些限制不适用于 InnoDB 表;你只能看到 PROCESS 权限。
相同的权限,从 INFORMATION_SCHEMA 中获得的信息与通过 SHOW 语句查看到的信息是相同的。在任一情况下,必须对对象有一定的权限才能查看有关该对象的信息。
性能相关的问题
从多个数据库搜索信息的 INFORMATION_SCHEMA 查询可能需要很长时间并影响性能。要检查查询的效率,可以使用 EXPLAIN。
标准的注意事项
MySQL 中的 INFORMATION_SCHEMA 表结构的实现遵循 ANSI/ISO SQL:2003 standard Part 11 Sc[……]
「RANCHER」- 导入集群 | Import Cluster
导入集群
导入 SHK 集群
通过 kubeadm 部署的自建集群(Self-hosted Kubernetes)。
导入 EKS 集群
There are 0 nodes available to run the cluster agent. ⇒ 需要确保相关 Local 中相关 Pod 正常启动。否则 Rancher 无法完成针对 EKS 的初始化。
相关导入错误
[Sol.] … failed to set peers for key … failed to start user controllers for cluster …
[BUG] handler user-controllers-controller: userControllersController: failed to set peers for key all: failed to start user controllers for cluster c-kf2gs: secrets “cattle-global-data/” not found, requeuing · Issue #42055 · rancher/rancher
… [ERROR] error syncing ‘_all_’: handler user-controllers-controller: userControllersController: failed to set peers for key _all_: failed to start user controllers for cluster c-rpsxr: secrets “cattle-global-data/” not found, requeuing …
The issue is with AWS IAM user permission, use same IAM user Access and secret in Rancher AWS cloud credentials which you used to install EKS, and the issue will resolved. —— 我们是主账号创建的集群,所以我们使用主账号的 Access Key / Secret Key 来纳管集群。
[Sol.] … failed calling webhook …
[BUG] failed calling webhook “rancher.cattle.io.secrets”: failed to call webhook: the server could not find the requested resource · Issue[……]
「MySQL」- Temporary file write failure
问题
当执行OPTIMIZE TABLE时,产生如下错误:
+——————–+———-+——–+——————————————————————-+
| zabbix.trends_uint | optimize | note | Table does not support optimize, doing recreate + analyze instead |
| zabbix.trends_uint | optimize | error | Temporary file write failure. |
| zabbix.trends_uint | optimize | status | Operation failed |
+——————–+———-+——–+——————————————————————-+
3 rows in set, 1 warning (9 min 36.12 sec)
分析
在执行watch -n 1 df -h -P时,我们发现磁盘空间用量在不断增加,直至全部使用。
方案
暂未解决
参考
Temporary file write failure on MySQL[……]
「Jenkins Pipeline」- 执行 Shell 命令
执行 Shell 命令或者脚本是个非常常见的任务。该笔记将记录在 Jenkins Pipeline 中执行 Shell 的方法。
在 Jenkins 中,执行 Shell 脚本需要加 Shebang 标记,即以 #!/bin/sh 为脚本的第一行。否则,脚本中的管道的行为看起来会有些奇怪。
在 Jenkins 中,执行 Shell 脚本的用户为运行 Jenkins 服务的用户。
Jenkins Pipeline,更像“胶水”,将很多脚本与工具粘合在一起,实现自动化任务,而它本身并没有提供特定功能。
注意,除了 Shell 脚本,Jenkins 还能执行 bat、ps 等等,我们这里以 Shell 为例,更多内容建议参考官方文档。
Labelled Pipeline Steps
该插件是对 sh 与 bat 的补充,以支持在 BlueOcean 中显示标签。
官网:https://plugins.jenkins.io/labelled-steps/ 文档:https://jenkins.io/doc/pipeline/steps/labelled-steps/ 仓库:https://github.com/jenkinsci/labelled-steps-plugin
labelledShell(), labelledBatch(), …[……]