什么是gRPC RPC 是远程过程调用 (Remote Procedure Call)的缩写。在 RPC 中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,使您可以更轻松地创建分布式应用程序和服务。
gRPC 是 Google 开源的基于 Protobuf 和 Http2.0 协议的通信框架,底层由netty提供。
是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。
特点 基于HTTP/2协议实现,实现多路复用,双向流等特点。 基于 Protobuf 协议,支持多种语言。 参考 gRPC 官方文档中文版
推荐学习 gRPC入门 简介 gRPC入门 Protobuf gRPC入门 搭建完整gRPC gRPC入门 实现双向流拒绝某度盘,支持蓝凑盘, 欢迎留言,提供资源。只提供最优质的资源。
序列 书名 备注 1 高性能MySQL(第3版) 带目录 2 设计模式之禅 带目录,第1版本排查问题 使用top 再按大写M, 对内存采用降序显示,一目了然看到谁占用内存最高。
定位到rsyslogd进程占用内存25.7%,非常可怕,需要急需解决掉它。
什么是rsyslog: 系统提供的多线性日志系统,参考: https://www.rsyslog.com/
解决问题 rsyslogd是它的守护进程,可以通过systemctl status rsyslog 查看运行状态
红色显示错误信息。
使用journalctl --verify 检查系统日志卷文件损坏情况
如果检查出来有红色的文件,则直接删除即可。
删除/var/lib/rsyslog/imjournal.state 文件
重启rsyslogd进程, systemctl restart rsyslog
然后使用 top 查看,内存占用率是否没有啦。
避免再次发生 修改/etc/rsyslog.conf 文件
最后行添加2行代码
$imjournalRatelimitInterval 0 $imjournalRatelimitBurst 0 重启服务:systemctl restart rsyslog
关闭 journal 压缩配置
vim /etc/systemd/journald.conf # 找到 #Compress=yes 修改成 no Compress=no # 重启服务 systemctl restart systemd-journald适合于 CentOS 系统
docker 一键安装 curl -sSL https://cdn.jsdelivr.net/gh/yezihack/assets/sh/docker-install.sh |sudo sh #!/bin/bash ################ # CentOS 一键安装 # From: sgfoot.com ################# # 卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 设置仓库 sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 # 使用阿里源地址 sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装 Docker Engine sudo yum install docker-ce docker-ce-cli containerd.io -y # 启动 systemctl start docker # 测试一下 sudo docker run hello-world echo "安装完毕" docker-compose 安装 docker-compose 是负责 docker 编排使用的仅适合用 CentOS 7
node_export 安装 linux 服务器信息等资源收集安装包
一键安装
curl -sSL http://s1.sgfoot.com/sh/node_exporter.sh |sh 验证 netstat -nplt |grep node_exporter 配置nginx安全访问 如果涉及到外网访问则需要配置密码访问
参考:nginx 添加权限验证
htpasswd -bc /etc/nginx/htpasswd.users sgfoot sgfoot.pass # sgfoot 是帐号名 # sgfoot.pass 是密码 nginx 的vhost配置 node_exporter.conf
server { listen 80; server_name node_exporter.io; location / { auth_basic "Prometheus"; auth_basic_user_file /etc/nginx/htpasswd.users;# 验证文件 proxy_pass http://127.0.0.1:9100; } } 添加 prometheus 节点 配置 host
vim /etc/hosts 127.0.0.1 mysqld_exporter.io vim /data/local/prometheus/prometheus.yml 在 node_exporter.targets 添加 host:port
scrape_configs: - job_name: 'node_exporter' static_configs: - targets: ['sgfoot.什么是docker Docker 是 dotCloud 公司开源的一款产品,2013年开源(基于golang开发)。
Docker 英文意思是“搬运工", 是一种容器化技术,将您的运行软件封到一个沙盒里,随意搬运的应用容器引擎。
容器技术是所有云应用的基石,也把互联网升到到下一代。足以说明 docker 的强大之处。
Google 自2004年开始使用容器技术,对Docker的贡献之大,开源了Cgroup和Imctfy项目,还开源了容器管理系统 Kubernetes.
向开源致敬!
Docker 架构 采用 c/s 模式体系架构, Docker 客户端与 Docker Daemon 守护进程通信。
Docker Daemon: 是Docker服务端的守护进程, 用来监听 Docker API 的请求和管理 Docker 对象,比如镜像、容器、网络和 Volume。 Docker Client: docker client 是我们和 Docker 进行交互的最主要的方式方法 Docker Registry:用来存储 Docker 镜像的仓库 Images:镜像,镜像是一个只读模板 Containers:容器,容器是一个镜像的可运行的实例,容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间 底层技术支持:Namespaces(做隔离)、CGroups(做资源限制)、UnionFS(镜像和容器的分层) Docker 核心技术 Docker 的基础是 Linux 容器(LXC) 等技术
三大底层技术实现 Docker 的关键技术
Namespaces 解决了进程,网络及文件系统的隔离 命名空间(namespaces)是 Linux 为我们提供的用于分离进程树、网络接口、挂载点以及进程间通信等资源的方法 CGroups 解决了CPU,内存等资源隔离 Namespaces 并不能够为我们提供物理资源上的隔离。比如CPU,内存等。这样会导致多个Docker抢占物理资源。 Control Groups(简称 CGroups)就是能够隔离宿主机器上的物理资源,例如 CPU、内存、磁盘 I/O 和网络带宽。 UnionFS 解决了镜像隔离 Union File System,联合文件系统 将多个不同位置的目录联合挂载到同一个目录,将相同的部分合并本篇主要介绍,基本数据类型、控制语句和数据结构及函数、方法、接口等知识。为后面学习打下基础,有个基本的认识。也为您将来进阶做准备。
基础语法 之前我们在Go 实践教程-工具及运行(三)写过一个“hello world”程序,讲解了三个概念:package,import,main
注释 写代码时必不可少需要写一些代码注释,方便以后回过头来看程序。Go里面提供两种方法注释
// 单行注释 (注意 //之后需要一个空格,之于为什么,go doc 方便自动生成文档抓取注释) /* 多行注释,在这里面都属于被注释的内容 */ 标识符 标识符用来命名变量,类型等程序实体。允许由大小写字母(a-z|A-Z)和数据(0~9)及下划线(_)组成,但第一个字符必须由字母和下划线组成
a := 10 // ok _a := 22 // ok case := "abc"// 无效变量 error 9a := 10 // 无效变量 error 变量命名 Go 语言的变量命名比较独特,如果你熟悉其它语言你会不习惯的。
先变量名 后跟类型名称
全局变量
必须有 var 关键字
import main var num int func main() { } // 优雅的方法,适合多个变量, 也适用于import 里 var ( num int age int name string ) // 等价于 var num int var age int var name string 函数内的局部变量生产服务器根目录空间余量告急,你可能会选择对重装系统重装,这种方式对生产服务器不友好,也不推荐。网上你可以看到很多文章进行LVM进行根目录扩容,当然一顿猛操作后,发现无计于事,因为你的根目录挂载的磁盘根本不是LVM方式,无法这样操作。在不重装,也不影响线上生产,有没有一种方式可以实现动态扩容呢?答案:有
概要 使用rsync命令带属性方式转移数据 然后再使用lvm方式进行对某些目录进行重装挂载 这样就可以扩出容量。 LVM 原理 LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用
掌握4个基本的逻辑卷概念
PE(Physical Extend) 物理扩展(底层) PV(Physical Volume) 物理卷(底层) VG(Volume Group) 卷组 LV(Logical Volume) 逻辑卷(上层) 工作原理
常用命令操作
# 格式为物理卷 pvcreate /dev/vda1 [可以多个] pvdisplay #查看物理卷 pvs #查看物理卷列表 # 创建卷组 vgcreate vg1 /dev/vda1 # vg1 是卷组名称, /dev/vda1 是分区名称 vgdisplay # 查看卷组 vgs # 查看卷组列表 # 创建逻辑卷 lvcreate -n lv1 -L 50G vg1 # lv1 是逻辑卷名称, 50G 是转成逻辑卷大小 vg1就是卷组 lvdisplay # 查看逻辑卷信息 lvs # 查看逻辑卷列表 实战 查看你的磁盘分区信息(df -h) 查看你的磁盘信息(fdisk -l) 对指点磁盘进行分区操作(fdisk /dev/vdc 每个人的磁盘分区名称不一样) 创建物理卷 创建卷组 创建逻辑卷 对逻辑卷进行格式化 ext4 挂载某目录 # 1.经过前面二篇 Go 简介,Go 环境配置 学习,大家对 Golang 有个大概的了解了, 环境也配置好了,就差上手写代码啦,今天主要介绍 Golang 的开发工具与工具链,如何写出第一个 “Hello World”
Goland 开发工具 编写 Golang ,首选 Goland 开发工具,当然 Goland 是收费的(可试用30天)。国内也有破解教程。自行 Google,在此也会介绍一种快捷的方式
下载 Goland
https://www.jetbrains.com/go/
安装
官方提供:Window, Mac, Linux 三个平台的安装包。
安装过程下一步,下一步即可,在此不赘述。
激活
可能会遇到用一段时间就失效啦,你只需要再次来到这个网站下载激活码,重新激活一次即可。
http://idea.medeming.com/jetbrains/
设置 Go Modules
File -> Settings -> Go -> Go Modules
![image-20200916200143415](https://cdn.jsdelivr.net/gh/yezihack/assets/b/20200916200144.png?imageslim)
将 `GOPROXY=https://goproxy.cn,direct` 填写到 Environment 处。
用于 Go GET 加速下载依赖包。![image-20200916170456456](https://cdn.jsdelivr.net/gh/yezihack/assets/b/20200916170457.png?imageslim)
第一个 Go 程序 新建项目
File -> New -> Project
新建 Go 文件
右击 awesomeProject -> New -> Go -> 选择"Simple Application"docker 的优点,就是简化所有的安装流程。移植性好,安装快捷。
在安装之前,Elasticsearch 与 Kibana 需要注意版本一致。
当前IK分词器也需要一致。见 github release
dockerhub es dockerhub kibana github ik analysis Docker 创建网络栈 后面创建 elaticsearch, kibana 需要用到。
docker network create es-network Elasticsearch 安装 docker pull elasticsearch:7.14.1 docker run -d --name elasticsearch --net es-network -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.14.1 --net es-network 使用刚创建的网络栈 -e "discovery.type=single-node" 设置配置参数为单结点集群 --name elasticsearch 设置容器名称 -p 9200:9200 设置端口映射,前为宿主机端口,后为容器里的端口。 -d 后台运行模式 elasticsearch:7.14.1 镜像名称,通过docker images 查看,若没有会自动下载 查看日志,发现一处警告: docker logs elasticsearch
{ "type":"deprecation.elasticsearch", "timestamp":"2021-09-15T03:55:39,835Z", "level":"DEPRECATION", "component":"o.