InfluxDB 如何做 Clustering,当然,只是曾经这样做
InfluxDB 在 1.4 以后 Clustering 变为商业版才能用,但我们可以在之前的版本中看到它原本的设计意图:使用 3 个节点加入 raft cluster 成为 raft peers 选举领导,剩下的节点只做为数据节点不参与领导选举。
- 在理解了这样的设计之后,要想启动 Clustering,就需要按顺序启动前三个节点。前三个节点在三台主机上运行,各自有不同的 conf,最重要的配置是设置 bind 的地址。
- 第一个节点正常启动:
service influxdb start
- 第二个节点需要设置环境变量:
INFLUXD_OPTS="-join hostname_1:port_1" service influxdb start
- 第三个节点类似:启动节点的时候设置环境变量
INFLUXD_OPTS="-join hostname_1:port_1,hostname_2:port_2"
- 第一个节点正常启动:
- 可以使用 …
使用 Python 做 Linux System 编程
本文介绍了使用 Python 获取很多 Linux 系统参数的方法。
platform
模块就提供了很多信息。platform.uname()
获取 uname 信息,得到一个 tuple 的数据:包括操作系统,node name, release, version 等信息。platform.architecture()
获取系统架构,看支持 32 位还是 64 位。
open('/proc/cpuinfo').readlines()
可以获取 CPU 信息open('/proc/meminfo').readlines()
可以获取 内存 信息open('/proc/net/dev').readlines()
可以获取 …
学习 Grafana 的基本概念
这是一篇自底向上学习 Grafana 中所有核心概念的 Getting Started 级别的文章,Grafana 中的基础概念有:数据源(Data Source),组织(Organization),用户(User),行(Row),面板(Panel),查询编辑器(Query Editor),仪表盘(Dashboard)。
- Data Source: 提供数据的服务就是 Data Source。每种 Data Source 都有自己定制过的 Query Editor。
- Organization:需求:一个 Grafana 示例可以给多个组织提供服务。
- User:用户属于 Organization,可以被授予角色,一般用于验证身份。
- Row:一行 12 个单位 …
温习 父进程/僵尸进程/孤儿进程 的概念
在 Unix-like 的操作系统中,除了 process 0, 其它所有进程都是 fork 产生的。调用了 fork 的进程就是父进程,被新建的进程就是子进程。Process 0 是在启动的时候创建的,fork 出了 process 1,自己变成 swapper。Process 1 是系统中所有其它进程的祖先。
在 Linux 中,还有 Parent 和 Real Parent 这两种概念。Parent 是子进程死后接收 SIGCHLD 的进程,real parent 是在多线程环境中创建了子进程的那个线程。
僵尸进程:当进程退出,操作系统释放了大部分资源,但关于资源消耗和退出码这些数据仍然保留,因为父进程可能需要子进程是否成功运行以及系统资源消耗量这些信息。默认情况下,操作系统像父亲发送 SIGCHLD …
read moreMan 文档阅读 - environ.7
在 C 程序中,environ
是用户的环境变量。它是一个指向 char** 的指针,指向的数组的最后一个元素是 NULL。当 exec 启动一个进程的时候,进程会被塞入一个字符串数组作为环境变量。当 fork 出一个子进程的时候,子进程会拿到父进程的环境变量的拷贝。当进程运行的时候,可以通过 getenv, putenv, setenv 和 unsetenv 来操作环境变量。
Shell 环境中可以用 export (sh), setenv (csh) 设置环境变量。Shell 的初始环境变量在 /etc/environment 中配置,所有用户登录时会读取。另外,系统全局的配置 /etc/profile 和用户个人的配置也会被加进来。Bourne-style 的风格是用 name=value
这样的格式 …
温习 PID (Process identifier) 的概念
大多数操作系统都有 PID 这个概念,用于给一个进程到唯一标识位,我们用它操作进程,例如发送信号,杀掉,调优先级等。
在 Unix 系统中,有 2 个 PID 是特殊的:0, 1
- PID=0: 也叫 swapper 或 sched, 翻译大概叫交换进程。它专门用于处理分页,其实更多是内核的一部分。
- PID=1: 通常是 init 进程,用于开关机和托管孤儿进程。历史上倒是没有标准说 1 号一定是 init,只是 kernel 最开始搞出来的进程就自然而然分配到了 1。
- PID=N: 递增到上限后,不同的系统从诸如 100, 300 之类的低端数字重新开始递增,寻找可用的 …
对字符串应用 `strlen()` 和 `sizeof()` 的不同点
sizeof
是编译时的一元运算符,用于计算操作量的 size;strlen()
则是运行时的函数,定义于 string.h
中,虽然都有计算大小这种功能,但他们概念不同,使用场景也不同。
sizeof
返回size_t
类型,可以应用在任何类型上,int 可以,struct 也可以。strlen()
返回size_t
类型,应用在一个指向数组的指针,运行的时候它会数内存地址,直到遇到了 NULL。这个函数的主要任务是算字符串长度(不包括 \0)- 上面提到的编译时和运行时是个很大的区别,这意味着 sizeof 不关心具体值,它只关心 type 的 size, 而 strlen 关心的是运行时的 C-style NULL-terminated string 具体值的长度。
课后习题 …
read more