GaGa's Blog

One GaGa, One World !

Linux 进程状态是操作系统内核管理进程时的核心概念,直接反映了进程在调度和资源使用中的行为。

ps输出部分属性含义
ps args.png

ps result.png


Read more »

数据库理论中非常核心的概念,用来保证事务(transaction)的可靠性和一致性


ACID 的四个属性:

  1. 原子性 (Atomicity)
    原子性确保一个
    事务是一个不可分割的整体
    。要么事务中的所有操作都成功执行并提交,要么全部失败并回滚。比如,在银行转账中,从账户 A 扣款和向账户 B 存款必须同时成功,如果扣款成功但存款失败,整个事务会回滚,数据库状态不会改变。

  2. **一致性 (Consistency)**
    一致性保证事务执行前后,数据库始终处于一种符合规则的合法状态。所有的约束(如主键唯一、数据类型匹配等)、触发器和业务规则都会得到遵守。比如,转账后账户余额不能为负(如果有这样的规则)。

  3. 隔离性 (Isolation)
    隔离性确保
    多个事务并发执行时,彼此之间不会互相干扰
    。每个事务的操作在提交前对其他事务是不可见的。比如,两个用户同时修改同一数据时,数据库会通过锁或其他机制保证结果的可预测性。常见的隔离级别包括读未提交、读已提交、可重复读和串行化。

  4. **持久性 (Durability)**
    持久性保证一旦事务提交,其结果就会永久保存,即使系统崩溃或断电也不会丢失。通常通过日志记录(WAL,Write-Ahead Logging)或类似机制实现。

Read more »

在 MySQL(以及其他关系型数据库)中,DDL、DML 和 DCL 是 SQL 语言的三大类操作,它们分别负责不同的功能。


1. DDL(Data Definition Language,数据定义语言)

  • 定义:DDL 用于定义和管理数据库结构或模式(schema)的语句,主要涉及数据库对象(如表、视图、索引等)的创建、修改和删除。
  • 特点
    • 操作的对象是数据库的结构,而不是数据本身。
    • DDL 操作通常是永久性的,执行后会自动提交(隐式提交),无法回滚。
  • 常见命令
    • CREATE:创建数据库或表,例如 CREATE TABLE students (id INT, name VARCHAR(50));
    • ALTER:修改已有对象的结构,例如 ALTER TABLE students ADD COLUMN age INT;
    • DROP:删除对象,例如 DROP TABLE students;
    • TRUNCATE:清空表数据但保留结构,例如 TRUNCATE TABLE students;
  • 示例
    CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100)
    );
Read more »

在 Kubernetes 中,Pause Pod 并不是一个独立的 Pod 类型,而是指每个 Pod 中自动创建的一个特殊容器,通常被称为 pause 容器。它的作用是为 Pod 提供基础设施支持,确保 Pod 中的其他容器能够正常运行。


Pause 容器的作用

  1. 共享网络命名空间

    • Pause 容器为 Pod 中的所有容器提供了一个共享的网络命名空间(network namespace)。这意味着 Pod 内的所有容器共享同一个 IP 地址、端口空间和网络栈。
    • 通过这种方式,Pod 内的容器可以通过 localhost 相互通信,而无需关心网络配置的复杂性。
  2. 共享存储卷命名空间

    • Pause 容器还负责维护 Pod 的挂载卷命名空间(mount namespace)。Pod 中定义的卷(如 PersistentVolume 或 ConfigMap)会先挂载到 pause 容器中,然后其他容器可以通过共享的方式访问这些卷。
    • 这确保了 Pod 内容器之间的存储一致性。
  3. 作为 Pod 的“占位符”

    • Pause 容器是一个始终运行的轻量级进程,它的存在确保了 Pod 在 Kubernetes 集群中有一个稳定的“生命周期”。即使 Pod 中的应用容器崩溃或退出,pause 容器会保持运行,维持 Pod 的状态,避免 Pod 被 Kubernetes 立刻销毁。(新拉起容器,ip不会变)
    • 这为控制器(如 Deployment)提供了重新调度或重启应用容器的机会。
  4. 简化容器管理

    • Pause 容器的存在让 Kubernetes 不需要为每个应用容器单独管理网络和存储,而是将这些基础设施任务集中在一个地方处理,简化了容器编排的复杂度。
Read more »

ps aux 中rss/vsz 含义

  • 虚拟内存 vsz (virtual memory size): 进程使用的虚拟内存总量(代码段、数据段、堆栈、共享库等) swap + 物理内存 + buffer/cache (写缓存、读缓存)

  • 常驻内存 rss (resident set size): 进程实际占用的物理内存大小(当前进程在物理内存的实际占用量) 物理内存

pod类型:

  • pause-container 基础容器,网络容器
  • init-container 初始化环境容器
  • business-container 业务容器

#probe 探针

  • startup
    • livesss
    • readiness 可以接收处理过来的请求service -> endpoint
Read more »

cgroup

cgroup(控制组)是Linux内核的一项特性,用于将进程组织成层次结构,并对这些进程进行资源限制、优先级控制、审计和监控。它能够控制和限制CPU时间、内存使用、磁盘I/O等资源的使用,以便更好地管理系统资源。

cgroup 主要有以下几种控制子系统(也叫cgroup controller):

  1. cpu:控制进程的CPU使用,指定进程的CPU时间分配。可以限制进程占用的CPU核心数、CPU的优先级等。
  2. memory:限制进程的内存使用,包括物理内存和交换空间。可以指定最大内存使用量,避免进程内存占用过多导致系统崩溃。
  3. blkio:控制进程的磁盘I/O行为,限制读写操作的速率、优先级等。
  4. net_cls:用于网络流量控制,通过指定流量标识符(Class ID),限制或优先处理某些网络流量。
  5. devices:控制进程对设备的访问权限,可以限制某些设备的使用,确保进程不会对设备进行无关操作。
  6. freezer:可以冻结某个cgroup中的所有进程,暂停它们的执行,直到再次恢复。
  7. cpuset:指定进程运行的CPU核心和内存节点。可以将进程绑定到特定的CPU核心或内存节点,避免进程迁移。
  8. hugetlb:控制进程对大页内存(huge pages)的使用,可以限制进程申请大页内存的数量。
  9. pids:限制某个cgroup中可以创建的最大进程数,防止进程爆炸式增长。
  10. rdma:控制进程对RDMA设备的访问。
Read more »

docker依赖技术

Docker是一种开源的容器化平台,用于构建、打包、分发和运行应用,它依赖于一系列技术来实现容器化和虚拟化,主要包括以下几种关键技术:

1. Linux 容器 (LXC)

  • 早期的 Docker 主要依赖于 LXC 技术来提供容器化环境。LXC 是一个操作系统级别的虚拟化技术,可以让多个隔离的 Linux 系统共享同一个操作系统内核。Docker 在这个基础上进一步发展,提供了更简便的接口和更轻量的容器化体验。
Read more »

日常中遇到elk中性能问题

  • 1.遇到过logstash写es提示429写尝试拒绝

    • 1.后台es写压力大可以提升es thread_pool.write.queue_size/size大写(缓解)
    • 2.es存储使用ssd,建议冷热分离,扩增数据存储节点(治本)
  • 2.新增索引提示403(indice ready only)

    • 1.临时关闭写保护,清理历史索引释放空间
    • 2.调整es磁盘写保护阀值
      • cluster.routing.allocation.disk.watermark.low,默认85%,用于控制磁盘的最小使用率;
    • cluster.routing.allocation.disk.watermark.high,默认90%,用于控制磁盘的最大使用率;
    • cluster.routing.allocation.disk.watermark.flood_stage,默认95%超过此值时,Elasticsearch变成只读模式,无法写入数据
  • 3.logstash解析压力过大导致机器负载飙升,日志存在很大时延

    • 1.kafka日志扩大分区,扩充logstash服务
    • 2.改用gohangout解析,显著降低cpu/loadavg
  • 4.提高可用性、增加redis/kafka作为日志缓冲组件

  • 5.elasticsearch查询缓慢

    • 合理设置分片,冷热区分,jvm堆内存预留50%,设置合理查询条件(防止全文查询)
  • 6.kibana查询崩溃

    • 设置nodejs内存(–max-old-space-size=4096)

k8s pod访问方式

  • podid
  • kube-proxy
  • clusterip
  • nodeport
  • ingress
  • loadbalance
  • hostnetwork
  • externalname //内 -> 外

在 Kubernetes (k8s) 中,Pod是运行在集群中的最小部署单元,可以采用以下几种主要方式来访问 Pod:

Read more »

kube-proxy

Kubernetes中的kube-proxy是一个关键的网络组件,负责实现集群内部的服务发现和负载均衡

kube-proxy 出现问题或停止工作影响如下

  • 1.服务发现中断:

    • kube-proxy 负责监听 Kubernetes API Server 中 service 和 endpoint 的变化情况,并通过代理的方式为服务配置负载均衡。如果 kube-proxy 停止工作,集群中的服务发现机制将无法正常运作,新的服务变化将无法被正确地传播和应用。
  • 2.负载均衡失效:

    • kube-proxy 通过为每个 Service 创建虚拟 IP 地址(VIP)和相应的网络代理规则,实现请求的负载均衡。如果 kube-proxy 出现问题,这些负载均衡规则将无法更新,导致流量无法正确地分发到后端的 Pod 上。
  • 3.Pod间通信受阻:

    • 在 Kubernetes 集群中,Pod 之间可以通过 Service 进行通信。如果 kube-proxy 故障,Pod 将无法通过 Service 访问其他 Pod 提供的服务,这将直接影响到依赖这些服务的应用程序的正常运行。
  • 4.外部访问受限:

    • 对于设置了NodePort的Service,kube-proxy 负责将从 NodePort 进入的请求转发到后端 Pod。如果 kube-proxy 出现问题,外部通过 NodePort 的访问请求将无法被正确转发,导致外部服务访问受限。
  • 5.性能下降:

    • kube-proxy 通过 iptables 或 ipvs 等机制来实现高效的网络流量转发。如果 kube-proxy 故障,可能会导致网络流量无法被高效处理,从而影响整个集群的性能
Read more »

登陆系统后,环境变量加载顺序

  • 登陆shell:(SSH或在控制台登录)需要输入账户密码

    • /etc/profile -> /etc/profile.d/*.sh -> /etc/bashrc -> ~/.bashrc -> ~/.bash_profile
  • 非登陆shell:(不需要输入账户密码)

    • ~/.bashrc -> /etc/bashrc -> /etc/profile.d/*.sh

验证可以通过每个文件新增echo输出,su - xxx / su xxx


Read more »
0%