Category Archives: DevOps

最近升级服务器的一些笔记

最近新采购了一批硬件用于升级现有DevOps服务,相关的软件也都更新到较新的版本。本次升级比较顺利,没有遇到担心的兼容性问题,放一下配置供参考。

Storage Server

Intel Xeon E5-2603 v3
Supermicro X10SRL-F
Samsung ECC DDR4-2400 16GB x 4
Chelsio T520-CR
LSI SAS9217-8i
InnoDisk SSD 32GB
WD HUS726T6TALE6L4 6TB 7.2K SATA x12 (2 stripped raidz2)
Intel Optane 900p 280G PCI-E (as ZIL/SLOG)
Samsung 970 EVO PLUS 1TB M.2 (as L2ARC)
FreeNAS 11.2-U2

Virtualization Server

Intel Xeon E5-2699 v3 x 2
Supermicro X10DAi
Samsung ECC DDR4-2400 32GB x 8
Chelsio T520-CR
InnoDisk SSD 32GB
VMware ESXi 6.5 U2

Switch & Cables

UBNT ES-16-XG
10GTek SFP+DAC

Tips:

ESXi 6.5 U2 安装 Chelsio T520-CR 驱动
https://service.chelsio.com/beta/drivers/esx_2_0_0_32_uwire/Chelsio_UnifiedWire_ESXi_UserGuide.pdf

ZIL/SLOG
对于没有强制 SYNC WRITE 的场景,一点儿用处都没有。

MTU
9000 比 1500 性能好?未必!相反 9000 会带来额外的一些问题。

MPIO
iSCSI 实测可以跑满两根 10Gbps 。

rsyslog处理大量冗余message

一年前给 Buffalo LS-WXL 重新灌了 Debian Wheezy 后,貌似 smartd/smartctl 和原先的 kernel “水土不服“,dmesg 中频繁打印:

program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO
program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO
program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO

估计是 smartctl 对 marvell 的支持滞后了,刚开始也懒得理它,后来发现打印是在太频繁了,导致 /var/log 下的日志文件占用了太多的空间:

Jan 19 10:00:21 HOME-NAS kernel: program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO
Jan 19 10:00:21 HOME-NAS kernel: program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO
Jan 19 10:00:21 HOME-NAS kernel: program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO
Jan 19 10:00:21 HOME-NAS kernel: program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO
Jan 19 10:00:21 HOME-NAS kernel: program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO
Jan 19 10:00:21 HOME-NAS kernel: program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO
Jan 19 10:00:21 HOME-NAS kernel: program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO
Jan 19 10:00:21 HOME-NAS kernel: program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO
Jan 19 10:00:21 HOME-NAS kernel: program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO
Jan 19 10:00:21 HOME-NAS kernel: program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO
Jan 19 10:00:21 HOME-NAS kernel: program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO
Jan 19 10:00:21 HOME-NAS kernel: program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO
Jan 19 10:00:21 HOME-NAS kernel: program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO
Jan 19 10:00:21 HOME-NAS kernel: program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO

在不想花费太多时间的情况下,想到从 rsyslog 下手,有两种方式:

方法一:合并重复的message,合并输出

在 /etc/rsyslog.conf 中加入
###########################
#### GLOBAL DIRECTIVES ####
###########################
$RepeatedMsgReduction on

最终日志文件会生成如下内容:
Jan 19 18:01:34 home-nas kernel: program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO
Jan 19 18:02:05 home-nas kernel: last message repeated 9 times
Jan 19 18:03:06 home-nas kernel: last message repeated 28 times
Jan 19 18:04:07 home-nas kernel: last message repeated 29 times
Jan 19 18:05:25 home-nas kernel: last message repeated 30 times
Jan 19 18:06:32 home-nas kernel: last message repeated 53 times
Jan 19 18:07:32 home-nas kernel: last message repeated 28 times
Jan 19 18:08:32 home-nas kernel: last message repeated 28 times

方法二:过滤不需要记录的message,完全禁止输出
在 /etc/rsyslog.conf 中加入
###############
#### RULES ####
###############

:msg, contains, "program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO" ~

注意:末尾的~符号是同一行,格式为:
:msg contains "要匹配的文本" ~

完美解决~~~

 

 

基于GitLab的开发流程实施小结

最近协助一个开发团队实施了基于GitLab的开发流程,期间遇到的一些经验总结记录整理成本文。

该团队原先只有一个Subversion仓库,权限是按照目录分配的。同一个项目内的所有开发者都有提交权限,导致经常发生一些不该提交的文件被提交进仓库或者代码中包含了一些低级错误,等其他人发现为时已晚。因此迫切需要引入代码审查机制,第一时间对提交的代码进行审查,提高代码的质量。

组织架构及代码库规划

首先,为部门、项目组、个人分别建立账号;
其次,将原先单一的SVN仓库拆分成单独的Project。

组织架构及代码库示意如下:

repository-org

在GitLab上建立代码库

核心代码库是由原SVN库迁移导入,项目组将项目fork至项目组空间,开发人员从项目组fork至个人空间,在至此阶段GitLab上的仓库建立完毕。开发人员从本地通过git clone命令从将个人空间项目克隆至本地进行开发。流程示意如下:

workflow-1

本地开发仓库Pull与Push

注意:本地开发仓库的Pull与Push的远端URL是不同的。

更新本地仓库应从核心代码库拉取,因为核心代码库包括了其他开发者的工作成果;
提交应该至个人代码库,提交后在利用GitLab的Merge Request向上一级合并。

workflow-2

合并请求(Merge Request) & 代码审查(Code Review)

代码审查是在合并请求的过程中进行的,个人在GitLab中发起一个Merge Request,项目组会收到该请求,在GitLab界面上直接可以查看Commits和对比Changes,如果审查通过,Accept该请求,GitLab会自动Merge进项目组的代码库中;同理,项目组再向核心代码库发起Merge Request,由部门经过审查,则修改可以合并至核心代码库中。

workflow-3

以上是二级代码审查流程,其原理可以适用于更多层级的组织架构。

RouterOS的FastTrack与PCQ

新入一台Mikrotik CRS125-24G-1S-RM,划分了4个网段,并启用了端口隔离。

发现跨网段Bridging性能很低,Samba访问文件只有12MB/s左右的速度,远达不到官网标称的性能。

放狗找到官方论坛的一篇文章:http://forum.mikrotik.com/viewtopic.php?t=96302

从v6.29开始支持FastTrack,简单说就是启用后Firewall/NAT的性能直翻5倍!!!

测试了一把,Bridging的性能果然提升很多,Samba的速度大概有60MB+/s。

然而……鱼和熊掌不可兼得

原先的PCQ限速失效了:因为FastTrack会自动屏蔽Mangle其它规则,从而达到提升性能的目的。

ros_firewall_mangle

不差钱的还是上CCR系列,一劳永逸。

2016/05/22 更新:

经过几天鼓捣,发现FastTrack Connection规则可以不用在Filter表中添加,而是在Mangle表中独立添加。我的环境是加速LAN的跨网段访问速度,不经过NAT。

ros-fasttrack-pcq-update

注意:最上面3条动态规则在Filter表中取消FastTrack后自动失效,但是好像无法删除。

这样设定可以满足WAN上实现PCQ限速,内网三层交换速度不受影响。

Dell PowerEdge R510安装FreeNAS 9.10

计划将一台二手服务器(Dell PowerEdge R510) 改造为iSCSI-SAN/NAS,原配置如下:

  • Intel Xeon L5520 x2
  • 32GB DDR3 ECC
  • Dell PERC H700 RAID Card x1

ZFS建议直接控制硬盘,不建议通过RAID卡,以可以获得最佳性能和监控硬盘状态。H700这块卡不支持JBOD或“直通”模式,相反低端的H200可以通过刷新固件,成为纯HBA卡。当然如果用H700,也是有办法的:将每块硬盘都组成RAID-0;带来的问题是:ZFS无法直接读取硬盘的S.M.A.R.T信息,只能得到阵列的信息。

其它配件:

  • Dell PERC H200 HBA Card x1
  • Seagate ES.3 4TB 7200RPM/128M x6
  • SanDisk CZ33 16GB x1

STEP 1:更换H200阵列卡

Dell PERC H200 有两款:一款(备件号:47MCV)是带挡板给C1100、C2100机器用的,另一款(备件号:3J8FW)是不带挡板,但是在金手指旁有一个塑料卡扣,用于扣住PCI-E插槽的。R系列的机器用的就是不带挡板的型号,淘宝上购买时注意区分。

STEP 2:刷 IT Firmware

我参考了这篇文章:http://blog.michael.kuron-germany.de/2014/11/crossflashing-dell-perc-h200-to-lsi-9211-8i/comment-page-1/

主要几个步骤如下:

  1. 用Rufus制作一个FreeDOS的可启动U盘,将烧写程序、固件都拷贝进去
  2. 从U盘引导进入FreeDOS,运行sas2flash.efi -listall确认卡的Index
  3. 运行sas2flash.efi -c 0 -list记录下卡的SAS Address,后续要用到
  4. 擦除原来的固件和Boot ROM:sas2flash.efi -o -e 6
  5. 烧写Dell 6Gbps Firmware:sas2flash.efi -o -f 6GBPSAS.FW
  6. 烧写LSI P20 Firmware:sas2flash.efi -o -f 2118it.bin
  7. 重启,进入H200的配置界面可以看到Firmware的版本,厂牌也变成了LSI

STEP 3:安装FreeNAS

不再赘述,请参考 FreeNAS 官方文档。

DevOps环境搭建指南

维基百科上关于DevOps的定义:

DevOps(英文Development和Operations的组合)代表一种文化、运动或实践。旨在促进软件交付和基础设施变更软件开发人员(Dev)和IT运维技术人员(Ops)之间的合作和沟通。它的目的是构建一种文化和环境使构建,测试,发布软件更加快捷,频繁和可靠。

DevOps环境是由多种工具或者工具链组成,一般按交付过程包含以下部分:

  • 编码:代码编写、审查、持续集成
  • 构建:版本控制、代码合并、构建状态
  • 测试:自动化测试及测试报告
  • 打包:二进制仓库、Docker镜像仓库
  • 发布:变更管理、自动发布
  • 配置:基础设施配置和管理
  • 监视:性能监视、用户行为反馈

下面列举我在日常工作中用到的工具、环境,具体的安装、配置方法请参考官方手册或借助搜索引擎。

RouterOS

RouterOS(简称ROS)是一个基于Linux的软路由系统,我一般使用ROS的以下功能:

  • VLAN——可以区分公司内部的开发、测试、办公网络,保证研发环境网络的可用性
  • L2TP/IPSEC VPN——每个人都可以随时接入公司网络,方便在外调试
  • DNS——将公司内部的服务都通过域名进行访问,无需记忆IP地址
  • DHCP——配合PXE网络安装环境使用

VMware ESXi

虚拟化利器,不多介绍。机器加足内存就好。

FreeNAS

可靠的存储是其它服务的基础,我个人倾向于使用独立的SAN/NAS设备而不是服务器的本地存储。

主要原因有以下两点:

  • ESXi只支持高端的硬件RAID卡,成本高
  • 需要一开始就规划好每台机器的需求,没法共享

利用FreeNAS可以提供iSCSI Target给ESXi使用,同时可以给每个人都提供独立的Samba空间——通过Windows共享访问。

选择FreeNAS还有一个重要的原因就是ZFS。

OpenLDAP

OpenLDAP用来存放组织结构树及相应的权限,GitLab、MediaWiki、FreeNAS都支持基于LDAP的用户认证。

GitLab

GitLab提供了Git仓库、Code Review(通过Merger Request实现)、Issue Tracker等功能。

我认为GitLab相比传统的Git Server、Visual SVN等工具,最为实用的一点就是每个人都有自己空间的管理权限。

比如很多尚未立项的小项目或个人项目,需要版本控制但是又无必要托管在部门的仓库上,有了GitLab便可以在自己的一亩三分地上随便玩了。

GitLab-CI

GitLab配套的持续集成工具,一般用来编译、构建和运行自动化测试。

简单、够用,yml语法也很简单。

Docker Registry

Docker镜像仓库,从GitLab-CI打包好的包会直接Push进入registry。

MediaWiki

GitLab针对每个项目都有wiki功能,但是我们需要一个独立于项目的知识库,因此选择了MediaWiki。

PXE/Mirrors

由于我的工作都是基于Linux的,经常要安装不同的发行版本,在公司内部部署一台PXE安装服务是非常必要的。

PXE环境一般由DHCP、TFTP和HTTP这三个服务组合实现的,DHCP由ROS提供。

ShadowSocks

针对特殊国情而配备,租用一个海外VPS,然后部署ShadowSocks,再部署Privoxy,将socks5转换为http代理。