-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
272 additions
and
46 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 小时内恢复其运行,以将业务中断的影响控制在可接受的范围内。 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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系统的运维等工作十分关键。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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\"; | ||
" | ||
``` |
Oops, something went wrong.