案例:当nginx的并发达到3000,并持续了一段时间时,通过自动化创建一台虚拟机,部署应用最后添加到集群提供服务:
  zabbix监控(nginx并发量)-------》action-------》创建了一台主机/docker容器-------》部署服务--------》部署应用代码-------》测试状态--------》加入到集群---------》加入监控----------》通知
简单实现上面中的某些步骤:为集群添加一个后端节点以提供服务
为了实现上面功能,这里采用salstack+etcd
安装etcd:
  1. [root@node1 src]# tar xf etcd-v3.2.9-linux-amd64.tar.gz
  2. cd etcd-v3.2.9-linux-amd64
  3. cp etcd etcdctl /usr/local/bin/

然后开启etcd集群:

  1、首先创建数据目录:mkdir /data/etcd -p

  2、开启服务:

  1. nohup etcd --name auto_scale --data-dir /data/etcd/ --listen-peer-urls http://192.168.44.134:2380,http://192.168.44.134:7001 --listen-client-urls http://192.168.44.134:2379,http://192.168.44.134:4001 --advertise-client-urls http://192.168.44.134:2379,http://192.168.44.134:4001 &
  1. [root@node1 ~]# netstat -tunlp|grep etcd
  2. tcp 0 0 192.168.44.134:2379 0.0.0.0:* LISTEN 52094/etcd
  3. tcp 0 0 192.168.44.134:2380 0.0.0.0:* LISTEN 52094/etcd
  4. tcp 0 0 192.168.44.134:7001 0.0.0.0:* LISTEN 52094/etcd
  5. tcp 0 0 192.168.44.134:4001 0.0.0.0:* LISTEN 52094/etcd

1、创建一个key/value

  1. [root@node1 ~]# curl -s http://192.168.44.134:2379/v2/keys/key1 -XPUT -d value="Hello world"

2、获取创建的key/value

  1. [root@node1 ~]# curl -s http://192.168.44.134:2379/v2/keys/salt/haproxy/backend_www/www1

3、删除创建的key/value

  1. [root@node1 ~]# curl -s http://192.168.44.134:2379/v2/keys/key1 -XDELETE

或者将上面的输出结果以json格式输出:

  1. [root@node1 ~]# curl -s http://192.168.44.134:2379/v2/keys/salt/haproxy/backend_www/www1|python -m json.tool
  2. {
  3. "action": "get",
  4. "node": {
  5. "createdIndex": 9,
  6. "key": "/salt/haproxy/backend_www/www1",
  7. "modifiedIndex": 9,
  8. "value": "192.168.44.134:8080"
  9. }
  10. }

将etcd配置在saltstack中,结合使用:

1、首先需要安装依赖包:

  yum install python-pip
  pip install python-etcd
2、将etcd配置在salt中:在master配置文件中设置
  1. ####config etcd
  2. my_etcd_config:
  3. etcd.host: 192.168.44.134
  4. etcd.port: 4001
  5.  
  6. ext_pillar:
  7. - etcd: my_etcd_config root=/salt/haproxy

3、重启master

  1. [root@node1 ~]# /etc/init.d/salt-master restart

结尾一直报错:

查找原因发现salt是python2.7安装的,而etcd是python2.6安装的,所以一直调用出错:

于是使用python2.7安装一遍etcd服务:

  1. 1mv /usr/bin/python /usr/bin/python.bak
  2. 2ln -s /usr/bin/python2.7 /usr/bin/python
  3. 3、修改/usr/bin/yum第一行为:#!/usr/bin/python2.6
  4. 4wget https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg --no-check-certificate
  5. 5chmod +x setuptools-0.6c11-py2.7.egg
  6. 6sh setuptools-0.6c11-py2.7.egg
  7. 7wget https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz --no-check-certificate
  8. 8tar xf pip-1.3.1.tar.gz
  9. 9cd pip-1.3.1
  10. 10python setup.py install
  11. 11、/usr/bin/pip-2.7 install python-etcd

试着使用python2.7导入模块etcd,报错如下:

解决办法:

  1. https://pypi.python.org/pypi/backports.ssl_match_hostname
  2. tar xf backports.ssl_match_hostname-3.5.0.1.tar.gz
  3. cd backports.ssl_match_hostname-3.5.0.1
  4. python setup.py build
  5. python setup.py install

然后重启salt-master服务,查看设置的pillar:

当删除掉etcd中的key时,那么pillar中的item也将会被删除掉:
  1. [root@node1 ~]# curl -s http://192.168.44.134:2379/v2/keys/salt/haproxy/backend_www/www1 -XDELETE
  2. {"action":"delete","node":{"key":"/salt/haproxy/backend_www/www1","modifiedIndex":12,"createdIndex":11},"prevNode":{"key":"/salt/haproxy/backend_www/www1","value":"192.168.44.134:8080","modifiedIndex":11,"createdIndex":11}}
  1. [root@node1 ~]# salt '*' pillar.items
  2. node2:
  3. ----------
  4. backend_www:
  5. ----------
  6. zabbix-agent:
  7. ----------
  8. Zabbix_Server:
  9. 192.168.44.134
  10. zabbix-agent-host:
  11. ----------
  12. zabbix_host:
  13. node2

现在通过添加etcd的key来增加haproxy后端的节点服务器:

1、设置etcd的key
  1. curl -s http://192.168.44.134:2379/v2/keys/salt/haproxy/backend_www/www1 -XPUT -d value="192.168.44.134:8081"|python -m json.tool

2、查看pillar

  1. [root@node1 ~]# salt '*' pillar.items
  2. node1:
  3. ----------
  4. backend_www:
  5. ----------
  6. www1:
  7. 192.168.44.134:8081

3、修改haproxy配置文件:vim /srv/salt/prod/cluster/files/haproxy-outside.cfg

  1. {% for www,www_ip in pillar.backend_www.iteritems() %}
  2. server {{ www }} {{ www_ip }} check inter 1000
  3. {% endfor %}

4、修改haproxy状态配置文件:vim /srv/salt/prod/cluster/haproxy-outside.sls

  1. haproxy-service:
  2. file.managed:
  3. - name: /etc/haproxy/haproxy.cfg
  4. - source: salt://cluster/files/haproxy-outside.cfg
  5. - user: root
  6. - group: root
  7. - mode: 644
  8. - template: jinja 新增一行,使用jinja模板,使用变量

测试并验证:

由于etcd仅仅只是设置了一个key:
www1:192.168.44.134:8081
所以后端只有一个节点:

现在为haproxy后端新增节点www2和www3:
  1. [root@node1 ~]# curl -s http://192.168.44.134:2379/v2/keys/salt/haproxy/backend_www/www2 -XPUT -d value="192.168.44.134:8080"|python -m json.tool
  2. {
  3. "action": "set",
  4. "node": {
  5. "createdIndex": 14,
  6. "key": "/salt/haproxy/backend_www/www2",
  7. "modifiedIndex": 14,
  8. "value": "192.168.44.134:8080"
  9. }
  10. }
  11. [root@node1 ~]# curl -s http://192.168.44.134:2379/v2/keys/salt/haproxy/backend_www/www3 -XPUT -d value="192.168.44.135:8080"|python -m json.tool
  12. {
  13. "action": "set",
  14. "node": {
  15. "createdIndex": 15,
  16. "key": "/salt/haproxy/backend_www/www3",
  17. "modifiedIndex": 15,
  18. "value": "192.168.44.135:8080"
  19. }
  20. }

查看设置的pillar:

  1. [root@node1 ~]# salt '*' pillar.items
  2. node2:
  3. ----------
  4. backend_www:
  5. ----------
  6. www1:
  7. 192.168.44.134:8081
  8. www2:
  9. 192.168.44.134:8080
  10. www3:
  11. 192.168.44.135:8080

执行salt状态配置文件:

添加完成后,默认不会进行增加,需要执行状态配置文件(随着配置文件修改会reload服务)
salt '*' state.highstate
然后进行查看节点状态以及个数:

saltstack实现自动化扩容的更多相关文章

  1. saltstack自动化运维系列11基于etcd的saltstack的自动化扩容

    saltstack自动化运维系列11基于etcd的saltstack的自动化扩容 自动化运维-基于etcd加saltstack的自动化扩容# tar -xf etcd-v2.2.1-linux-amd ...

  2. Saltstack自动化扩容

    一. etcd服务的安装和使用 1.安装etcd应用: wget https://github.com/coreos/etcd/releases/download/v2.2.5/etcd-v2.2.5 ...

  3. saltstack之自动化运维

    引入 简介 saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统. 早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这 ...

  4. 学习saltstack (五)

    Saltstack介绍 Salt三种运行方式 1.local本地运行2.Master/Minion3.Salt ssh Salt的三大功能 a.远程执行b.配置管理(状态管理)c.云管理:阿里云,aw ...

  5. Redis Cluster 自动化安装,扩容和缩容

    Redis Cluster 自动化安装,扩容和缩容 之前写过一篇基于python的redis集群自动化安装的实现,基于纯命令的集群实现还是相当繁琐的,因此官方提供了redis-trib.rb这个工具虽 ...

  6. k8s Pod 扩容和缩容

    在生产环境下,在面临服务需要扩容的场景时,可以使用Deployment/RC的Scale机制来实现.Kubernetes支持对Pod的手动扩容和自动扩容. 手动扩容缩容 通过执行扩容命令,对某个dep ...

  7. 基于Saltstack、Artifactory打造传统模式下持续部署平台

    一.持续部署 1. 现状 由于没有建立标准的持续部署流程,导致了版本管理混乱,制品管理混乱,上线持续时间长,上线测试覆盖不全面,业务流量上升后故障较多,排查复杂.运维.测试.开发人员每次版本迭代的时候 ...

  8. 运维知识体系v0.5

    http://www.90qj.com/?post=318http://ixdba.blog.51cto.com/2895551/1751377   运维知识体系v0.5-(运维社区-赵班长出品,欢迎 ...

  9. Docker系列一之基础快速入门企业实战

    1.1什么是LXC LXC为Linux Container的简写.Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚 ...

随机推荐

  1. TFS 创建团队成员及管理

    用TFS服务器管理代码 1:创建TFS服务器 2:创建TFS项目 3:创建TFS团队成员 4:上传代码,共享链接,对代码进行管理 这里主要介绍第三步:创建TFS团队成员 第一种:通过连接进入TFS可视 ...

  2. cobbler上部署centos系统修改网卡地址成eth0

    编辑cobbler的profile文件:   cobbler profile edit --name=CentOS-7.2-x86_64 --kopts='net.ifnames=0 biosdevn ...

  3. 《从零开始学Swift》学习笔记(Day 64)——Cocoa Touch设计模式及应用之目标与动作

    原创文章,欢迎转载.转载请注明:关东升的博客 目标(Target)与动作(Action)是iOS和OS X应用开发的中事件处理机制.   问题提出 如图所示是一个ButtonLabelSample案例 ...

  4. 深入HQL学习以及HQL和SQL的区别

    HQL(Hibernate Query Language) 是面向对象的查询语言, 它和 SQL 查询语言有些相似. 在 Hibernate 提供的各种检索方式中, HQL 是使用最广的一种检索方式. ...

  5. Code Force 21B Intersection

    B. Intersection time limit per test1 second memory limit per test256 megabytes inputstandard input o ...

  6. NSUserDefault 保存自定义对象

    由于NSUserDefaults 不支持保存自定类,保存的对象需要实现NSCoding协议,不过自定的类型就算实现了NSCoding也不可以保存,可以通过以下方法实现: //h文件 #import & ...

  7. Apache Kafka源码分析 – Replica and Partition

    Replica 对于local replica, 需要记录highWatermarkValue,表示当前已经committed的数据对于remote replica,需要记录logEndOffsetV ...

  8. git学习——<五>git分支

    git学习——<一>git安装 git学习——<二>git配置文件 git学习——<三>git操作 git学习——<四>git版本管理 一.提出问题 今 ...

  9. Preparing Olympiad---cf550B(DFS或者状态压缩模板)

    比赛链接:http://codeforces.com/problemset/problem/550/B 给你n个数,选出来只是2个然后求他们的和在L和R的区间内,并且选出来的数中最大值和最小值的差不得 ...

  10. explain(desc)命令的使用

    获取 type:查询类型 1.可以判断出,全表扫描还是索引扫描(ALL就是全表扫描,其他就是索引扫描) 2.对于索引扫描来讲,可以西划分,可以判断是哪一种扫描 type的具体类型介绍: ALL:全表扫 ...