2025-04-20
ETCD的适用场景
2025-04-20 ~ 2025-04-20

简述 ETCD 适应的场景?

etcd 基于其优秀的特点,可广泛的应用于以下场景:

  • 服务发现 (Service Discovery):服务发现主要解决在同一个分布式集群中的进程或服务,要如何才能找到对方并建立连接。本质上来说,服务发现就是想要了解集群中是否有进程在监听 udp 或 tcp 端口,并且通过名字就可以查找和连接。
  • 消息发布与订阅:在分布式系统中,最适用的一种组件间通信方式就是消息发布与订阅。即构建一个配置共享中心,数据提供者在这个配置中心发布消息,而消息使用者则订阅他们关心的主题,一旦主题有消息发布,就会实时通知订阅者。通过这种方式可以做到分布式系统配置的集中式管理与动态更新。应用中用到的一些配置信息放到 etcd 上进行集中管理。
  • 负载均衡:在分布式系统中,为了保证服务的高可用以及数据的一致性,通常都会把数据和服务部署多份,以此达到对等服务,即使其中的某一个服务失效了,也不影响使用。etcd 本身分布式架构存储的信息访问支持负载均衡。etcd 集群化以后,每个 etcd 的核心节点都可以处理用户的请求。所以,把数据量小但是访问频繁的消息数据直接存储到 etcd 中也可以实现负载均衡的效果。
  • 分布式通知与协调:与消息发布和订阅类似,都用到了 etcd 中的 Watcher 机制,通过注册与异步通知机制,实现分布式环境下不同系统之间的通知与协调,从而对数据变更做到实时处理。
  • 分布式锁:因为 etcd 使用 Raft 算法保持了数据的强一致性,某次操作存储到集群中的值必然是全局一致的,所以很容易实现分布式锁。锁服务有两种使用方式,一是保持独占,二是控制时序。
  • 集群监控与 Leader 竞选:通过 etcd 来进行监控实现起来非常简单并且实时性强。
2025-04-15
什么是云原生
2025-04-15 ~ 2025-04-15

什么是云原生? (aliyun.com)

云原生是一种现代化的软件开发和部署方法,旨在充分利用云计算的优势,提高应用程序的可伸缩性、弹性和可靠性。

云原生的详细定义包括云原生计算基金会(Cloud Native Computing Foundation,CNCF)的官方定义和延伸含义。

2023-06-18
docker容器cmd执行多条命令
2023-06-18 ~ 2023-06-18
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
mysql:
    build:
      context: ./mariadb
      dockerfile: ./Dockerfile
    container_name: mariadb_yoga
    restart: on-failure
    command:
      - /bin/bash
      - -c
      - |
        mysqld --user=root
        mysql -u root -p 123456 < /db/init_db.sql
    volumes:
      - /var/lib/openstack/yoga/mysql:/var/lib/mysql
      - /etc/localtime:/etc/localtime
    ports:
      - "23306:3306"  # host物理直接映射端口为13306
    environment:
      MYSQL_ROOT_PASSWORD: '123456' # root管理员用户密码
    networks:
      network:
        ipv4_address: 177.177.0.13
2023-06-18
docker容器重启策略
2023-06-18 ~ 2023-06-18

可选策略

在docker run通过 –restart 设置守护机制:

  • no: 不自动重新启动容器(默认)
  • on-failure: 容器发生error而退出(容器退出状态不为0)重启容器
  • unless-stopped: 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
  • always: 如果容器停止,总是重新启动容器。如果手动kill容器,则无法自动重启。

docker update追加命令

运行中的容器,当时没有指定restart可以通过update命令追加

2023-06-18
docker联合文件系统
2023-06-18 ~ 2023-06-18

参考:https://www.jianshu.com/p/5c1f152ac4a6

1. 前言

(Union filesystem)联合文件系统允许我们把多个文件系统逻辑上合并成一个文件系统,组成Union filesystem的文件系统不必相同(它们可以是ext2/3/4,vfat,ntfs,jffs…)。overlay是联合文件系统的一种(a ufs…),overlay文件系统构建于其他文件系统之上,overlay其实更像是个挂载系统(mount system),功能是把不同的文件系统挂载到统一的路径。

2023-06-18
hypervisor
2023-06-18 ~ 2023-06-18
Hypervisor:一种运行在物理服务器和操作系统之间的中间层软件,可以允许多个操作系统和应用共享一套基础物理硬件. 可以将Hypervisor看做是虚拟环境中的"元"操作系统,可以协调访问服务器上的所有物理设备的虚拟机,所以又称为虚拟机监视器(virtual machine monitor). Hypervisor是所有虚拟化技术的核心,非中断的支持多工作负载迁移是Hypervisor的基本功能.
2023-06-18
修改Centos官方云镜像的root密码
2023-06-18 ~ 2023-06-18

https://developer.aliyun.com/article/799104

还可以看看这个

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
yum -y install libguestfs-tools

要设置root密码,请使用以下命令:
virt-customize -a CentOS-7-x86_64-GenericCloud.qcow2 --root-password password:123456

[   0.0] Examining the guest ...

[   1.9] Setting a random seed

[   1.9] Setting passwords

[   6.8] Finishing off

注:

CentOS-7-x86_64-GenericCloud.qcow2是要修改图像的名称。

123456是为root用户设置的密码。
2023-06-18
容器化和kvm的区别
2023-06-18 ~ 2023-06-18

容器和KVM虚拟化是两种不同的虚拟化技术,它们各有优缺点,适用于不同的场景。

容器

容器是一种轻量级的虚拟化技术,利用操作系统层面的虚拟化实现。每个容器都运行在一个独立的命名空间中,可以看作是进程的一个集合,共享主机操作系统的内核。容器可以快速启动、停止和迁移,占用的资源比KVM虚拟机少,因此更适合部署大规模的分布式应用程序。常见的容器技术包括Docker、LXC等。 优点:

2023-06-08
SaaS多租户系统数据隔离实现方案
2023-06-08 ~ 2023-06-08

参考: https://juejin.cn/post/7234763992333189175

背景

简单来说,一个租户就是一个公司的客户,多个租户共用同一个SaaS系统,一旦SaaS系统不可用,那么所有的租户都不可用,

多租户问题,其实是一种架构设计方式,就是在一台或者一组服务器上运行的SaaS系统,可以为多个租户(客户)提供服务,目的是为了让多个租户在互联网环境下使用同一套程序,且保证租户间的数据隔离。从这种架构设计的模式上,不难看出来,多租户架构的重点就是同一套程序下多个租户数据的隔离。由于租户数据是集中存储的,所以要实现数据的安全性,就是看能否实现对租户数据的隔离,防止租户数据不经意或被他人恶意地获取和篡改。

2022-11-30
docker format常用选项
2022-11-30 ~ 2022-11-30
格式化选项(–format) .ID 容器ID .Image 镜像ID .Command Quoted command .CreatedAt 创建容器的时间点. .RunningFor 从容器创建到现在过去的时间. .Ports 暴露的端口. .Status 容器状态. .Size 容器占用硬盘大小. .Names 容器名称. .Labels 容器所有的标签. .Label 指定label的值 例如’{{.Label “com.docker.swarm.cpu”}}’ .Mounts 挂载到这个容器的数据卷名称
2022-10-23
数据共享与持久化
2022-10-23 ~ 2022-10-23

在 Docker 内部以及容器之间管理数据,在容器中管理数据主要有两种方式:

  • 数据卷(Data Volumes)
  • 挂载主机目录 (Bind mounts)

数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性:

2022-10-19
docker run命令详解
2022-10-19 ~ 2022-10-19

命令格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Usage: Run a command in a new container

中文意思为:通过run命令创建一个新的容器(container)

  • 常用选项说明
    • d, --detach=false, 指定容器运行于前台还是后台,默认为false
    • i, --interactive=false, 打开STDIN,用于控制台交互
    • t, --tty=false, 分配tty设备,该可以支持终端登录,默认为false
    • u, --user="", 指定容器的用户
    • a, --attach=[], 登录容器(必须是以docker run -d启动的容器)
    • w, --workdir="", 指定容器的工作目录
    • c, --cpu-shares=0, 设置容器CPU权重,在CPU共享场景使用
    • e, --env=[], 指定环境变量,容器中可以使用该环境变量
    • m, --memory="", 指定容器的内存上限
    • P, --publish-all=false, 指定容器暴露的端口
    • p, --publish=[], 指定容器暴露的端口
    • h, --hostname="", 指定容器的主机名
    • v, --volume=[], 给容器挂载存储卷,挂载到容器的某个目录
    • -volumes-from=[], 给容器挂载其他容器上的卷,挂载到容器的某个目录
    • -cap-add=[], 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
    • -cap-drop=[], 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
    • -cidfile="", 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
    • -cpuset="", 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
    • -device=[], 添加主机设备给容器,相当于设备直通
    • -dns=[], 指定容器的dns服务器
    • -dns-search=[], 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
    • -entrypoint="", 覆盖image的入口点
    • -env-file=[], 指定环境变量文件,文件格式为每行一个环境变量
    • -expose=[], 指定容器暴露的端口,即修改镜像的暴露端口
    • -link=[], 指定容器间的关联,使用其他容器的IP、env等信息
    • -lxc-conf=[], 指定容器的配置文件,只有在指定–exec-driver=lxc时使用
    • -name="", 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
    • -net="bridge", 容器网络设置:
      • bridge 使用docker daemon指定的网桥
      • host //容器使用主机的网络
      • container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
      • none 容器使用自己的网络(类似–net=bridge),但是不进行配置
    • -privileged=false, 指定容器是否为特权容器,特权容器拥有所有的capabilities
    • -restart="no", 指定容器停止后的重启策略:
      • no:容器退出时不重启
      • on-failure:容器故障退出(返回值非零)时重启
      • always:容器退出时总是重启
    • -rm=false, 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
    • -sig-proxy=true, 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理

示例

  • 运行一个在后台执行的容器,同时,还能用控制台管理:docker run -i -t -d ubuntu:latest
  • 运行一个带命令在后台不断执行的容器,不直接展示容器内部信息:docker run -d ubuntu:latest ping www.docker.com
  • 运行一个在后台不断执行的容器,同时带有命令,程序被终止后还能重启继续跑,还能用控制台管理,docker run -d --restart=always ubuntu:latest ping www.docker.com
  • 为容器指定一个名字,docker run -d --name=ubuntu_server ubuntu:latest
  • 容器暴露80端口,并指定宿主机80端口与其通信(: 之前是宿主机端口,之后是容器需暴露的端口),docker run -d --name=ubuntu_server -p 80:80 ubuntu:latest
  • 指定容器内目录与宿主机目录共享(: 之前是宿主机文件夹,之后是容器需共享的文件夹),docker run -d --name=ubuntu_server -v /etc/www:/var/www ubuntu:latest
2022-10-19
docker启动命令逆向输出
2022-10-19 ~ 2022-10-19

主要依靠的一个开源软件runlike

See runlike-github

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12

yum clean all
yum makecache

yum install python-pip python-setuptools -y

pip install runlike

# 若此时正在运行的一个容器为`redis`
# 则
runlike redis > redis_start.sh
# 此时redis_start.sh即为docker启动redis容器的命令
2022-10-19
docker网络
2022-10-19 ~ 2022-10-19

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过-P-p参数来指定端口映射。

当使用-P标记时,Docker会随机映射一个端口到内部容器开放的网络端口。

2022-10-19
docker网络模式
2022-10-19 ~ 2022-10-19

Bridge模式

Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。从docker0子网中分配一个 IP 给容器使用,并设置 docker0 的 IP 地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker 将 veth pair 设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到 docker0 网桥中。可以通过brctl show命令查看。