saltstack是一个非常强大的管理工具,使用saltstack会做到标准化的管理,下面就以一个简单的示例来更加具体的了解一下saltstack的功能特性。

使用saltstack来搭建一个简单的web集群,需要完成三个步骤:

1、系统初始化。初始化模块所有的机器环境一致。

2、功能模块:设置单独的目录haproxy nginx  php mysql  memcached.

功能模块做到尽可能的全,独立。

3、业务模块:根据业务类型划分,如web服务、论坛bbs等

Base基础环境的配置


salt环境配置

创建salt初始化环境:

修改master配置文件,

# vim /etc/salt/master
file_roots:              #配置基础环境和生产环境两个目录base:- /srv/salt/baseprod:- /srv/salt/prodpillar_roots:            #创建pillar环境base:- /srv/pillar/base- /srv/pillar/prod

创建环境目录:

 mkdir /srv/salt/basemkdir /srv/salt/prodmkdir /srv/pillar/basemkdir /srv/pillar/prod

base基础环境初始化

基础环境的配置项:

  • dns配置

  • history记录时间

  • 记录命令操作

  • 内核参数优化

  • 安装yum仓库

  • 安装zabbix-agent

dns配置,创建dns.sls:

[root@node1 /srv/salt/base/init]# cat dns.sls
/etc/resolv.conf:file.managed:- source: salt://init/files/resolv.conf- user: root- group: root- mode: 644[root@node1 /srv/salt/base/init]# cp /etc/resolv.conf  files/

history记录时间,创建history.sls:

[root@node1 /srv/salt/base/init]# cat history.sls
/etc/profile:file.append:- text:- export HISTTIMEFORMAT="%F %T `whoami` "

记录命令操作,创建audit.sls :

[root@node1 /srv/salt/base/init]# cat audit.sls
/etc/bashrc:file.append:- text:- export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; });logger "[euid=$(whoami)]":$(who am i):[`pwd`]"$msg"; }'

内核参数优化,创建sysctl.sls:

[root@node1 /srv/salt/base/init]# cat  sysctl.sls
net.ipv4.ip_local_port_range:sysctl.present:- value: 10000 65000   #指定本地可用的端口范围
fs.file-max:sysctl.present:- value: 2000000       #最大文件
net.ipv4.ip_forward:sysctl.present:- value: 1             #打开转发功能
vm.swappiness:sysctl.present:- value: 0             #设置尽量不使用交换分区(权重值)

设置epel源,创建yum仓库,

[root@node1 /srv/salt/base/init]# cat epel.sls
yum_repo_release:pkg.installed:- sources:- epel-release: http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm

创建zabbix-agent模板,这里的安装必须要有对应的yum源,在生产或环境需要有自己的yum源(或zabbix yum源),才能安装上对应的软件包:

[root@node1 /srv/salt/base/init]# cat zabbix-agent.sls
zabbix-agent:pkg.installed:- name: zabbix-agentfile.managed:- name: /etc/zabbix/zabbix_agentd.conf- source: salt://init/files/zabbix_agentd.conf- template: jinja- backup: minion   #在文件模块中,对要修改的文件先备份,备份的文件默认在:/var/cache/salt/minion/file_backup/中- defaults:Zabbix_Server: {{ pillar['Zabbix_Server'] }} #被引用的名称AHostname: {{ 'grains[fqdn]' }}  #被应用的名称B- require:- pkg: zabbix-agentservice.running:- enable: True- watch:- pkg: zabbix-agent    #包和文件发生改变就重启服务- file: zabbix-agent
zabbix_agentd.conf.d:file.directory:- name: /etc/zabbix/zabbix_agentd.d- watch_in:              #配置目录中发生任何变化都会重启zabbix-agent- service: zabbix-agent  - require:- pkg: zabbix-agent- file: zabbix-agent

拷贝zabbix的配置文件到file目录,并将pillar参数添加到配置文件的对应位置:

cp /etc/zabbix/zabbix_agentd.conf  files/
vim files/zabbix_agentd.conf
#设置对应参数的引用
Hostname={{ Hostname }}   #设置agent为主动模式,引用B出的参数
Server= {{ Zabbix_Server }}   #此处引用的是A处的Zabbix_Server要使用上面的参数,还需要配置pillar才能使用。

配置pillar base初始化环境

创建一个pillar,

[root@node1 /srv/pillar/base/zabbix]# cat agent.sls
Zabbix_Server: 172.16.10.60

创建pillar的top.sls,指定那些主机运行那些文件:

[root@node1 /srv/pillar/base]# cat top.sls
base:'*':- zabbix.agent

验证pillar的base环境:

[root@node1 /srv/pillar/base]# salt '*' pillar.items
node2:----------Zabbix_Server:172.16.10.60
node1:----------Zabbix_Server:172.16.10.60

验证zabbix配置:

[root@node1 ~]# salt '*' state.sls init.zabbix-agent

执行成功并自动修改了zabbix的配置文件则说明设置成功。

配置完上面的这些文件,基础环境就配置好了:

[root@node1 /srv]# tree
.
├── pillar
│   ├── base
│   │   ├── top.sls
│   │   └── zabbix
│   │       └── agent.sls
│   ├── prod
│   └── top.sls
└── salt├── base│   └── init│       ├── audit.sls│       ├── dns.sls│       ├── epel.sls│       ├── files│       │   ├── resolv.conf│       │   └── zabbix_agentd.conf│       ├── history.sls│       ├── sysctl.sls│       └── zabbix-agent.sls├── prod└── top.sls

可以编写一个基础的初始化配置文件,include所有基础的配置:

[root@node1 /srv/salt/base/init]# cat init.sls
include:- init.dns- init.history- init.audit- init.sysctl- init.epel- init.zabbix-agent

然后执行这个主配置文件即可:

# salt '*' state.sls init.init

如果定义高级状态进行执行,就要定义使用top file:

[root@node1 /srv/salt/base]# cat top.sls
base:'*':- init.init

执行高级状态:

# salt '*' state.highstate test=True 验证结果
# salt '*' state.highstate  确认执行

提示:

  • 在对文件进行操作时,为了避免误操作而破坏源文件,生产上所有涉及到文件的管理都要加上"- backup:minion"  参数,自动备份文件,备份的文件默认在/var/cache/salt/minion/file_backup目录。

  • 在对文件执行salt 高级状态时,选对文件进行测试,加 test=True,确认无误后再执行。

Prod环境配置

Haproxy基础环境配置

首先对负载均衡进行一个初始化环境的配置,由于使用haproxy的源码安装方式,所以对prod的基础环境进行配置。

创建分类目录:

[root@node1 /srv/salt/prod]# mkdir haproxy
[root@node1 /srv/salt/prod]# mkdir keepalived
[root@node1 /srv/salt/prod]# mkdir nginx
[root@node1 /srv/salt/prod]# mkdir php
[root@node1 /srv/salt/prod]# mkdir memcached
[root@node1 /srv/salt/prod]# mkdir pkg

编写与编译相关的安装包文件参数:

[root@node1 /srv/salt/prod]# vim pkg/make.sls
[root@node1 /srv/salt/prod]# cat pkg/make.sls
make-pkg:pkg.installed:- pkgs:- gcc- gcc-c++- glibc- make- autoconf- openssl- openssl-devel- pcre- pcre-devel

对于haproxy需要下载源码进行安装,对于安装的编译参数等可以在一台机器上安装验证。同时,需要将安装包和所需要启动脚本的文件放在files文件目录中。

[root@node1 /srv/salt/prod/haproxy/files]# cp /software/haproxy-1.6.6/examples/haproxy.init ./

修改启动脚本haproxy.init中的默认BIN路径:

BIN=/usr/local/haproxy/sbin/$BASENAME

这样在/srv/salt/prod/haproxy/files目录下默认就会有两个文件:

[root@node1 /srv/salt/prod/haproxy/files]# ls
haproxy-1.6.6.tar.gz  haproxy.init

编写sls文件,在文件编写haproxy的安装配置:

[root@node1 /srv/salt/prod/haproxy]# cat install.sls
include:- pkg.make         # 执行pkg/make.sls文件
haproxy-install:file.managed:    #salt状态模块,将source中的文件下载到ID(没有name参数则默认ID)指定的路径- name: /usr/local/src/haproxy-1.6.6.tar.gz - source: salt://haproxy/files/haproxy-1.6.6.tar.gz- mode: 644- user: root- group: rootcmd.run:        # cmd.run状态模块- name:  cd /usr/local/src && tar xvf haproxy-1.6.6.tar.gz &&  \ cd  haproxy-1.6.6 && make TARGET=linux2628 PREFIX=/usr/local/haproxy-1.6.6 \&& make install PREFIX=/usr/local/haproxy-1.6.6 && \ln -s /usr/local/haproxy-1.6.6 /usr/local/haproxy - unless: test -L /usr/local/haproxy #如果结果为True,则不执行name指向的命令- require:- pkg: make-pkg- file: haproxy-installhaproxy-init:file.managed:- name: /etc/init.d/haproxy- source: salt://modules/haproxy/files/haproxy.init- mode: 755- user: root- group: root- require_in:- file: haproxy-installcmd.run:- name: chkconfig --add haproxy- unless:  chkconfig  --list|grep haproxy  #当结果为假就执行-添加自启动命令net.ipv4.ip_nonlocal_bind:  # 设置允许linux监听VIP(非本机IP)sysctl.present:   - value: 1
/etc/haproxy:file.directory:  # 目录管理- user: root- group: root- mode: 755

这里有补充两个状态关系:

unless: 用于检查的命令,仅当unless选项指向的命令返回false时才执行name指向的命令

onlyif:  检查的命令,近当onlyif选项指向的命令返回true时才执行name指向的命令

执行salt 命令,完成所有节点的安装,指定环境路径prod,默认为base环境:

# salt '*'  state.sls haproxy.install saltenv=prod

业务引用haproxy

为了更加清晰的对服务模块和业务模块区分,可以在prod目录下分两个目录:cluster和modules ,分别对应业务和服务的各个模块,将所有prod下的目录服务包全部mv到modules目录中。

由于重建了目录,所以之前的/srv/salt/prod/modules/haproxy/install.sls 文件需要修改sourse file路径:

 include:- modules.pkg.make- source: salt://modules/haproxy/files/haproxy-1.6.6.tar.gz- source: salt://modules/haproxy/files/haproxy.init

修改之后的目录:

[root@node1 /srv/salt/prod]# tree
.
├── cluster
└── modules├── haproxy│   ├── files│   │   ├── haproxy-1.6.6.tar.gz│   │   └── haproxy.init│   └── install.sls├── keepalived├── memcached├── nginx├── php└── pkg└── make.sls

执行salt 命令进行测试:

# salt '*'  state.sls modules.haproxy.install  saltenv=prod

将集群的业务配置放在cluster/files目录中:

[root@node1 /srv/salt/prod/cluster/files]# cat haproxy-outside.cfg
global
maxconn 100000
chroot /usr/local/haproxy
uid 99
gid 99
daemon
nbproc 1
pidfile /usr/local/haproxy/logs/haproxy.pid
log 127.0.0.1 local3 info
defaults
option http-keep-alive
maxconn 100000
mode http
timeout connect 5000ms
timeout client  50000ms
timeout server 50000ms
listen stats
mode http
bind 0.0.0.0:8888
stats enable
stats uri     /haproxy-status
stats auth    haproxy:saltstack
frontend frontend_www_example_com
bind 172.16.10.62:80
mode http
option httplog
log globaldefault_backend backend_www_example_com
backend backend_www_example_com
option forwardfor header X-REAL-IP
option httpchk HEAD / HTTP/1.0
balance source
server web-node1  172.16.10.60:8080 check inter 2000 rise 30 fall 15
server web-node2  172.16.10.61:8080 check inter 2000 rise 30 fall 15

修改/srv/salt/prod/modules/haproxy/install.sls 添加开启自启动行为(上面的文件已经添加)

创建haproxy的对外业务配置sls文件:

[root@node1 /srv/salt/prod/cluster]# cat haproxy-outside.sls
include:- modules.haproxy.install
haproxy-service:file.managed:- name: /etc/haproxy/haproxy.cfg- source: salt://cluster/files/haproxy-outside.cfg- user: root- group: root- mode: 644service.running:- name: haproxy- enable: True- reload: True- require:- cmd: haproxy-install- watch:- file: haproxy-service

同时,需要在base环境中修改top file:

[root@node1 /srv/salt/base]# cat top.sls
base:'*':- init.init
prod:'node*':- cluster.haproxy-outside

执行salt高级状态,由于haproxy监听80和8888端口,所以先确保这些端口不被占用:

# salt 'node1' state.highstate test=True  #高级状态指定top file运行
# salt '*' state.highstate

访问监听的8888监控端口:

http://172.16.10.60:8888/haproxy-status

访问两个节点成功,说明配置成功。

转载于:https://blog.51cto.com/tryingstuff/1873040

SaltStck 搭建Web集群运用示例 (一)相关推荐

  1. 高效多用的群集-Haproxy搭建Web集群

    Haproxy搭建Web集群 Haproxy搭建Web集群 一.Haproxy前言 二.常见的Web集群调度器 三.Haproxy应用分析 四.Haproxy高性能负载均衡主要优点 五.四层与七层负载 ...

  2. 集群(三)——haproxy+nginx搭建web集群

    集群(三)--haproxy+nginx搭建web集群 一.Haproxy 前言 二.Haproxy 简介 1.常见的web集群调度器 2.Haproxy应用分析 3.Haproxy高性能负载均衡的主 ...

  3. aproxy配合Nginx搭建Web集群部署实验(图文详解)

    文章目录 一.常见的Web集群调度器 二.Haproxy应用分析 三.Haproxy调度算法原理 四.Haproxy搭建 Web 群集 实验所需安装包 环境配置 1.部署haproxy服务器(192. ...

  4. LVS之VS/NAT搭建web集群实战!!!

    项目背景 利用lvs的vs/NAT技术实现一个由负载调度器和两个web服务器组成的架构! 试验环境 vmware workstation 11 centos6.5的系统下 load balance:i ...

  5. haproxy负载均衡_使用haproxy搭建web集群

    会不会有那么一天,生活可以简单到每天清早踏上一辆载着鲜花的脚踏车,微笑着穿过窄窄的街巷,为爱花的人送去芬芳,为需要知识的你送去帮助. 简介 在前面已经学习了使用Nginx.LVS做负载均衡群集,它们都 ...

  6. 基于nginx的高可用web集群

    文章目录 一.写在前面 编译下载 nginx.conf文件解析 安装好后的操作 日志问题,不同级别的错误 二.环境搭建学习 web服务器配置 错误页面跳转 IO多路复用 在nginx里部署https服 ...

  7. 基于阿里云服务器搭建hadoop集群:HDFS的namenode WEB访问9870端口打不开解决方法

    基于阿里云服务器搭建hadoop集群:HDFS的namenode WEB访问9870端口打不开解决方法 以下是基于我所面临问题的解决办法. 1.在本地的c:windows/system32/dirve ...

  8. Nginx+Keepalived+Tomcat之动静分离的web集群

                 为小公司提供大概一天持续在100万/日之间访问的高性能.高可用.高并发访问及动静分离的web集群方案 Nginx+Keepalived            高可用.反向代理 ...

  9. kubernetes怎么读_Kubernetes之有状态应用实践-搭建MySQL集群

    零.前情纪要 上一遍文章Kubernetes集群搭建已经带大家成功搭建了Kubernetes集群,可能有不少人在搭建过程中对很多概念性的东西还是很模糊,接下来这篇文章将通过带领大家一起搭建一个高可用的 ...

最新文章

  1. VTK:图像理想高通用法实战
  2. linux 设备节点 驱动,【Linux驱动】自动创建设备节点
  3. C#多线程之Thread
  4. HALCON学习之旅(二)
  5. Linux下安装Kafka(单机版)
  6. HLA程序:HelloWorld.hla
  7. linux sd卡 分区变大,Linux 动态调整分区大小
  8. SimpleFs文件系统初步五(文件的读写)
  9. spark学习7之IDEA下搭建Spark本地编译环境并上传到集群运行
  10. linux中孚软件,中孚主机监控与审计系统
  11. Ubuntu 软件安装方法(入门必看)
  12. CSR8311/CSR8811 HCI vendor command说明
  13. S3C2440移植uboot之支持NAND启动
  14. 深入理解图优化与g2o:g2o篇
  15. PyTorch - GAN与WGAN及其实战
  16. 《C Primer Plus》读后感
  17. POJ - 1737 Connected Graph,Java(计数类DP)
  18. 中职计算机老师的一天,信息技术教师的一天
  19. ubuntu下执行sudo apt-get install python-pip 出现错误 Unable to locate package python-pip
  20. {转}一位北京差生9年的北京生活

热门文章

  1. 运行时间_如何测量嵌入式软件运行时间?
  2. python的lambda函数_Python-Lambda函数的范围及其参数?
  3. linux怎么编译并安装busybox,linux下安装busybox
  4. python集合排序_排序算法集合
  5. bind函数怎么用JAVA_c++bind函数的用法
  6. php负载均衡面板,nginx负载均衡的五种策略
  7. python 中文字符串截取,Python实现针对含中文字符串的截取功能示例
  8. cxgrid 行合并单元格_【Excel VBA】如何批量撤销合并单元格?
  9. 软考高项之质量管理-攻坚记忆
  10. Java高并发编程:取消和关闭