石头记

Docker、Kubernetes、CI/CD 等技术分享

Saltstack:服务部署

本文以web服务器为例介绍salt服务的部署。把不同的服务组织成不同的角色,然后将角色应用到不同的节点上。通过角色的划分能够清晰的对不同的服务模块进行组织,所有角色的配置放到/srv/salt/roles下,角色用到的相关变量放到/srv/pillar/roles和/srv/pillar/nodes下,其中/srv/pillar/nodes下放置与具体节点相关的变量。

角色与配置文件

/srv/salt/roles/web.sls配置如下,包括nginx模块、rsync模块、limits模块和nfs.client:

1
2
3
4
5
include:
- nginx
- rsync
- limits
- nfs.client

变量/srv/pillar/roles/web.sls如下,没有单独应用到节点的变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
hostgroup: web  # 定义zabbix分组,具体见后文的自动化监控一节
vhostsdir: /data1/vhosts # 代码发布目录
vhostscachedir: /data1/cache # 程序临时目录
logdir: /data1/logs # nginx日志目录
vhosts: # 虚拟主机名,用于创建对用的代码发布目录
- www.mall.com
- static.mall.com
limit_users: # 对用户打开文件数做设置
nginx:
limit_hard: 65535
limit_soft: 65535
limit_type: nofile
mounts: # nfs共享存储挂载相关配置
/data1/vhosts/static.mall.com/htdocs:
device: 172.16.100.71:/data1/share
fstype: nfs
mkmnt: True
opts: async,noatime,noexec,nosuid,soft,timeo=3,retrans=3,intr,retry=3,rsize=16384,wsize=16384

Saltstack:基础服务部署

对基础服务的管理包括配置管理系统、用户账号管理、yum配置管理、hosts文件管理、时间同步管理、DNS配置管理。

配置管理系统

配置管理系统使用模块化设计,每个服务一个模块,将多个模块组织到一起形成角色(/srv/salt/roles/)。所有模块放置到:/srv/salt下,入口配置文件为:/srv/salt/top.sls。模块使用的变量放置到:/srv/pillar,入口配置文件:/srv/pillar/top.sls。针对变量的作用域不同,将变量分为三级级,一级应用于模块(/srv/pillar/模块名),一级应用于角色(/srv/pillar/roles/),一级应用于主机节点(/srv/pillar/nodes)。具体配置在此不一一列出,具体参见salt配置文件。

Saltstack:安装

本文以一个小的电商网站(www.mall.com)为例,讲述Saltstack在真实场景中的应用。本节主要讲述Saltstack的安装过程。

Saltstack安装

Saltstack源码地址:https://github.com/saltstack/salt,最新版本为v2014.1.4。
需要自己打rpm包,salt描述文件:https://github.com/saltstack/salt/blob/develop/pkg/rpm/salt.spec,另外最新版本的salt需要python-libcloud,也需要提前打好包。如果是在CentOS 5.x 上安装salt,需要升级zeromq到3.x版。将所有打好的rpm包放入yum仓库,开始安装。

Salt Master安装

注意:安装前确保主机名已按角色划分部分进行配置。

安装salt-master:

1
# yum install -y salt-master

修改配置文件:/etc/salt/master,使salt监听在内网网卡上。

1
interface: 172.16.100.81

启动Salt Master:

1
# /etc/init.d/salt-master start

查看启动情况,4505端口处于监听状态:

1
# netstat -tunlp |grep 4505

Saltstack:网站架构介绍

本文以一个小的电商网站(www.mall.com)为例,讲述Saltstack在真实场景中的应用。主要介绍如何使用salt对电商网站各种服务进行管理、基于角色对应用进行自动化监控、基于Saltstack runner的代码部署系统等,主要包括以下主题:

项目代码已放到GitHub上,地址:https://github.com/ist0ne/salt-states

网站架构介绍

网络架构

  1. 使用Haproxy做负载均衡,一主一备,当主服务器宕机后备服务器自动接替主服务器角色对外提供服务。
  2. WEB前端采用Nginx+PHP提供动态页面的访问;所有前端服务器通过NFS协议挂载共享存储,商品展示图片上传至存储中,图片访问时通过Varnish进行缓存加速。
  3. 使用memcached做缓冲层来提高访问速度和减轻数据库的压力;使用Redis做队列服务。
  4. 数据持久层使用MySQL,MySQL采用主从模式,通过主从分离提高访问速度。
  5. 使用Salt对整个系统进行配置管理;使用Zabbix进行系统监控;所有服务器通过跳板机进行登录。
  6. 使用SVN统一管理代码和配置信息。

网络架构

说明:上面网络架构未按实际服务器数量画出,具体服务器见角色划分部分。

rpm打包

为了方便批量进行软件安装,我们通常将源代码打包,放到yum仓库中进行统一管理,本文记录了一次rpm打包过程。

1、安装rpm-build

1
yum install -y rpm-build

2、安装编译依赖包

1
yum install -y make gcc gcc-c++ libtool autoconf automake imake

3、安装软件本身依赖的软件包

以CoreSeek安装为例,Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和信息处理领域,适用于行业/垂直搜索、论坛/站内搜索、数据库搜索、文档/文献检索、信息检索、数据挖掘等应用场景。

1
yum install -y libxml2-devel expat-devel mysql-devel python-devel

CentOS 6.4 Puppet 3.2.4安装

本文主要描述puppet的安装、加固、Puppet-dashboard安装、Puppet模块、hiera使用以及自定义facts。

1、在Puppet Server和Puppet Client上关闭防火墙和selinux

清除防火墙设置

1
iptables -F

保存设置

1
/etc/init.d/iptables save

设置selinux为disable

1
2
vi /etc/sysconfig/selinux
SELINUX=disabled

2、在Puppet Server和Puppet Client上设置hosts,puppet通过主机名区分各节点

1
2
10.10.10.10     puppet.example.com
10.10.10.11 zabbix.example.com

Puppet: sudo模块

本文介绍puppet sudo模块,用来管理Linux (RedHat)上的/etc/sudoers文件。模块实现批量添加、删除用户sudo权限。

github地址:https://github.com/ist0ne/puppet-sudo

1、描述

本模块依赖puppetlabs-stdlib,实现用户批量sudo权限的添加。

2、用法

添加用户和组:

1
sudo { ['user1', 'user2']: }

/etc/sudoers会添加如下行:

1
2
user1    FILESERVERS=(ALL)    NOPASSWD: ALL
user2 FILESERVERS=(ALL) NOPASSWD: ALL

删除用户和组:

1
sudo {['user1', 'user2']: ensure => absent}

Puppet: route模块

本文介绍一个简单地route puppet模块,用来控制系统的路由信息,当你的网络很大时,有可能需要添加很多路由来与其他网段通信,此模块实现系统启动时自动添加路由功能。
github地址:https://github.com/ist0ne/puppet-route

1、描述

本模块依赖puppetlabs-stdlib,实现系统路由管理。

2、用法

为主机或网段添加路由:

1
2
3
4
$target_net = ['20.20.20.0/24', '10.20.0.0/16', '10.10.20.21']
route { $target_net:
gateway => '10.10.10.1',
}

Proudly powered by Hexo and Theme by Hacker
© 2019 ist0ne