Skip to content

Commit

Permalink
1
Browse files Browse the repository at this point in the history
  • Loading branch information
YiRanCN committed Jan 9, 2025
1 parent 56118ba commit a731663
Show file tree
Hide file tree
Showing 11 changed files with 272 additions and 46 deletions.
34 changes: 34 additions & 0 deletions docs/study/back/API网关/APISIX.md
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,41 @@ port: 9091 # Set the port.
curl -i http://10.0.101.150:9091/apisix/prometheus/metrics
```

### 如何查看apisix的版本

```shell
cat /opt/ccsp/apisix/apisix/core/version.lua
/opt/ccsp/apisix/deps/bin/apisix version
```

### 四种部署模式

"traditional", "control_plane", "data_plane", "standalone"

- 传统模式
- 控制模式,管理接口
- 数据模式,业务接口
- 单机模式

### 内存排除

```shell
先查到worker进程内存信息
ps -ef|grep `ps -ef|grep /bin/openresty |grep apisix|grep -v grep|awk '{print $2}'`|grep worker|awk '{ system("ps -aux| grep " $2) }'|grep -v grep

再查找各worker进程的内存分配情况,找到异常的内存地址块,记录首地址StartAddress
pmap -XX {PID}

再根据地址块首地址找到地址块的首尾地址:StartAddress-EndAddress
cat /proc/{PID}/maps

通过gdb抓取该地址块的内存快照
gdb attach {PID}
(gdb) dump memory /root/37.211_72508c9b2000-72508e933000_20250105145100.dump 0x首地址 0x尾地址

查看快照内容
strings -n 12 37.211_72508c9b2000-72508e933000_20250105145100.dump
```



Expand Down
4 changes: 4 additions & 0 deletions docs/study/db/NoSQL/Etcd.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ etcdctl is a command line client for etcd.
./etcdctl get /apisix/routes/488415811682173648
# 更新指定key的value
./etcdctl put /mykey "my new value" --if-exists
# 如果配置了tls需要增加参数
--insecure-skip-tls-verify=true --insecure-transport=false
# 全局监控数据更新
./etcdctl watch --prefix / --insecure-skip-tls-verify=true --insecure-transport=false -w simple
```

#### 集群维护相关命令
Expand Down
37 changes: 37 additions & 0 deletions docs/study/db/SQL/OpenGauss.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

官网 https://opengauss.org/zh/

文档 https://docs.opengauss.org/zh/

集群方案 https://docs.opengauss.org/zh/docs/5.0.0/docs/DatabaseAdministrationGuide/openGauss%E5%B8%B8%E8%A7%81%E4%B8%BB%E5%A4%87%E9%83%A8%E7%BD%B2%E6%96%B9%E6%A1%88%E7%AE%80%E4%BB%8B.html

对标的是PostgreSQL

### 常用的工具
Expand All @@ -23,6 +27,8 @@
- gs_ctl restart -D DATADIR 重启
- gs_ctl status -D DATADIR 状态检查
- gs_ctl reload -D DATADIR 重新加载配置文件,而无需重启
- gs_ctl query -D DATADIR 查询节点信息
- gs_ctl switchover -D DATADIR 在备节点执行,备节点会切换到主节点
- cat postgresql.conf|grep -v '^\s*#'|grep -v "^$" 查看配置文件去掉注释行
- 物理备份 gs_basebackup
- 逻辑备份 gs_dump gs_dumpall,没有增量备份
Expand Down Expand Up @@ -93,3 +99,34 @@ kernel.sem = 50100 128256000 50100 2560
sysctl -p 生效
#重启数据库即可
```

### rdtscp指令集问题

OpenEluer确保安装rdtscp指令集,否则无法安装OpenGauss数据库

```shell
# 如何查看当前系统是否执行rdtscp
cat /boot/config-$(uname -r) | grep TSC
cat /boot/config-$(uname -r) | grep PERF_EVENT
```

### 商业发行版

https://www.mogdb.io/ https://enmotech.com/

MogDB是云和恩墨基于openGauss开源数据库进行完善增强的企业发行版。它围绕高性能、高可用、全密态、自动化运维、多数据库兼容等企业需求,应对企业用户需求新一代数据库的应用场景。其核心价值是高安全、高性能、高兼容、易运维和全天候的企业支持。

https://www.vastdata.com.cn/ 海量数据

Vastbase G100 基于openGauss内核的企业级关系型数据库

### shell通过gsql查询

```shell
#
echo -e "\pset format unaligned\nSHOW ALL;" > show_all.sql
# 通过此种方式查询出来的数据的格式很好看的
gsql -p 5432 -U sansec -W passwordxxx -f show_all.sql
```


89 changes: 52 additions & 37 deletions docs/study/db/综合.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,52 @@
---
sidebar_position: 2
---
### 软件系统根据存储结构的分类

关于NoSQL,看过一张图,挺形象:“1970,We have no SQL”->“1980,Know SQL”->“2000,NoSQL”->“2005,Not only SQL”->“2015,No,SQL”。目前,一些新型数据库,同时具备了NoSQL的扩展性和关系型数据库的很多特性。

关系型和NoSQL数据库的选型。考虑几个指标,数据量、并发量、实时性、一致性要求、读写分布和类型、安全性、运维性等。根据这些指标,软件系统可分成几类。
1. 管理型系统,如运营类系统,首选关系型。
2. 大流量系统,如电商单品页的某个服务,后台选关系型,前台选内存型。
3. 日志型系统,原始数据选列式,日志搜索选倒排索引。
4. 搜索型系统,指站内搜索,非通用搜索,如商品搜索,后台选关系型,前台选倒排索引。
5. 事务型系统,如库存、交易、记账,选关系型+缓存+一致性协议,或新型关系数据库。
6. 离线计算,如大量数据分析,首选列式,关系型也可以。
7. 实时计算,如实时监控,可以选时序数据库,或列式数据库。

### NOSQL出现的历史原因

关系数据库经过几十年的发展后已经非常成熟,强大的 SQL 功能和 ACID 的属性,使得关系数据库广泛应用于各式各样的系统中,但这并不意味着关系数据库是完美的,关系数据库存在如下缺点。

- 关系数据库存储的是行记录,无法存储数据结构
- 以微博的关注关系为例,“我关注的人”是一个用户 ID 列表,使用关系数据库存储只能将列表拆成多行,然后再查询出来组装,无法直接存储一个列表。
- 关系数据库的 schema 扩展很不方便
- 关系数据库的表结构 schema 是强约束,操作不存在的列会报错,业务变化时扩充列也比较麻烦,需要执行 DDL(data definition language,如 CREATE、ALTER、DROP 等)语句修改,而且修改时可能会长时间锁表(例如,MySQL 可能将表锁住 1 个小时)。
- 关系数据库在大数据场景下 I/O 较高
- 如果对一些大量数据的表进行统计之类的运算,关系数据库的 I/O 会很高,因为即使只针对其中某一列进行运算,关系数据库也会将整行数据从存储设备读入内存。
- 关系数据库的全文搜索功能比较弱
- 关系数据库的全文搜索只能使用 like 进行整表扫描匹配,性能非常低,在互联网这种搜索复杂的场景下无法满足业务要求。

针对上述问题,分别诞生了不同的 NoSQL 解决方案,这些方案与关系数据库相比,在某些应用场景下表现更好。但世上没有免费的午餐,NoSQL 方案带来的优势,本质上是牺牲 ACID 中的某个或者某几个特性,因此我们不能盲目地迷信 NoSQL 是银弹,而应该将 NoSQL 作为 SQL 的一个有力补充,NoSQL != No SQL,而是 NoSQL = Not Only SQL。

常见的 NoSQL 方案分为 4 类。

- K-V 存储:解决关系数据库无法存储数据结构的问题,以 Redis 为代表。
- 文档数据库:解决关系数据库强 schema 约束的问题,以 MongoDB 为代表。
- 列式数据库:解决关系数据库大数据场景下的 I/O 问题,以 HBase 为代表。
- 全文搜索引擎:解决关系数据库的全文搜索性能问题,以 Elasticsearch 为代表。
---
sidebar_position: 2
---
### 软件系统根据存储结构的分类

关于NoSQL,看过一张图,挺形象:“1970,We have no SQL”->“1980,Know SQL”->“2000,NoSQL”->“2005,Not only SQL”->“2015,No,SQL”。目前,一些新型数据库,同时具备了NoSQL的扩展性和关系型数据库的很多特性。

关系型和NoSQL数据库的选型。考虑几个指标,数据量、并发量、实时性、一致性要求、读写分布和类型、安全性、运维性等。根据这些指标,软件系统可分成几类。
1. 管理型系统,如运营类系统,首选关系型。
2. 大流量系统,如电商单品页的某个服务,后台选关系型,前台选内存型。
3. 日志型系统,原始数据选列式,日志搜索选倒排索引。
4. 搜索型系统,指站内搜索,非通用搜索,如商品搜索,后台选关系型,前台选倒排索引。
5. 事务型系统,如库存、交易、记账,选关系型+缓存+一致性协议,或新型关系数据库。
6. 离线计算,如大量数据分析,首选列式,关系型也可以。
7. 实时计算,如实时监控,可以选时序数据库,或列式数据库。

### NOSQL出现的历史原因

关系数据库经过几十年的发展后已经非常成熟,强大的 SQL 功能和 ACID 的属性,使得关系数据库广泛应用于各式各样的系统中,但这并不意味着关系数据库是完美的,关系数据库存在如下缺点。

- 关系数据库存储的是行记录,无法存储数据结构
- 以微博的关注关系为例,“我关注的人”是一个用户 ID 列表,使用关系数据库存储只能将列表拆成多行,然后再查询出来组装,无法直接存储一个列表。
- 关系数据库的 schema 扩展很不方便
- 关系数据库的表结构 schema 是强约束,操作不存在的列会报错,业务变化时扩充列也比较麻烦,需要执行 DDL(data definition language,如 CREATE、ALTER、DROP 等)语句修改,而且修改时可能会长时间锁表(例如,MySQL 可能将表锁住 1 个小时)。
- 关系数据库在大数据场景下 I/O 较高
- 如果对一些大量数据的表进行统计之类的运算,关系数据库的 I/O 会很高,因为即使只针对其中某一列进行运算,关系数据库也会将整行数据从存储设备读入内存。
- 关系数据库的全文搜索功能比较弱
- 关系数据库的全文搜索只能使用 like 进行整表扫描匹配,性能非常低,在互联网这种搜索复杂的场景下无法满足业务要求。

针对上述问题,分别诞生了不同的 NoSQL 解决方案,这些方案与关系数据库相比,在某些应用场景下表现更好。但世上没有免费的午餐,NoSQL 方案带来的优势,本质上是牺牲 ACID 中的某个或者某几个特性,因此我们不能盲目地迷信 NoSQL 是银弹,而应该将 NoSQL 作为 SQL 的一个有力补充,NoSQL != No SQL,而是 NoSQL = Not Only SQL。

常见的 NoSQL 方案分为 4 类。

- K-V 存储:解决关系数据库无法存储数据结构的问题,以 Redis 为代表。
- 文档数据库:解决关系数据库强 schema 约束的问题,以 MongoDB 为代表。
- 列式数据库:解决关系数据库大数据场景下的 I/O 问题,以 HBase 为代表。
- 全文搜索引擎:解决关系数据库的全文搜索性能问题,以 Elasticsearch 为代表。

### PRO RTO

RPO(Recovery Point Objective)定义

RPO 是业务连续性和灾难恢复领域的一个关键指标,它代表恢复点目标。具体而言,RPO 是指企业在发生灾难或故障后,数据可以恢复到的时间点。例如,如果 RPO 是 1 小时,那么在灾难发生后,企业的数据最多丢失 1 小时内的数据更新。

RPO = 0 意味着在任何故障情况下,数据都不能有丢失。这要求数据必须实时或接近实时地进行备份或复制,以确保在发生故障时能够完整地恢复到故障发生前的状态。例如,在金融交易系统中,为了保证交易数据的完整性和准确性,往往要求 RPO = 0,因为任何一笔交易数据的丢失都可能导致严重的财务问题。

在存储系统中,同步复制技术会在主存储设备接收到写入请求并完成写入操作后,等待备份存储设备也完成相同数据的写入,才会向应用程序返回写入成功的信号。这样可以保证主备存储的数据在任何时刻都是完全一致的。

RTO(Recovery Time Objective)定义

RTO 是业务连续性和灾难恢复领域中的一个重要指标,代表恢复时间目标。它是指在发生灾难或故障后,信息系统或业务流程从停止运行到恢复运行所允许的最长时间。例如,若企业规定某关键业务系统的 RTO 为 4 小时,这意味着在该系统出现故障后,必须在 4 小时内恢复其运行,以将业务中断的影响控制在可接受的范围内。

9 changes: 8 additions & 1 deletion docs/study/devops/Linux运维-GRUB.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,11 @@

可以设置内核参数

如果Docker info返回WARNING: No swap limit support 可以通过此设置解决
如果Docker info返回WARNING: No swap limit support 可以通过此设置解决

```shell
# 查询系统是否启用了swap memory
/sys/fs/cgroup/memory/memory.swappiness
# 不一定有 不准 主要还得看上面的
cat /proc/cmdline
```
38 changes: 38 additions & 0 deletions docs/study/devops/Linux运维-systemmd.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@


### 1. 概述
systemd是一个Linux操作系统下的系统和服务管理器,它被广泛应用在众多现代Linux发行版中,用来替代传统的SysV init系统,承担着启动、停止、管理系统服务以及协调各系统资源等重要任务。

### 2. 主要功能及特点

#### 并行启动
与传统的SysV init按顺序依次启动服务不同,systemd能够并行地启动多个系统服务,极大地缩短了系统的启动时间。它可以分析各服务之间的依赖关系,在确保依赖的服务已准备好的前提下,同时启动多个没有依赖关联或者相互不冲突的服务,提高了启动效率。

#### 基于单元(Unit)的管理
systemd采用单元的概念来管理各种系统资源,常见的单元类型有以下几种:
- **服务单元(.service)**:用于定义系统服务相关的配置,像启动命令、运行环境、依赖关系等,例如 `httpd.service` 用来配置Apache服务器服务相关的启动及运行要求。
- **套接字单元(.socket)**:可用来监听特定的网络套接字或者Unix域套接字,当有相应的连接请求时,触发关联的服务启动,比如 `sshd.socket` 可以监听SSH连接请求,进而启动 `sshd` 服务来处理登录等事宜。
- **设备单元(.device)**:针对系统的硬件设备进行管理,对设备的识别、加载等过程进行配置和控制。
- **挂载单元(.mount)**:负责管理文件系统的挂载操作,明确指定挂载点、挂载的文件系统类型等挂载相关细节。

#### 统一的命令行工具(systemctl)
systemd提供了统一的命令行工具 `systemctl` 来操作各类单元,一些常见用法如下:
- **启动、停止、重启服务**
- 启动服务可以用 `systemctl start [服务名]`,比如 `systemctl start mysqld` 能启动MySQL数据库服务。
- 停止服务通过 `systemctl stop [服务名]` 命令实现,例如 `systemctl stop httpd` 会让正在运行的Apache服务器停止运行。
- 重启服务则是 `systemctl restart [服务名]`,像 `systemctl restart sshd` 就会重启SSH服务。
- **查看服务状态**
- 使用 `systemctl status [服务名]`,可以查看某个服务当前是处于运行中、停止还是其他状态,并且会显示服务相关的详细信息,比如最近的启动、停止时间,是否出现错误等情况,例如 `systemctl status nginx` 能查看Nginx服务的状态详情。
- **设置服务开机启动或禁用开机启动**
- 若想让某个服务在系统开机时自动启动,可执行 `systemctl enable [服务名]`,例如 `systemctl enable docker` 会将Docker服务设置为开机自启。
- 反之,要禁用服务开机启动则用 `systemctl disable [服务名]` 命令,像 `systemctl disable postfix` 会让Postfix服务不会在开机时自动启动。

#### 日志管理
systemd集成了日志功能,通过 `journalctl` 命令可以查看系统和各服务的日志信息。比如 `journalctl -u [服务名]` 可查看特定服务的日志,像 `journalctl -u sshd` 能查看SSH服务相关的日志记录,方便排查服务运行过程中出现的问题。

### 3. 配置文件
systemd的配置文件通常存放在几个不同的目录下,各有不同用途:
- **/lib/systemd/system/**:这个目录下存放着系统默认安装的各类单元文件,一般是软件包安装时自带的,不建议直接修改这里的文件,以免在软件包更新时被覆盖。
- **/etc/systemd/system/**:用于存放用户自定义的单元文件或者对系统默认单元文件进行覆盖修改的配置文件,当系统启动或者执行相关操作时,会优先读取这个目录下对应的单元文件内容,方便管理员根据实际需求对服务等单元进行个性化配置。

总之,systemd在现代Linux系统的运行管理中起着至关重要的作用,掌握它的基本原理、功能和相关操作对于Linux系统的运维等工作十分关键。
41 changes: 41 additions & 0 deletions docs/study/devops/Linux运维-常用.md
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,47 @@ journalctl -x | grep aaa
tar -cf - ./hadoop-3.3.6 | pigz -p 8 > hadoop-3.3.6.tar.gz
```

### shell解析json

下载jq,https://github.com/jqlang/jq/releases
```shell
vi data.json
#输入
{
"name": "John",
"age": 30,
"city": "New York"
}
#
cat data.json | ./jq-linux-arm64 '.name'
```

### swap交换分区

```shell
# 这个文件记录哪些磁盘或文件系统用于交换分区
cat /etc/fstab
# 开启交换分区
swapon -a
# 关闭交换分区
swapoff -a
# 如何查看是否开启swap
free -h
swapon -s
cat /proc/swaps
```

### history记录

某些系统因为安全需求会关闭history

```shell
#
vim /etc/profile
# 编辑
HISTSIZE=0
HISTFILESIZE=0
```

- [csdn-ulimit命令详解:如何设置和查看系统资源限制](https://blog.csdn.net/llgde/article/details/133780294)

9 changes: 9 additions & 0 deletions docs/study/devops/Linux运维-硬盘性能.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,13 @@ fio --name=rand-write --filename=/dev/sda --direct=1 --rw=write --bs=4k --size=5
# 延迟(Latency):
# 以纳秒(ns)、微秒(μs)或毫秒(ms)为单位,代表每个 I/O 操作从发起请求到完成的时间。例如,平均写入延迟为 100μs,表示每个写入请求平均需要 100 微秒才能完成。较低的延迟表示存储设备能够更快地响应 I/O 请求。

```

### time dd

```shell
# 测试写入
time dd if=/dev/zero of=testfile.txt bs=1M count=10000
# 测试读取
time dd if=testfile.txt of=/dev/null bs=1M count=10000 && rm testfile.txt
```
23 changes: 22 additions & 1 deletion docs/study/devops/ssh.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,25 @@ ssh-copy-id -p 10212 username@remote_host

测试免密登录。在本地计算机上执行ssh命令,无需输入密码,例如ssh username@remote_host,如果一切正常,则表示SSH免密登录已成功配置。

此外,在目标服务器上,可能需要配置SSH服务以允许免密登录,这通常涉及编辑/etc/ssh/sshd_config文件,并添加RSAAuthentication和PubkeyAuthentication选项,并重启SSH服务。
此外,在目标服务器上,可能需要配置SSH服务以允许免密登录,这通常涉及编辑/etc/ssh/sshd_config文件,并添加RSAAuthentication和PubkeyAuthentication选项,并重启SSH服务。

### ssh远程执行本地的脚本文件

```shell
# 在脚本中执行会存在问题,报错Pseudo-terminal will not be allocated because stdin is not a terminal.
# 免密的情况
ssh -t [email protected] bash -s < /opt/xxx.sh [参数1] [参数...]
# 非免密的情况
expect -c "
set timeout 10;
spawn ssh -p $port -t $user@$ip bash -s < /opt/xxx.sh [参数1] [参数...];
expect {
\"password:\" {send \"$pwd\r\";}
\"yes/no\" {send \"yes\r\"; exp_continue;}
};
expect \"$\";
send \"$remote_command\r\";
expect \"$\";
send \"exit\r\";
"
```
Loading

0 comments on commit a731663

Please sign in to comment.