• 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='8080'
    }
    
    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

  • 相关阅读:
    用纯css画个三角形
    宝塔安装
    js判断浏览器版本
    JS打开url的几种方法
    java加密算法
    Mysql数据库多对多关系未建新表
    数据库唯一性约束异常插入处理
    HTML5中localStorage的使用
    软件设计师14-UML建模
    数据库设计流程
  • 原文地址:https://www.cnblogs.com/reblue520/p/6732985.html
Copyright © 2020-2023  润新知