Category Archives: Linux

SaltStack之初窥门径

salt是一个用Python编写的配置管理及远程执行命令行工具,比puppet轻量、灵活得多。源代码托管于 GitHub 上,简单来说也是一个Client(minion)/Server(master)架构。官方已经提供了中文的文档和知识库:
http://www.saltstack.cn/projects/cssug-kb/wiki
http://docs.saltstack.cn/

安装salt

Salt官方推荐用Salt Bootstrap来安装,该项目是一个以在各平台下能够正确的自动完成Salt安装为目标的shell脚本,会自动判断系统类型并用对应的软件包管理器来进行salt的安装和配置:
wget -O install_salt.sh https://bootstrap.saltstack.com
sh install_salt.sh git develop
这里使用3台CentOS 6.5的虚拟机,可以用epel来安装salt,主服务器安装salt-master,而客户端只安装salt-minion; salt是master和minion的基础依赖,而python-halite是salt的一个web管理界面,后面将介绍。(这里为了方便测试,master也安装minion)

# 检查服务开机启动

2. 启动服务

设置master配置文件,salt使用YAML格式作为配置文件,注意YAML格式的key冒号后需要有一个空格(可以通过http://yaml-online-parser.appspot.com/ Online YAML Parser来验证YAML的格式)

salt需要使用加密信道来保证master/minion的通信,需要在master端认证客户端的minion来保证该通信是可信的。
minion生成key pair,然后用id值命名的pub key发送给 master ,直到接受为止;
master认证完成后,会将minion 端发送来的,以ID值命名的公钥存放在 /etc/salt/pki/master/minions 目录中;
master将自身的公钥发送给 minion,minion保存的路径为 /etc/salt/pki/minion/minion_master.pub.

minion_id 信息:

查看Key

或者使用salt-key -a OS2来逐一认证。移除一个Key:
salt-key -d OS04
连接测试
测试ping:测试master到minion的通信链路

测试执行命令(显示IP地址)

salt -E 根据正则表达式匹配id来执行:

根据id列表来执行:

在master服务器批量为其他服务器批量推送文件是一个常见的运维需求。SaltStack内置了号称史上最快的消息队列服务ZeroMQ来传输文件(http://zeromq.org/),可以用于大文件传输,开销很低,而在传输大量小文件时也非常有效。文件服务器主要用来在state系统中推送文件到客户端,也可以用于其他文件的传输。(参考文档
http://docs.saltstack.com/en/latest/ref/file_server/file_roots.html)
Continue reading

Posted in Linux, Ops, Tools.

Linux Note – Container初窥

Linux Container是一个操作系统层的轻量级虚拟化技术,百度、腾讯等互联网公司的PaaS平台大多都采用了这项新技术。和XEN,VMware和KVM等硬件抽象层的虚拟化技术相比,LXC更像是加强版的chroot。因为Linux Containers不但没有对硬件设备进行仿真(指令集模拟),还可以使用主机的目录和文件等资源。容器可以在核心 CPU 本地运行指令,而不需要任何专门的解释机制。所以,与传统的HAL(硬件抽象层)层次的虚拟化技术相比有以下优势:
a). 更小的虚拟化开销。LXC的诸多特性基本由内核特供,相当于一个加强版的chroot,开销相比HAL的虚拟化小了很多。
b). 快速部署。利用LXC来隔离特定应用,只需要安装LXC,即可使用LXC相关命令来创建并启动容器来为应用提供虚拟执行环境。传统的虚拟化技术则需要先创建虚拟机,然后安装系统,再部署应用。
LXC项目本身只是一个用户空间的工具集(Userspace tools for the Linux Kernel containers),用来使用和管理LXC容器。LXC在资源管理方面依赖与Linux内核的cgroups子系统,cgroups子系统是Linux内核提供的一个基于进程组的资源管理的框架(参见我之前的一篇文章之前的cgroup简介),可以为特定的进程组限定可以使用的资源。LXC在隔离控制方面依赖于Linux内核的namespace特性,具体而言就是在clone时加入相应的flag(NEWNS NEWPID等等)。
Continue reading

Posted in Linux, Ops, Virtualization.

mysqld的启停和配置文件

1. mysqld的启动参数

mysqld是MySQL服务器的守护进程。在使用mysqld启动MySQL服务器时,先保证hostname和/etc/hosts的配置正确。一般需要指定下面几个参数:
MySQL的参数文件(–defaults-file参数):这个参数非常重要,当一个主机存在多个实例时,每个实例要指定不同的参数文件(指定不同的port等参数),其他参数都可以写入这个配置文件中。如果没有指定这个参数,那么mysqld会根据下面的参数搜索参数文件:/etc/my.cnf ->/etc/mysql/my.cnf -> $MYSQL_HOME/my.cnf -> defaults-extra-file(The file specified with –defaults-extra-file=path) -> ./my.cnf -> ~/.my.cnf(User-specific options)
启动用户(–user),即mysqld进程的属主。如果没有配置这个参数,默认的用户是mysql。
该实例的pid文件(–pid-file),如果没有配置这个参数,默认的pid文件为/var/lib/mysql/..pid
该实例的socket文件(–socket),如果没有配置这个参数,默认的pid文件为/var/lib/mysql/mysql.sock
Continue reading

Posted in Linux, MySQL.

Redis – First Class

Redis是一个开源、支持网络、基于内存、键值对存储数据库,其灵感来源于Amazon Dynamo,使用ANSI C编写。其开发由VMware主持,并遵循BSD许可证。
几个重要特点:
主从复制
内存+磁盘持久化
丰富的数据类型,尤其擅长数组、链表、集合、有序集合和散列表等数据的高速处理。所以说,redis不是简单的key-value服务器,而是一个数据结构服务器。
Continue reading

Posted in Linux, NoSQL.

MariaDB 10 Multi-Master Replication 测试

MySQL 5.7和MariaDB 10提供了Multi-Master复制的功能,并在复制性能上有所改善。对比上一篇Master-Standy的配置,本文将测试一下Multi-Master的配置。
Multi-Master 复制通常是环形复制,可以在任意主机上将数据复制给其他主机。
03083656_z81R
Continue reading

Posted in Linux, MySQL.

Percona Server 5.6 Master-Slave Replication测试

MySQL的Master-Slave Replication是一个异步的复制过程,从一个 MySQL instance(Master)复制到另一个 instance(Slave)。在Master与Slave之间的实现整个复制过程主要由三个线程来完成,其中两个线程(SQL线程和IO线程)在 Slave 端,另外一个线程(IO线程)在Master端。 在MySQL Multi-Master兴起的今天,Master-Slave依然有着不少应用场景。
MySQL 复制的基本过程如下(http://machael.blog.51cto.com/829462/239112/):
1. Slave上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
2. Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO 线程根据请求信息读取指定日志指定位置之后的日志信息,返回给 Slave 端的 IO 线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 Binary Log 中的位置;
3. Slave 的 IO 线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的Relay Log文件(mysql-relay-bin.xxxxxx)的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-
info文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”
​4. Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master 端真实执行时候的那些可执行的 Query 语句,并在自身执行这些 Query。这样,实际上就是在 Master 端和 Slave 端执行了同样的 Query,所以两端的数据是完全一样的。
下面就在CentOS 6.5 两节点的环境中配置一个简单的Percona Server 5.6.16 Master-Slave复制:
OStack01 ​192.168.46.132
OStack02 ​192.168.46.133
Continue reading

Posted in Linux, MySQL.

Linux常用的性能监控工具

有效地使用操作系统实用工具来进行性能诊断是目前作为数据库管理员和系统管理员最重要的工作之一。常见的性能问题无异于是由CPU使用、内存和磁盘I/O问题来导致的。对于Linux而言,使用系统自带的ps,sysstat,top等包就能很好的找到问题的所在(这些包主要也是读/proc的信息来解析)。下面来一一查看这些性能诊断问题。
Continue reading

Posted in Linux.

Spark 0.91集群部署

继上一篇 CentOS 6.5 + HDP 2.0.6(Hadoop 2.2)的环境,测试一下Spark的local和standalone集群模式。

1. 安装scala

当前scala的最新版本是2.10.4,从scala的官方网站将scala-2.10.4.rpm发行包下载下来。
Continue reading

Posted in BigData, Linux, Spark.

在CentOS 6上编译3.13内核

3.13内核无疑是一个里程碑式的内核,包括了几项I/O子系统队列调整、nftables等几项关键的更新。
Continue reading

Posted in Linux.

Linux Note – 通过ulimit和PAM来限制资源

​ulimit是Shell内建指令,可用来控制shell进程或者shell子进程使用的系统资源。限制分为硬限制和软限制两种:
-H 设置硬资源限制,硬资源限制用于控制软限制。限定一旦设置只有root用户可以增加硬限制,普通用户只能减少自己的硬限制大小。
-S 设置弹性资源限制,弹性限制用于限制具体的用户或者进程。设置后普通用户可以增加,但是不能超过硬限制大小。
如果不指定-S或者-H,那么弹性资源限制和硬限制将同时设置。
Continue reading

Posted in C|C++, Linux.