• supervisor集群管理


    Cesi介绍

          CeSi(Centralized Supervisor Interface) 是 Supervisor 官方推荐的集中化管理 Supervisor 实例的 Web UI,该工具是用 Python 编写

    Cesi安装步骤

         export CESI_SETUP_PATH=~/cesi
        mkdir ${CESI_SETUP_PATH}
        cd ${CESI_SETUP_PATH}
        wget https://github.com/gamegos/cesi/releases/download/v2.6.7/cesi-extended.tar.gz -O cesi.tar.gz
        tar -xvf cesi.tar.gz
        python3 -m venv venv
        source venv/bin/activate
        pip3 install -r requirements.txt
        pip3 install --upgrade pip
        pip install -r requirements.txt
        python3 ${CESI_SETUP_PATH}/cesi/run.py --config-file ${CESI_SETUP_PATH}/defaults/cesi.conf.toml
        pip3 install --upgrade sqlalchemy==1.3.23
        python3 ${CESI_SETUP_PATH}/cesi/run.py --config-file ${CESI_SETUP_PATH}/defaults/cesi.conf.toml

    [root@localhost defaults]# vi cesi.conf.toml 
    
    # This is the main CeSI toml configuration file. It contains CeSI web application and
    # supervisord information to connect
    
    # This is the CeSI's own configuration.
    [cesi]
    # Database Uri
    database = "sqlite:///users.db"                         # Relative path
    # Etc
    # This is the main CeSI toml configuration file. It contains CeSI web application and
    # supervisord information to connect
    
    # This is the CeSI's own configuration.
    [cesi]
    # Database Uri
    database = "sqlite:///users.db"                         # Relative path
    # Etc
    #database = "sqlite:////opt/cesi/< version >/users.db"  # Absolute path
    #database = "postgres://<user>:<password>@localhost:5432/<database_name>"
    #database = "mysql+pymysql://<user>:<password>@localhost:3306/<database_name>"
    activity_log = "activity.log"   # File path for CeSI logs
    admin_username = "admin"        # Username of admin user
    admin_password = "admin"        # Password of admin user
    
    # This is the definition section for new supervisord node.
    # [[nodes]]
    # name = "api"          # (String) Unique name for supervisord node.
    # environment = ""      # (String) The environment name provides logical grouping of supervisord nodes. It can be used as filtering option in the UI.
    # username = ""         # (String) Username of the XML-RPC interface of supervisord Set nothing if no username is configured
    # password = ""         # (String) Password of the XML-RPC interface of supervisord. Set nothing if no username is configured
    # host = "127.0.0.1"    # (String) Host of the XML-RPC interface of supervisord
    # port = "9001"         # (String) Port of the XML-RPC interface of supervisord
    
    # Default supervisord nodes
    [[nodes]]
    name = "102-server"
    environment = "102"
    username = ""
    password = ""
    host = "192.168.30.102"
    port = "9001"
    
    [[nodes]]
    name = "105-server"
    environment = "105"
    username = ""
    password = ""
    host = "192.168.30.105"
    port = "9001"
    cesi.conf.toml配置

    安装完成后打开web页面第一次登录报错

           

          

     Cesi正常管理

          

           

         可以远程操作已经连接上主机上的supervisor

         

          成功远程启停服务

    ansible批量安装supervisor服务

         ansible通过源码包安装并自动注册成service,然后ansible就可以通过service模块来对安装好的服务进行操作

    - name: Create taishi dir
      file: path={{ taishi_dir }} state=directory owner={{ taishi_user }} group={{ taishi_user }} recurse=yes
      tags: base
    
    - name: Create logs dir
      file: path={{ taishi_dir }}/logs state=directory owner={{ taishi_user }} group={{ taishi_user }} recurse=yes
      tags: base
    
    - name: Create etc dir
      file: path={{ taishi_dir }}/etc state=directory owner={{ taishi_user }} group={{ taishi_user }} recurse=yes
      tags: base
    
    - name: Create supervisord dir
      file: path={{ taishi_dir }}/etc/supervisord state=directory owner={{ taishi_user }} group={{ taishi_user }} recurse=yes
      tags: base
    
    
    - name: Create tmp dir
      file: path={{ taishi_dir }}/tmp state=directory owner={{ taishi_user }} group={{ taishi_user }} recurse=yes
      tags: base
    
    - name: Copy the supervisorcnf to  {{ groups["all"] }}
      template: src=supervisord.conf.j2  dest="{{ taishi_dir }}/etc/supervisord.conf" owner={{ taishi_user }} group={{ taishi_user }} mode=0755
      tags: supervisor
    
    - name: Copy the start_taishi to {{ groups["all"] }}
      template: src=start_taishi.sh.j2  dest="{{ taishi_dir }}/etc/start_taishi.sh" owner={{ taishi_user }} group={{ taishi_user }} mode=0755
      tags: supervisor
    
    - name: Copy the taishiservice to {{ groups["all"] }}
      template: src=taishi.service.j2  dest="/etc/systemd/system/taishi.service" owner={{ taishi_user }} group={{ taishi_user }} mode=0755
      tags: supervisor
    
    
    - name: Copy elementtree to  {{ groups["all"] }}
      copy: src=../../common/packages/supervisor/elementtree-1.2.7-20070827-preview.zip dest=/tmp
      tags: supervisor
    
    - name: Copy meld3-0.6.5.tar.gz to {{ groups["all"] }}
      copy: src=../../common/packages/supervisor/meld3-0.6.5.tar.gz dest=/tmp
      tags: supervisor
    
    
    - name: Copy setuptools-24.0.2.tar.gz to {{ groups["all"] }}
      copy: src=../../common/packages/supervisor/setuptools-24.0.2.tar.gz dest=/tmp
      tags: supervisor
    
    
    - name: Copy supervisor-3.3.0.tar.gz to {{ groups["all"] }}
      copy: src=../../common/packages/supervisor/supervisor-3.3.0.tar.gz dest=/tmp
      tags: supervisor
    
    - name: Install setuptools to {{ groups["all"] }}
      shell: "cd /tmp && tar -zxvf setuptools-24.0.2.tar.gz && cd setuptools-24.0.2/ && python setup.py install"
      tags: supervisor
    
    - name: Install elementtree to {{ groups["all"] }}
      shell: "cd /tmp && easy_install elementtree-1.2.7-20070827-preview.zip"
      tags: supervisor
    
    - name: Install meld3-0.6.5 to {{ groups["all"] }}
      shell: "cd /tmp && easy_install meld3-0.6.5.tar.gz"
      tags: supervisor
    
    
    - name: Install supervisor to {{ groups["all"] }}
      shell: "cd /tmp && easy_install supervisor-3.3.0.tar.gz"
      tags: supervisor
    
    - name:  reload taishiservice to {{ groups["all"] }}
      shell: "systemctl daemon-reload"
      tags: supervisor
    
    - name:  start taishiservice to {{ groups["all"] }}
      service: name=taishi state=started
      tags: supervisor
    
    
    - name: "chown taishi dir to {{ taishi_user }}"
      file: path="{{ taishi_dir }}" state=directory owner={{ taishi_user }} group={{ taishi_user }} recurse=yes
      tags: base
    tasks/main.yml
    #Taishi Enterprise supervisor config file.
    
    [unix_http_server]
    file={{ taishi_dir }}/tmp/supervisor.sock   ; (the path to the socket file)
    chown={{ taishi_user }}                             ;
    
    [inet_http_server]          ; inet (TCP) server disabled by default
    port=*:9001                 ; (ip_address:port specifier, *:port for all iface)
    ;username=user              ; (default is no username (open server))
    ;password=123               ; (default is no password (open server)
    
    [supervisord]
    logfile={{ taishi_dir }}/logs/supervisord.log ; (main log file;default $CWD/supervisord.log)
    logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
    logfile_backups=10           ; (num of main logfile rotation backups;default 10)
    loglevel=info                ; (log level;default info; others: debug,warn,trace)
    pidfile={{ taishi_dir }}/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
    nodaemon=false               ; (start in foreground if true;default false)
    user={{ taishi_user }}                ; (default is current user, required if root)
    minfds=655350                ; (min. avail startup file descriptors;default 1024)
    minprocs=655350              ; (min. avail process descriptors;default 200)
    ;umask=022                   ; (process file creation umask;default 022)
    ;user=admin               ; (default is current user, required if root)
    ;identifier=supervisor       ; (supervisord identifier, default is 'supervisor')
    ;directory=/tmp              ; (default is not to cd during start)
    ;nocleanup=true              ; (don't clean up tempfiles at start;default false)
    ;childlogdir=/tmp            ; ('AUTO' child log dir, default $TEMP)
    ;environment=KEY="value"     ; (key value pairs to add to environment)
    ;strip_ansi=false            ; (strip ansi escape codes in logs; def. false)
    
    [rpcinterface:supervisor]
    supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
    
    [supervisorctl]
    serverurl=unix://{{ taishi_dir }}/tmp/supervisor.sock ; use a unix:// URL  for a unix socket
    
    [include]
    files={{ taishi_dir }}/etc/supervisord/*.ini
    templates/supervisord.conf.j2
    #!/bin/bash
    
    
    #/usr/bin/supervisord -c __install_dir__/etc/supervisord.conf
    # dpkg-reconfigure dash
    /usr/bin/supervisord -c {{ taishi_dir }}/etc/supervisord.conf 
    templates/start_taishi.sh.j2
    # taishi enterprise supervisord service for systemd (CentOS 7.0+)
    [Unit]
    Description=taishi Enterprise Supervisor daemon
    After=taishi.service
    
    [Service]
    Type=forking
    LimitNOFILE=655350
    LimitNPROC=655350
    ExecStart=/bin/bash {{ taishi_dir }}/etc/start_taishi.sh
    ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
    ExecReload=/usr/bin/supervisorctl $OPTIONS reload
    KillMode=process
    Restart=no
    TimeoutSec=1200s
    
    [Install]
    WantedBy=multi-user.target
    templates/taishi.service.j2

       

       

        

       自动在所有节点安装配置完成supervisor并成功启动

    ansible安装cesi并注册为后台service

        

    Flask==1.0.2
    Flask-SQLAlchemy==2.3.2
    tomlkit==0.5.3
    files/requirements.txt
    [cesi]
    # Database Uri
    database = "sqlite:///users.db"                         # Relative path
    # Etc
    #database = "sqlite:opt/cesi/< version >/users.db"  # Absolute path
    #database = "postgres://<user>:<password>@localhost:5432/<database_name>"
    #database = "mysql+pymysql://<user>:<password>@localhost:3306/<database_name>"
    activity_log = "activity.log"   # File path for CeSI logs
    admin_username = "admin"        # Username of admin user
    admin_password = "admin"        # Password of admin user
    
    # This is the definition section for new supervisord node.
    # [[nodes]]
    # name = "api"          # (String) Unique name for supervisord node.
    # environment = ""      # (String) The environment name provides logical grouping of supervisord nodes. It can be used as filtering option in the UI.
    # username = ""         # (String) Username of the XML-RPC interface of supervisord Set nothing if no username is configured
    # password = ""         # (String) Password of the XML-RPC interface of supervisord. Set nothing if no username is configured
    # host = "127.0.0.1"    # (String) Host of the XML-RPC interface of supervisord
    # port = "9001"         # (String) Port of the XML-RPC interface of supervisord
    
    # Default supervisord nodes
    [[nodes]]
    name = "192.168.30.174"
    environment = ""
    username = ""
    password = ""
    host = "192.168.30.174"
    port = "9001"
    
    [[nodes]]
    name = "192.168.30.175"
    environment = ""
    username = ""
    password = ""
    host = "192.168.30.175"
    port = "9001"
    
    
    [[nodes]]
    name = "192.168.30.176"
    environment = ""
    username = ""
    password = ""
    host = "192.168.30.176"
    port = "9001"
    templates/cesi.conf.toml.j2
    [Unit]
    Description=cesi
    
    [Service]
    Environment=
    ExecStart=/usr/local/python3.9/bin/python3 {{taishi_dir}}/cesi/cesi/run.py --config-file {{ taishi_dir }}/cesi/defaults/cesi.conf.toml
    ExecReload=/bin/kill -HUP $MAINPID
    KillSignal=TERM
    User=root
    WorkingDirectory={{taishi_dir}}/cesi
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    templates/cesi.service.j2
    - name: Create cesi dir
      file: path="{{ taishi_dir }}/cesi" state=directory owner={{ taishi_user }} group={{ taishi_user }} recurse=yes
      tags: cesi
    
    - name: Copy cesi.tar to {{groups["cesi"]}}
      copy: src=cesi.tar.gz dest=/tmp
      tags: cesi
    
    
    - name: "Install cesi for {{groups['cesi']}}"
      unarchive: src="/tmp/cesi.tar.gz" dest="{{ taishi_dir }}/cesi"  copy=no mode=0755 owner={{ taishi_user }} group={{ taishi_user }}
      tags: cesi
    
    - name: "copy python3.9 for {{groups['cesi']}}"
      copy: src=Python-3.9.0.tgz dest=/tmp   mode=0755 owner={{ taishi_user }} group={{ taishi_user }}
      tags: cesi
    
    - name: "Install python3.9 for {{groups['cesi']}}"
      unarchive: src="/tmp/Python-3.9.0.tgz" dest="{{ taishi_dir }}/cesi"  copy=no mode=0755 owner={{ taishi_user }} group={{ taishi_user }}
      tags: cesi
    
    - name: "make python3.9 for {{groups['cesi']}}"
      shell: "yum install -y zlib zlib-devel openssl openssl-devel libffi-devel sqlite-devel && rm -fr /usr/local/python3.9 && mkdir /usr/local/python3.9 && cd {{ taishi_dir }}/cesi/Python-3.9.0 && ./configure --prefix=/usr/local/python3.9 && make && make install"
      ignore_errors: True
      tags: cesi
    
    - name: "copy requirments for {{groups['cesi']}}"
      copy: src=requirements.txt dest={{ taishi_dir }}/cesi/requirements.txt   mode=0755 owner={{ taishi_user }} group={{ taishi_user }}
      tags: cesi
    
    - name: "Install python3 requirments"
      shell: "/usr/local/python3.9/bin/python3.9 -m pip install --upgrade pip && cd {{ taishi_dir }}/cesi/ && /usr/local/python3.9/bin/pip3 install -r requirements.txt && /usr/local/python3.9/bin/pip3 install  --upgrade sqlalchemy==1.3.23"
      ignore_errors: True
      tags: cesi
    
    - name: "Copy the cesi.conf"
      template: src=cesi.conf.toml.j2  dest="{{ taishi_dir }}/cesi/defaults/cesi.conf.toml" owner={{ taishi_user }} group={{ taishi_user }} mode=0755
      tags: cesi
    
    - name: "Copy the cesi service"
      template: src=cesi.service.j2  dest="/etc/systemd/system/cesi.service" owner={{ taishi_user }} group={{ taishi_user }} mode=0755
      tags: cesi
    
    - name:  reload cesiservice to {{ groups["cesi"] }}
      shell: "systemctl daemon-reload"
      tags: cesi
    
    - name:  start cesiservice to {{ groups["cesi"] }}
      service: name=cesi state=started
      tags: cesi
    tasks/main.yml

     

     安装完成后自动启动服务

  • 相关阅读:
    TCP ,UDP概念和TCP三次握手连接 的知识点总结
    常见的五类排序算法图解和实现(插入类:直接插入排序,折半插入排序,希尔排序)
    c/c++ 函数、常量、指针和数组的关系梳理
    编译器出现conflicting types for 某某的错误原因总结
    字符串模式匹配之KMP算法图解与 next 数组原理和实现方案
    图解字符串的朴素模式匹配算法
    字符串和字符串的常见存储结构
    objective-c中的@selector()和 c /c++的函数指针
    IOS-Foundation框架结构
    一道面试题:用多种方法实现两个数的交换
  • 原文地址:https://www.cnblogs.com/yxh168/p/14844970.html
Copyright © 2020-2023  润新知