博文

目前显示的是 五月, 2024的博文

容器技术所涉及Linux内核关键技术

图片
这篇文章详细介绍了容器技术的发展历程以及容器技术所依赖的 Linux 内核关键技术,包括 Namespace 和 CGroups。作者从1979年 chroot 的出现开始,描述了容器技术的前世今生,并逐一阐述了 FreeBSD Jails、Linux VServer、Solaris 容器、OpenVZ、Process 容器等一系列早期容器技术的发展历程。接着,文章深入介绍了 Namespace 和 CGroups 这两项关键技术,并通过大量的实例代码示范了如何使用这些技术实现网络隔离和资源限制。总的来说,这篇文章对于理解容器技术的起源和底层原理非常有帮助。 关键要点 容器技术的发展历程。 Namespace 技术的介绍和分类。 Namespace 技术的应用案例,包括创建、删除、迁移虚拟网卡等操作。 CGroups 技术的介绍和功能。 CGroups 技术的应用案例,包括限制进程 CPU 使用。 容器技术所涉及Linux内核关键技术 一、容器技术前世今生 1.1 1979年 — chroot 容器技术的概念可以追溯到1979年的UNIX chroot。 它是一套“UNIX操作系统”系统,旨在将其root目录及其它子目录变更至文件系统内的新位置,且只接受特定进程的访问。 这项功能的设计目的在于为每个进程提供一套隔离化磁盘空间。 1982年其被添加至BSD当中。 1.2 2000年 — FreeBSD Jails FreeBSD Jails是由Derrick T. Woolworth于2000年在FreeBSD研发协会中构建而成的早期容器技术之一。 这是一套“操作系统”系统,与chroot的定位类似,不过其中包含有其它进程沙箱机制以对文件系统、用户及网络等资源进行隔离。 通过这种方式,它能够为每个Jail、定制化软件安装包乃至配置方案等提供一个对应的IP地址。 1.3 2001年 — Linux VServer Linux VServer属于另一种jail机制,其能够被用于保护计算机系统之上各分区资源的安全(包括文件系统、CPU时间、网络地址以及内存等)。 每个分区被称为一套安全背景(security context),而其中的虚拟化系统则被称为一套虚拟私有服务器。 1.4 2004年 — Solaris容器 So...

应用(Application)部署容器化演进之路

图片
一、应用程序部署痛点 1.1 应用程序部署流程 举例:部署一个JAVA编程语言开发的Web应用,以War包放入Tomcat方式部署。 部署过程如下: 服务器配置运行环境:JAVA代码运行环境,例如JDK或JRE 服务器上安装Tomcat web中间件,用于运行War包 把JAVA Web对应的War包放置于Tomcat对应目录 在服务器上启动Tomcat应用 可选:涉及数据库(MySQL)或缓存系统(Redis)等都需要逐一部署。 1.2 应用程序扩缩容 涉及多台服务器部署相同的上述环境 痛点:上述环境部署要重新实施一遍,较浪费人力与物力成本 1.3 应用程序多环境部署 环境:本地测试环境、预发布环境、生产环境 在本地测试环境运行没有问题,但在预发布环境中出现了问题,甚至上面2种环境都没有问题,到了生产环境就有问题了。 需求:一次成功,可到处运行。 二、 计算资源应用演进过程 2.1 使用物理服务器痛点 从物理服务器自身管理角度 物理服务器环境部署人力成本大,特别是在自动化手段不足的情况下,依靠人肉运维的方式解决。 当物理服务器出现宕机后,服务器重启时间过长,短则1-2分钟,长则3-5分钟,有背于服务器在线时长达到99.999999999%标准的要求 物理服务器在应用程序运行期间硬件出现故障,解决较麻烦 物理服务器计算资源不能有效调度使用,无法发挥其充足资源的优势 从物理服务器部署应用程序角度 物理服务器环境部署浪费时间,没有自动化运维手段,时间是成倍增加的 在物理服务器上进行应用程序配置变更,需要重新实施前述步骤 2.2 使用虚拟机优点与缺点 2.2.1 使用虚拟机优秀点 从虚拟机本身管理角度 虚拟机较物理服务器轻量,可借助虚拟机模板实现虚拟机快捷生成及应用 虚拟机中部署应用与物理服务器一样可控性强,且当虚拟机出现故障时,可直接使用新的虚拟机代替 在物理服务器中使用虚拟机可高效使用物理服务器的资源 虚拟机与物理服务器一样可达到良好的应用程序运行环境的隔离 从在虚拟机中部署应用程序角度 在虚拟机中部署应用,容易扩容及缩容实现 与物理服务器相比较,当部署应用程序的虚拟机出现宕机时,可以快速启动,时间通常可达秒级,10秒或20秒即可启动,应用程序可以继续提供服务 应用程...

redis主从&redis-sentinel哨兵模式

图片
背景:三台vps,都部署redis 见redis部署 master:10.170.0.2 slave1:10.140.0.4 slave2:10.140.0.5 一,redis主从配置 修改配置文件 master: bind 0.0.0.0 #监听本机所有地址 protected-mode no #关闭保护模式 slave1: replicaof 10.170.0.2 6379 bind 0.0.0.0 protected-mode no slave2: replicaof 10.170.0.2 6379 bind 0.0.0.0 protected-mode no 查看效果:redis-cli info replication 二,redis哨兵模式(Redis Sentinel ) Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案。实际上这意味着你可以使用Sentinel模式创建一个可以不用人为干预而应对各种故障的Redis部署。 作用:   1):Master状态检测   2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave   3):Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换  在上面主从实验的基础上进行: 修改哨兵配置文件sentinel.conf #所有节点 #为了实验效果更明显,时延配置比较短(缺省值的10%) vim /usr/local/redis-7.2.4/sentinel.conf sentinel monitor mymaster 10.170.0.2 6379 2 sentinel down-after-milliseco...

Linux安装部署redis

图片
 介绍:redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。 背景:Centos Steam9 VPS一台 一,安装redis #下载这里下载的是最新版 wget https://github.com/redis/redis/archive/refs/tags/7.2.4.tar.gz #安装依赖 dnf update && dnf install -y tcl gcc jemalloc-devel #Centos安装依赖 apt install -y build-essential libjemalloc-dev #Debian安装依赖 #解压、编译安装 tar xzf 7.2.4.tar.gz && cd redis-7.2.4 make make install 先启动redis-server 再运行客户端测试(如果报错,查看一下服务、端口有没有启动) 运行src/redis-cli shutdown 停止redis服务 二,修改配置文件 先备份配置文件 [root@es1 redis-7.2.4]# cp redis.conf redis.conf.back [root@es1 redis-7.2.4]# vim redis.conf # 允许访问的地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问,生产环境不要设置为0.0.0.0 bind 0.0.0.0 # 守护进程,修改为yes后即可后台运行,默认no daemonize yes # 密码,设置后访问Redis必须输入密码,默认无 requirepass passwd123 测试 #指定配置文件启动服务 src/redis-server redis.conf 可以看到需要密码才能使用 三,配置开机启动 #先关掉redis服务 src/redis-cli -a passwd123 shutdown #然后移一下位置 mv redis-7.2.4/ /usr/local/ #最后编辑系...