saltstack自动化运维系列11基于etcd的saltstack的自动化扩容
saltstack自动化运维系列11基于etcd的saltstack的自动化扩容
自动化运维-基于etcd加saltstack的自动化扩容
# tar -xf etcd-v2.2.1-linux-amd64.tar.gz 
# cd etcd-v2.2.1-linux-amd64
# cp etcd etcdctl /usr/local/bin/
查看版本
# etcd --version
# mkdir -p /data/etcd
后台运行进程
# nohup etcd --name auto_scale --data-dir /data/etcd/ --listen-peer-urls 'http://192.168.3.12:2380,http://192.168.3.12:7001' --listen-client-urls 'http://192.168.3.12:2379,http://192.168.3.12:4001' --advertise-client-urls 'http://192.168.3.12:2379,http://192.168.3.12:4001' &
# ss -tnlp|grep etcd
LISTEN     0      128            192.168.3.12:2379                     *:*      users:(("etcd",40909,6))
LISTEN     0      128            192.168.3.12:2380                     *:*      users:(("etcd",40909,3))
LISTEN     0      128            192.168.3.12:7001                     *:*      users:(("etcd",40909,5))
LISTEN     0      128            192.168.3.12:4001                     *:*      users:(("etcd",40909,7))
创建key和value
# curl -s http://192.168.3.12:2379/v2/keys/message -XPUT -d value="hello world" | python -m json.tool
{
    "action": "set", 
    "node": {
        "createdIndex": 5, 
        "key": "/message", 
        "modifiedIndex": 5, 
        "value": "hello world"
    }
}
查看key和value
# curl -s http://192.168.3.12:2379/v2/keys/message | python -m json.tool
{
    "action": "get", 
    "node": {
        "createdIndex": 5, 
        "key": "/message", 
        "modifiedIndex": 5, 
        "value": "hello world"
    }
}
删除key,可以看到查不到了
# curl -s http://192.168.3.12:2379/v2/keys/message -XDELETE | python -m json.tool
{
    "action": "delete", 
    "node": {
        "createdIndex": 5, 
        "key": "/message", 
        "modifiedIndex": 6
    }, 
    "prevNode": {
        "createdIndex": 5, 
        "key": "/message", 
        "modifiedIndex": 5, 
        "value": "hello world"
    }
}
# curl -s http://192.168.3.12:2379/v2/keys/message | python -m json.tool
{
    "cause": "/message", 
    "errorCode": 100, 
    "index": 6, 
    "message": "Key not found"
}
建一个只存在25秒的键值,25秒后发现该键值查不到了
# curl -s http://192.168.3.12:2379/v2/keys/ttl_use -XPUT -d value='hello world 1' -d ttl=25 | python -m json.tool
{
    "action": "set", 
    "node": {
        "createdIndex": 9, 
        "expiration": "2017-04-18T03:04:54.538607442Z", 
        "key": "/ttl_use", 
        "modifiedIndex": 9, 
        "ttl": 25, 
        "value": "hello world 1"
    }
}
# curl -s http://192.168.3.12:2379/v2/keys/ttl_use | python -m json.tool
{
    "action": "get", 
    "node": {
        "createdIndex": 9, 
        "expiration": "2017-04-18T03:04:54.538607442Z", 
        "key": "/ttl_use", 
        "modifiedIndex": 9, 
        "ttl": 24, 
        "value": "hello world 1"
    }
编辑etcd相关配置
# vim /etc/salt/master
etcd_pillar_config:
  etcd.host: 192.168.3.12
  etcd.port: 4001
ext_pillar:
  - etcd: etcd_pillar_config root=/salt/haproxy/
# /etc/init.d/salt-master restart
curl -s http://192.168.3.12:2379/v2/keys/salt/haproxy/backend_www_chinasoft_com/web-node1 -XPUT -d value="192.168.3.12:8080" | python -m json.tool
{
    "action": "set", 
    "node": {
        "createdIndex": 11, 
        "key": "/salt/haproxy/backend_www_chinasoft_com/web-node1", 
        "modifiedIndex": 11, 
        "value": "192.168.3.12:8080"
    }
安装etcd
# yum install -y python-pip
# pip search python-etcd
# pip install python-etcd
①编写haproxy的配置文件
vim /srv/salt/prod/cluster/files/haproxy-outside.cfg
balance roundrobin
{% for web,web_ip in pillar.backend_www_chinasoft_com.iteritems() -%}
server {{ web }} {{ web_ip}} check inter 2000 rise 30 fall 15
{% endfor %}

②编写sls文件
vim /srv/salt/prod/cluster/haproxy-outside.sls
include:
 - haproxy.install
haproxy-service:
  file.managed:
    - name: /etc/haproxy/haproxy.cfg
    - source: salt://cluster/files/haproxy-outside.cfg
    - user: root
    - group: root
    - mode: 644
    - template: jinja  # 添加了jinja这一行
  service.running:
    - name: haproxy
    - enable: True
    - reload: True
    - require:
      - cmd: haproxy-init
    - watch:
      - file: haproxy-service

执行以下高级状态,如果报错jinja has no attibute backend_www_chinasoft_com重启一下master即可 
# salt '*' state.highstate
此时向haproxy添加backend主机
curl -s http://192.168.3.12:2379/v2/keys/salt/haproxy/backend_www_chinasoft_com/web-node2 -XPUT -d value="192.168.3.12:8080" | python -m json.tool
curl -s http://192.168.3.12:2379/v2/keys/salt/haproxy/backend_www_chinasoft_com/web-node3 -XPUT -d value="192.168.3.12:8080" | python -m json.tool
# curl -s http://192.168.3.12:2379/v2/keys/salt/haproxy/backend_www_chinasoft_com/web-node4 -XPUT -d value="192.168.3.12:8080" | python -m json.tool 
执行变更
# salt '*' state.highstate
通过访问haproxy的管理界面可以看到成功添加 http://192.168.3.12:8888/haproxy-status

可以看到pillar的选项,如果不能看到需要修改/etc/salt/master (pillar_opts: False)
# salt '*' pillar.items
node2.chinasoft.com:
    ----------
    backend_www_chinasoft_com:
        ----------
        web-node1:
            192.168.3.12:8080
        web-node2:
            192.168.3.12:8080
        web-node3:
            192.168.3.12:8080
        web-node4:
            192.168.3.12:8080
    zabbix-agent:
        ----------
        Zabbix_Server:
            192.168.3.13
mini1:
    ----------
    backend_www_chinasoft_com:
        ----------
        web-node1:
            192.168.3.12:8080
        web-node2:
            192.168.3.12:8080
        web-node3:
            192.168.3.12:8080
        web-node4:
            192.168.3.12:8080
    zabbix-agent:
        ----------
        Zabbix_Server:
            192.168.3.13
编写脚本实现自动添加haproxy后端服务器
# vim auto_add_haproxynode.sh
#!/bin/bash MAIN_ADD_HOST=$1
create_host(){
echo 'create host ok'
} deploy_service(){
ADD_HOST_PORT=''
} deploy_code(){
echo 'deploy code ok'
} service_check(){
STATUS=$(curl -s --head http://"$ADD_HOST":"$ADD_HOST_PORT"/ |grep "200 OK")
if [ -n "$STATUS" ];then
echo 'status check ok'
else
echo 'status check not ok'
exit
fi
} etcd_key(){
ADD_HOST=$1
curl http://192.168.3.12:2379/v2/keys/salt/haproxy/backend_www_chinasoft_com/$ADD_HOST -XPUT -d value="192.168.3.19:${ADD_HOST_PORT}"
} sync_state(){
salt '*' state.sls cluster.haproxy-outside env=prod
} main(){
create_host;
deploy_service;
deploy_code;
etcd_key $MAIN_ADD_HOST;
sync_state;
} main $1
执行脚本,可以看到成功添加
# ./auto_add_haproxynode.sh web-node18
saltstack自动化运维系列11基于etcd的saltstack的自动化扩容的更多相关文章
- saltstack自动化运维系列⑩SaltStack二次开发初探
		
saltstack自动化运维系列⑩SaltStack二次开发初探 1.当salt运行在公网或者网络环境较差的条件下,需要配置timeout时间vim /etc/salt/master timeout: ...
 - saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy的Keepalived
		
saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy的Keepalived 安装配置Keepalived 1.编写功能模块 #创建keepalived目录# mkdir -p ...
 - saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy
		
saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy 下载haproxy1.6.2.tar.gz下载地址:http://www.haproxy.org/download/1. ...
 - saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3
		
saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3 安装nginx-1.10.3.tar.gz # mkdir -p /srv/salt/prod/pkg / ...
 - saltstack自动化运维系列⑦SaltStack实践配置管理安装zabbix
		
saltstack自动化运维系列⑥SaltStack实践配置管理安装zabbix 1.添加管理zabbix的sls文件# vim /srv/salt/base/init/zabbix_agent.sl ...
 - SQL SERVER自动化运维系列
		
SQL SERVER自动化运维系列 转自:https://www.cnblogs.com/zhijianliutang/p/5001142.html 本系列为SQL SERVER自动化运维的一些操作技 ...
 - Linux centosVMware 自动化运维认识自动化运维、启动salt相关服务、saltstack配置认证、salt-key命令用法、saltstack远程执行命令、saltstack - grains、saltstack – pillar
		
一.认识自动化运维 传统运维效率低,大多工作人为完成 传统运维工作繁琐,容易出错 传统运维每日重复做相同的事情 传统运维没有标准化流程 传统运维的脚本繁多,不能方便管理 自动化运维就是要解决上面所有问 ...
 - SQL Server 自动化运维系列
		
本系列为SQL SERVER自动化运维的一些操作技巧点,所有内容都是根据日常运维过程中最经常遇到的问题,并为此形成了一些自动化运维的方式,皆为原创.... 供部分DBA和开发人员浏览借鉴,所应用平台基 ...
 - saltstack自动化运维系列12配置管理安装redis-3.2.8
		
一.准备redis自动化配置的文件(即安装一遍redis,然后获取相关文件和配置在salt中执行上线) 1.源码安装redis3.2.8并注册为系统服务 安装依赖yum install -y tcl ...
 
随机推荐
- CPP相关的常见错误(更新ing)
			
01.只允许在C99模式下使用 for 循环初始化申明 解决:指定下即可 gcc -o xxx -std=c99 02.
 - 「loj3058」「hnoi2019」白兔之舞
			
题意 有一个\((L+1)*n\) 的网格图,初始时白兔在\((0,X)\) , 每次可以向横坐标递增,纵坐标随意的位置移动,两个位置之间的路径条数只取决于纵坐标,用\(w(i,j)\) 表示,如果要 ...
 - 3分钟学会sessionStorage用法
			
前言: 因最近移动端开发过程中遇到一个运营提出的所谓技术难点需求,对于原生APP来说轻而易举,毕竟自己的APP用户操作指哪打哪,但是H5该怎么做?H5就实现不了么?对于一个爱研究攻克这些前端棘手问题的 ...
 - AllSame.java
			
/****************************************************************************** * Compilation: javac ...
 - Hadoop+HBase+Spark+Hive环境搭建
			
杨赟快跑 简书作者 2018-09-24 10:24 打开App 摘要:大数据门槛较高,仅仅环境的搭建可能就要耗费我们大量的精力,本文总结了作者是如何搭建大数据环境的(单机版和集群版),希望能帮助学弟 ...
 - JQuery实现轮播图及其原理
			
源码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" name="vi ...
 - 求FIRST集和FOLLOW集
			
花了点时间弄了个大概,希望对和我一样的人有所帮助. 文法如下: E -> TE'E' -> +TE'|εT -> FT'T' -> *FT'|εF -> (E)|id ...
 - Pool多进程示例
			
利用Pool类多进程实现批量主机管理 #!/usr/bin/python # -*- coding: UTF-8 -*- # Author: standby # Time: 2017-03-02 # ...
 - C++内存管理(转)http://www.cnblogs.com/qiubole/archive/2008/03/07/1094770.html
			
[导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不 ...
 - CSS进阶之SASS入门指南
			
CSS进阶之SASS入门指南 随着跟着公司学习项目的前端的推进,越来越对好奇了许久的SASS垂涎欲滴,哈哈,可能这个词使用不当,没有关系,就是对SASS有一股神秘的爱!好了,闲话不多说 ...