自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 论坛 (1)

原创 Tomcat 虚拟主机实现多站点与热部署

Tomcat部署有两种,要么是war包,页面时jar包。这两种方式都可以。目前war包用的最多。很多时候线上将代码写好编译完了一输出就输出了一个war包。然后开发给你这个war包要你上线。对于我们来说只需要丢到站点目录下面就行了[root@localhost ~]# lsanaconda-ks.cfg zrlog.war这里准备好了一个zrlog war包,我们将不破坏默认的站点,再给其添加一个新的站点,新添加站点只需要关注host这几行,默认域名是localhost.这里我们需要修改域名...

2020-09-30 14:43:45 33

原创 Linux 为什么CPU访问硬盘的速度巨慢

http://www.differencebetween.net/technology/difference-between-von-neumann-and-harvard-architecture/机械硬盘(Hard Disk Drive、HDD)和固态硬盘(Solid State Drive、SSD)是两种最常见的硬盘,作为计算机的外部存储,CPU 想要访问它们存储的数据需要很长时间,如下表所示,在 SSD 中随机访问 4KB 数据所需要的时间是访问主存的 1,500 倍,机械磁盘的寻道时间是访问主

2020-09-29 09:45:44 54

原创 Ansible 常用模块之系统调用类模块 cron|service

前文中,我们介绍了一些常用的文件类模块和命令类模块,这篇文章中我们会介绍一些常用的系统类操作模块。cron模块在了解cron模块的参数之前,先写出一些计划任务的示例,示例如下示例1 5 1 * * * echo test 示例2 1 1 */3 * * echo test 示例3 @reboot echo test 示例4 @hourly echo test上述示例1表示每天的1点5分输出test字符上述示例2表示每3天执行一次计划任务,于当天的...

2020-09-28 20:28:59 15

转载 Kubernetes 在 Scale Up 中使用 Health Check

对于多副本应用,当执行 Scale Up 操作时,新副本会作为 backend 被添加到 Service 的负责均衡中,与已有副本一起处理客户的请求。考虑到应用启动通常都需要一个准备阶段,比如加载缓存数据,连接数据库等,从容器启动到正真能够提供服务是需要一段时间的。我们可以通过 Readiness 探测判断容器是否就绪,避免将请求发送到还没有 ready 的 backend。下面是示例应用的配置文件。重点关注readinessProbe部分。这里我们使用了不同于exec的另一种探测方法 ...

2020-09-28 17:30:59 23

转载 Redis 基本架构:一个键值数据库包含什么?

我们知道,Redis 是典型的键值数据库,所以今天,我准备手把手地带你构建一个简单的键值数据库。为啥要这么做呢?还记得我在开篇词说过吗?Redis 本身比较复杂,如果我们一上来就直接研究一个个具体的技术点,比如“单线程”“缓存”等,虽然可以直接学习到具体的内容,甚至立马就能解决一些小问题,但是这样学,很容易迷失在细枝末节里。从我自己的经验来看,更好的学习方式就是先建立起“系统观”。这也就是说,如果我们想要深入理解和优化 Redis,就必须要对它的总体架构和关键模块有一个全局的认知,然后再深入到具..

2020-09-27 21:52:26 23

原创 Tomcat 多实例部署

#我这里已经启动了一个tomcat [root@www ~]# netstat -tpln | grep javatcp6 0 0 :::8080 :::* LISTEN 4170/java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 4170/java .

2020-09-27 19:56:47 21

转载 Linux 磁盘I/O是怎么工作的(上)

上一节,我们学习了 Linux 文件系统的工作原理。简单回顾一下,文件系统是对存储设备上的文件,进行组织管理的一种机制。而 Linux 在各种文件系统实现上,又抽象了一层虚拟文件系统 VFS,它定义了一组,所有文件系统都支持的,数据结构和标准接口。这样,对应用程序来说,只需要跟 VFS 提供的统一接口交互,而不需要关注文件系统的具体实现;对具体的文件系统来说,只需要按照 VFS 的标准,就可以无缝支持各种应用程序。VFS 内部又通过目录项、索引节点、逻辑块以及超级块等数据结构,来管理文件。目录项

2020-09-27 10:02:05 33

转载 Tomcat 你应该知道的Servlet规范和Servlet容器

浏览器发给服务端的是一个 HTTP 格式的请求,HTTP 服务器收到这个请求后,需要调用服务端程序来处理,所谓的服务端程序就是你写的 Java 类,一般来说不同的请求需要由不同的 Java 类来处理。那么问题来了,HTTP 服务器怎么知道要调用哪个 Java 类的哪个方法呢。最直接的做法是在 HTTP 服务器代码里写一大堆 if else 逻辑判断:如果是 A 请求就调 X 类的 M1 方法,如果是 B 请求就调 Y 类的 M2 方法。但这样做明显有问题,因为 HTTP 服务器的代码跟业务逻辑耦合在一起

2020-09-27 09:45:17 25

原创 Kubernetes 钩子 pod hook

Pod HookKubernetes 为我们的容器提供了生命周期钩子,就是我们说的Pod Hook,Pod Hook 是由 kubelet 发起的,当容器中的进程启动前或者容器中的进程终止之前运行,这是包含在容器的生命周期之中。我们可以同时为 Pod 中的所有容器都配置 hook。Kubernetes 为我们提供了两种钩子函数:PostStart:这个钩子在容器创建后立即执行。但是,并不能保证钩子将在容器ENTRYPOINT之前运行,因为没有参数传递给处理程序。主要用于资源部署、环境准备等。..

2020-09-26 17:29:53 59

原创 Kubernetes 探针之Readiness 探测

Kubernetes三种探针k8s支持存活livenessProbe和就绪readinessProbe两种探针,两种探针都支持以下三种方式一、exec通过执行shell命令的方式,判断退出状态码是否是0,示例: exec: command: - cat - /tmp/healthy二、tcp通过TCP请求的方式,是否能建立tcp连接,示例: tcpSocket: port: 808...

2020-09-25 17:02:04 36

原创 Kubernetes 探针之Liveness 探测

Kubernetes三种探针k8s支持存活livenessProbe和就绪readinessProbe两种探针,两种探针都支持以下三种方式一、exec通过执行shell命令的方式,判断退出状态码是否是0,示例: exec: command: - cat - /tmp/healthy二、tcp通过TCP请求的方式,是否能建立tcp连接,示例: tcpSocket: port: 808...

2020-09-24 17:03:35 45

转载 Kubernetes 存活探针和就绪探针的最佳实践

Kubernetes存活探针和就绪探针的最佳实践【编者的话】Kubernetes提供了两种探针来检查容器的状态,Liveliness和Readiness,根据官方文档,Liveliness探针是为了查看容器是否正在运行,翻译为存活探针,Readiness探针是为了查看容器是否准备好接受HTTP请求,翻译为就绪探针。这篇文章主要阐述了作者在使用这两种探针时总结的一些最佳实践。在Kubernetes中,Pod是Kubernetes创建及管理的最小的可部署的计算单元,一个Pod由一个或者多个容器(Doc..

2020-09-24 16:08:52 24

转载 Tomcat server.xml 文件配置详解!

前言Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器,使用非常广泛。server.xml是Tomcat中最重要的配置文件,server.xml的每一个元素都对应了Tomcat中的一个组件;通过对xml文件中元素的配置,可以实现对Tomcat中各个组件的控制。因此,学习server.xml文件的配置,对于了解和使用Tomcat至关重要。本文将通过实例,介绍server.xml中各个组件的配置,并详细说明Tomcat各个核心组件的作用以及各个组件之间的相互关系。说明:由...

2020-09-24 11:59:23 33

转载 HTTP协议必知必会

在开始学习 Web 容器之前,我想先问你一个问题:HTTP 和 HTML 有什么区别?为什么我会问这个问题?你可以把它当作一个入门测试,检测一下自己的对 HTTP 协议的理解。因为 Tomcat 和 Jetty 本身就是一个“HTTP 服务器 + Servlet 容器”,如果你想深入理解 Tomcat 和 Jetty 的工作原理,我认为理解 HTTP 协议的工作原理是学习的基础。如果你对这个问题还稍有迟疑,那么请跟我一起来回顾一下 HTTP 协议吧。HTTP 的本质HTTP协议是...

2020-09-24 10:15:22 55

原创 Docker 网络之bridge外部世界如何访问容器

上篇博客介绍了容器如何访问网络,今天讨论另一个方向:外部网络如何访问到容器?答案是:端口映射。docker 可将容器对外提供服务的端口映射到 host 的某个端口,外网通过该端口访问容器。容器启动时通过-p参数映射端口:[root@www ~]# docker run -itd -p 80 nginx9818886ac111489d4a4364047be2fccaedd0d94650056504c0238d84a00158c2[root@www ~]# docker psCONTAINE

2020-09-23 21:56:53 46

原创 Ansible 常用模块之命令类模块 command|shell|script

在本博客中,ansible是一个系列文章,我们会尽量以通俗易懂的方式总结ansible的相关知识点。ansible系列博文直达链接:ansible轻松入门系列"ansible系列"中的每篇文章都建立在前文的基础之上,所以,请按照顺序阅读这些文章,否则有可能在阅读中遇到障碍。前文中,我们介绍了一些常用的文件类操作的模块,这篇文章中我们会介绍一些常用的命令类操作的模块。command模块command模块可以帮助我们在远程主机上执行命令注意:使用command模块在远程主机中执行命令...

2020-09-23 20:57:15 22

原创 Kubernets k8s中yml格式与pod yml格式

YAML 基础它的基本语法规则如下:大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格。 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 #表示注释,从这个字符一直到行尾,都会被解析器忽略在kubernetes 中,只需要两种结构类型:Lists MapsMapsMap 是字典,就是一个key:value的键值对apiVersion: v1kind: Podmetadata: name: demo-pod labels...

2020-09-23 19:50:09 23

原创 Ansible 常用模块之文件操作查找与内容替换 find|replace

前文中已经总结了一些文件操作类的模块,如果你需要了解它们,可以查看我之前博客。这篇文章我们继续来了解一些文件操作类模块。find模块find模块可以帮助我们在远程主机中查找符合条件的文件,就像find命令一样。此处我们介绍一些find模块的常用参数,你可以先对这些参数有一个大概了解,然后再看小示例。paths参数:必须参数,指定在哪个目录中查找文件,可以指定多个路径,路径间用逗号隔开,此参数有别名,使用别名path或者别名name可以代替paths。 recurse参数:...

2020-09-22 17:13:19 56

原创 Kubernetes k8s当中的 Health Check

强大的自愈能力是 Kubernetes 这类容器编排引擎的一个重要特性。自愈的默认实现方式是自动重启发生故障的容器。除此之外,用户还可以利用 Liveness 和 Readiness 探测机制设置更精细的健康检查,进而实现如下需求:零停机部署 避免部署无效的镜像 更加安全的滚动升级下面通过实践学习 Kubernetes 的 Health Check 功能。默认的健康检查我们首先学习 Kubernetes 默认的健康检查机制:每个容器启动时都会执行一个进程,此进程由 Doc...

2020-09-22 16:25:47 48

原创 Tomcat 8080|8009|8005 端口作用

从tomcat配置文件中,我们可以看出,在启动tomcat的时候默认启动了3个端口,分别是8080(8443)、8009、8005。8080(8443)端口<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />这个应该是我们最熟悉的一个,平常开发测试也经常用,该Connector用于监听浏览器发送的请求,设...

2020-09-22 11:58:12 39

原创 Docker 网络之bridge如何与外部通信

讨论容器如何与外部世界通信。这里涉及两个方向:容器访问外部世界 外部世界访问容器容器访问外部世界在我们当前的实验环境下,docker host 是可以访问外网的。[root@localhost ~]# ping -c 2 www.baidu.comPING www.a.shifen.com (180.101.49.12) 56(84) bytes of data.64 bytes from 180.101.49.12 (180.101.49.12): icmp_seq=1 t...

2020-09-21 21:31:49 54

转载 Linux 文件系统是怎么工作的?

同 CPU、内存一样,磁盘和文件系统的管理,也是操作系统最核心的功能。磁盘为系统提供了最基本的持久化存储 文件系统则在磁盘的基础上,提供了一个用来管理文件的树状结构那么,磁盘和文件系统是怎么工作的呢?又有哪些指标可以衡量它们的性能呢?今天,我就带你先来看看,Linux 文件系统的工作原理。磁盘的工作原理,我们下一节再来学习。索引节点和目录项文件系统,本身是对存储设备上的文件,进行组织管理的机制。组织方式不同,就会形成不同的文件系统。你要记住最重要的一点,在 Linux ...

2020-09-21 11:47:07 69

转载 Linux 终端查看最消耗CPU内存的进程

1.CPU占用最多的前10个进程ps auxw|head -1;ps auxw|sort -rn -k3|head -102.内存消耗最多的前10个进程ps auxw|head -1;ps auxw|sort -rn -k4|head -103.虚拟内存使用最多的前10个进程ps auxw|head -1;ps auxw|sort -rn -k5|head -104.也可以试试ps auxw --sort=rssps auxw --sort=%cpu5.

2020-09-21 11:08:55 15

原创 Kubernetes Service IP 原理

Service Cluster IP 是一个虚拟 IP,是由 Kubernetes 节点上的 iptables 规则管理的。[root@localhost ~]# kubectl get serviceNAME CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes 10.254.0.1 <none> 443/TCP 29dservice 10.254.92.2...

2020-09-19 18:28:21 69

原创 Ansible 常用模块之文件操作copy|file文件拷贝与创建

前文中,我们已经介绍了怎样使用模块,而且我们知道,ansible有很多模块,每个模块都有自己的功能,"模块"涉及到的方向比较多,所以对于个人来说,并没有必要了解所有的模块,我们只需要根据实际的业务场景了解相应的模块即可,而且ansible比较贴心,ansible根据模块的功能对这些模块进行了大致的分类,比如,如果某些模块都是操作文件的,就把它们分类到文件类模块中,如果某些模块都是操作数据库的,就把他们分类到数据库类模块中,那么,ansible把模块分为了哪些类呢?你可以参考官方手册找到答案。上述链接..

2020-09-18 17:14:02 102

转载 Docker 必须要懂的经典网络模式 bridge 网络

Docker 安装时会创建一个 命名为docker0的 linux bridge。如果不指定--network,创建的容器默认都会挂到docker0上。当前docker0上没有任何其他网络设备,我们创建一个容器看看有什么变化。一个新的网络接口veth28c57df被挂到了docker0上,veth28c57df就是新创建容器的虚拟网卡。下面看一下容器的网络配置。容器有一个网卡eth0@if34。大家可能会问了,为什么不是veth28c57df呢?实际上e...

2020-09-16 22:33:26 12

原创 Iptables 一文带你入门iptables

这篇文章会尽量以通俗易懂的方式描述iptables的相关概念,请耐心的读完它。防火墙相关概念此处先描述一些相关概念。从逻辑上讲。防火墙可以大体分为主机防火墙和网络防火墙。主机防火墙:针对于单个主机进行防护。 网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网。网络防火墙和主机防火墙并不冲突,可以理解为,网络防火墙主外(集体), 主机防火墙主内(个人)。从物理上讲,防火墙可以分为硬件防火墙和软件防火墙。硬件防火墙:在硬件级别实...

2020-09-16 16:08:29 27

原创 Linux 你真正了解 /proc/meminfo吗

/proc/meminfo是了解Linux系统内存使用状况的主要接口,我们最常用的”free”、”vmstat”等命令就是通过它获取数据的 ,/proc/meminfo所包含的信息比”free”等命令要丰富得多,然而真正理解它并不容易,比如我们知道”Cached”统计的是文件缓存页,manpage上说是“In-memory cache for files read from the disk (the pagecache)”,那为什么它不等于[Active(file)+Inactive(file)]...

2020-09-16 15:16:36 13

转载 Docker 容器数据卷挂载小结

情况一、本地不存在文件挂载到容器存在文件首先是当本地不存在该文件,而容器内存在该文件的情况,尝试把不存在的文件挂载到存在该文件的容器中。以一个 Alpine 镜像为例,这里把一个修改后的 Alpine 镜像打了新标签,叫做 volume_test:# 本地目录不存在 test 文件。$ docker run --name=test -v ~/test.txt:/etc/hosts -d volume_test0cba2e50229df7508c616bd456c4ab131f2fe1a8838

2020-09-14 22:28:36 35

原创 Docker -v 数据卷挂载nginx文件

docker可以支持把一个宿主机上的目录挂载到镜像里。docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定。比如启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定:docker run -it -v /test:/soft centos /bin/bash这样在容器启动后,容器内会自动创建/soft的目录。本文将介绍Docker中运行nginx并挂载本地目录到镜像中的方法Nginx配置文件路径(关键)查看nginx镜像里面配.

2020-09-14 22:00:41 67

原创 Ansible 常用模块之文件内容修改 blockinfile|lineinfile

Ansible yum模块实战conf_file 设定远程yum执行时所依赖的配置文件disable_gpg_check 安装之前是否检查gpg_keyname 软件名称,支持软件组安装update_cache 更新缓存enablerepo 指定repo源skip_broken 跳过异常软件节点state 包括:installed 、present、 latest 、absent 、

2020-09-14 16:51:23 137

原创 Kubernetes Service ClusterIp为集群内部提供服务

我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉。Deployment 等 controller 会通过动态创建和销毁 Pod 来保证应用整体的健壮性。换句话说,Pod 是脆弱的,但应用是健壮的。每个 Pod 都有自己的 IP 地址。当 controller 用新 Pod 替代发生故障的 Pod 时,新 Pod 会分配到新的 IP 地址。这样就产生了一个问题:如果一组 Pod 对外提供服务(比如 HTTP),它们的 IP 很有可..

2020-09-14 16:19:28 16

转载 Linux 关于内存最疑惑的几个问题

问题 1:内存回收与 OOM实际上包括四个子问题,即:怎么理解 LRU 内存回收? 回收后的内存又到哪里去了? OOM 是按照虚拟内存还是实际内存来打分? 怎么估计应用程序的最小内存?一旦发现内存紧张,系统会通过三种方式回收内存。我们来复习一下,这三种方式分别是 :基于 LRU(Least Recently Used)算法,回收缓存 基于 Swap 机制,回收不常访问的匿名页 基于 OOM(Out of Memory)机制,杀掉占用大量内存的进程 前两种方式,缓存回收和 ...

2020-09-14 11:34:02 93

翻译 Nginx Socket Sharding

Socket ShardingSocket sharding was first introduced in NGINX1.9.1. This feature leverages theSO_REUSEPORTsocket option introduced in version3.9 of the Linux kernel. When the option is enabled, the Linux kernel itself distributes new connections eve...

2020-09-14 10:46:19 17

转载 Kubenetes deployment控制pod行为

伸缩(Scale Up/Down)是指在线增加或减少 Pod 的副本数Deploymentnginx-deployment初始是两个副本。k8s-node1和k8s-node2上各跑了一个副本。现在修改 nginx.yml,将副本改成 5 个。再次执行kubectl apply:三个新副本被创建并调度到k8s-node1和k8s-node2上。用 label 控制 Pod 的位置默认配置下,Scheduler 会将 Pod 调度到所有可用的 N...

2020-09-10 16:19:35 24

原创 Ansible 导入剧本(import_playbook)和导入任务(import_tasks)

如果你的playbook包含了许多许多的功能,即包含了多个play,那么你需要整合所有任务到单个playbook中这里将前面所有playbook集合到单个playbook文件中去,这样就可以一次性执行所有任务。比如下面所示,这里只是举个例子,没有将全部展示出来。内容很长,可能你也感受到了,可读性很差,维护也很不方便。更友好的一种组织方式是将各个任务分类,各自存放在不同的playbook文件中(就像未整合那样),然后使用一个入口playbook文件引入所有任务文件。例如∶(1)配置主.

2020-09-09 16:46:29 63

转载 Linux 为什么系统的Swap变高了

上一节,我通过一个斐波那契数列的案例,带你学习了内存泄漏的分析。如果在程序中直接或间接地分配了动态内存,你一定要记得释放掉它们,否则就会导致内存泄漏,严重时甚至会耗尽系统内存。不过,反过来讲,当发生了内存泄漏时,或者运行了大内存的应用程序,导致系统的内存资源紧张时,系统又会如何应对呢?在内存基础篇我们已经学过,这其实会导致两种可能结果,内存回收和 OOM 杀死进程。我们先来看后一个可能结果,内存资源紧张导致的 OOM(Out Of Memory),相对容易理解,指的是系统杀死占用大量内存的进程.

2020-09-09 12:02:07 29

原创 Nginx 处理一个 HTTP 请求的全过程

前面给大家讲了Nginx 是如何处理 HTTP请求头部的,接下来就到了真正处理 HTTP 请求的阶段了。先看下面这张图,这张图是 Nginx 处理 HTTP 请求的示意图,虽然简单,但是却很好的说明了整个过程。Read Request Headers:解析请求头。 Identify Configuration Block:识别由哪一个 location 进行处理,匹配 URL。 Apply Rate Limits:判断是否限速。例如可能这个请求并发的连接数太多超过了限制,或者 QPS 太高。 P.

2020-09-09 10:28:43 39

原创 Ansible 常用模块(一)

SELINUX 的策略配置 SELINUX 的策略, 需要重启机器参数 (= 必须):conf 如果不是标准设置,则需提供 SELinux 的配置文件路径 [Default: /etc/selinux/config]policy 当状态不是`disabled'时,SELinux使用的策略名 (example: `targeted') [Default: None]= state SELinux 模式 (Choices:.

2020-09-08 18:01:03 40

转载 Kubernetes deployment创建资源以及yaml

k8s 创建资源的两种方式命令 vs 配置文件Kubernetes 支持两种方式创建资源:1.用 kubectl 命令直接创建,比如:kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2在命令行中通过参数指定资源的属性。2. 通过配置文件和kubectl apply创建,要完成前面同样的工作,可执行命令:kubectl apply -f nginx.ymlnginx.yml 的内容为:资源的..

2020-09-08 17:08:50 50

空空如也

Waterloo Bridge.的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也
提示
确定要删除当前文章?
取消 删除