supervisor+cesi多服务器进程集中管理

最近由于管理的服务器比较多啊,难免疏忽有的服务就挂了,实在不想被老板天天挂念着我。。。。所以我毅然决然找个工具来管理一下,需求如下:

  • 必须有web界面,可以界面操作(我这么懒。。。)
  • 能够服务挂了自动重启(不想让老板半夜想我哈哈)

找了半天supervisor比较符合,但是他是单机操作,之前有人在github上发现了supervisor_monitor,但是现在官方推荐cesi比较好,最后不得不吐槽一下,网上的教程真的是五花八门但是基本上都是太基础了…,所以自行研究了一番成功的可以部署在五台服务器,并且用一台机器上的cesi管理他们,真香啊。

安装supervisor

首先说下这个是需要五台服务器都要安装的,包括两部分supervisord(服务端)、supervisorctl(客户端)

  1. 首先安装
#通过apt安装不推荐,官网文档说了 这个要落后pip数个版本
sudo apt-get install supervisor#通过pip安装,强烈推荐, 之前需要将默认python环境为python3
pip install supervisor
  1. 生成默认配置文件
# root 用户
echo_supervisord_conf > /etc/supervisord.conf# 普通用户
echo_supervisord_conf | sudo tee /etc/supervisord.conf# 修改下列参数
[include]
files = /etc/supervisor.d/*.conf    #切记下面supervisorctl配置项目的conf 要放在这里!!!!!!!!!!!!#想要cesi管理需要打开web设置,其中账号密码 需要和下列的supervisorctl的一样
[inet_http_server]         ; inet (TCP) server disabled by default
port=0.0.0.0:9001        ; ip_address:port specifier, *:port for all iface
username=admin              ; default is no username (open server)
password=******               ; default is no password (open server)[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
serverurl=http://0.0.0.0:9001 ; use an http:// url to specify an inet socket
username=admin              ; should be same as in [*_http_server] if set
password=******  
  1. 启动服务端, supervisord这是服务端线程,基本杀不死,启动即可。
# root 用户
supervisord# 普通用户, 先将log文件权限修改一下,默认位置/tmp/supervisro/*.log
sudo supervisord # 可以重启服务端
supervisorctl reload#报错的时候杀不掉
sudo rm -r /tmp/supervisor.sock
  1. 配置客户端
#介绍如下,根据自己的需求来配置
command=/bin/cat              ; 程序运行命令,建议使用绝对路径。
process_name=%(program_name)s ; 程序名称,可用的变量有 `group_name`, `host_node_name`, `process_num`, `program_name`, `here`(配置文件目录)。 一般程序需要运行多个副本的情况会使用。后面会有例子。
numprocs=1                    ; 程序运行的副本个数,默认为1,如果值大于1,则`process_name` 必须包含 `%(process_num)s`
numprocs_start=0              ; `%(process_num)s`起始数字,默认为0
00=/tmp                ; 程序运行的所在目录,相当于先cd到指定目录,然后运行程序。
umask=022                     ; umask for process (default None)
priority=999                  ; 程序操作的的优先级,例如在start all/stop all,高优先级的程序会先关闭和重启。
autostart=true                ; 在supervisord启动时自动启动,默认为true
startsecs=1                   ; 程序启动前等待时间等待时间。默认为1。
startretries=3                ; 尝试重启最大次数。默认为3。
autorestart=unexpected        ; 是否自动重启,可选参数为 false, unexpected, true。如果为false则不自动重启,如果为unexpected表示如果程序退出信号不在 `exitcodes` 中,则自动重启。默认为unexpected
exitcodes=0,2                 ; 程序退出码。配合`autorestart`使用。默认为 0,2
stopsignal=QUIT               ; 杀死进程是发送的信号,默认为TREM。
stopwaitsecs=10               ; 发送SIGKILL信号前最大等待时间。默认为10。
user                          ; 以指定用户身份启动程序。默认为当前用户。
stopasgroup=false             ; 是否向子进程发送停止信号,这对于Flask的debug模式很有用处,如果设置为true,则不向子进程发送停止信号。默认为false
killasgroup=false             ; 是否向子进程发送kill信号,默认为false
redirect_stderr=false         ; 将错误输出定向到标准输出,默认为false
stdout_logfile=/a/path        ; 标准输出日志路径,可选参数为 `自定义` `AUTO` `NONE`,`自定义`将日志写到自定义路径,可用的变量有`group_name`, `host_node_name`, `process_num`, `program_name`, `here`(配置文件目录);`NONE`不创建日志;`AUTO` 又supervisord自动选择路径,并且当supervisord服务重新启动时原来自动创建的日志以及日志的备份文件会被删除。默认为AUTO
stdout_logfile_maxbytes=1MB   ; 标准输出日志单个文件最大大小,如果超过指定大小会将日志文件备份,可用的单位 KB MB GB。如果设置为0则表示不限制文件大小。默认为50MB
stdout_logfile_backups=10     ; 标准输出日志文件最大备份数。默认为10
stdout_capture_maxbytes=1MB   ; 当进程处于“stdout capture mode”模式下写入到FIFO队列最大字节数,可用单位 KB MB GB。默认为0,详细说明见[capture-mode](http://supervisord.org/logging.html#capture-mode)
stdout_events_enabled=false   ; ;以下配置项配置错误输出的日志参数。和上面标准输出配置相同。
stderr_logfile=/a/path        ;
stderr_logfile_maxbytes=1MB   ;
stderr_logfile_backups=10     ;
stderr_capture_maxbytes=1MB   ;
stderr_events_enabled=false   ;
environment=A="1",B="2"       ; 环境变量设置,可用的变量有 `group_name`, `host_node_name`, `process_num`, `program_name`, `here`。 默认为空。
serverurl=AUTO                ; override serverurl computation (childutils)# 这是一个demo
[program:app] ; 程序名称,在 supervisorctl 中通过这个值来对程序进行一系列的操作
autorestart=True      ; 程序异常退出后自动重启
autostart=True        ; 在 supervisord 启动的时候也自动启动
redirect_stderr=True  ; 把 stderr 重定向到 stdout,默认 false
environment=PATH="/home/app_env/bin"  ; 可以通过 environment 来添加需要的环境变量,一种常见的用法是使用指定的 virtualenv 环境
command=python server.py  ; 启动命令,与手动在命令行启动的命令是一样的, 尽量用全路径
user=ubuntu           ; 用哪个用户启动
directory=/home/app/  ; 程序的启动目录
stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20     ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /data/logs/usercenter_stdout.log#其实就几个比较实用
#启动命令
command=/home/jiangnan/anaconda3/bin/python  -m http.server 28888
#挂掉重启
autostart=true
autorestart=true
startsecs=3
#日志的处理
redirect_stderr = true
stdout_logfile = /etc/supervisord.d/log/confd.log # 日志文件配置,尽量放在/var/log或者项目下面#简洁的配置就是
[program:simplehttpserver]
command=/home/jiangnan/anaconda3/bin/python  -m http.server 28888
autostart=true
autorestart=true
startsecs=3
redirect_stderr = true
stdout_logfile = /etc/supervisord.d/log/confd.log # 日志文件配置,尽量放在/var/log或者项目下面# 将配置好的上述文件命名为simplehttpserver.conf(名字自己定义,他看的是program这个参数启动),放在之前配置的files = /etc/supervisor.d/*.conf
  1. 启动客户端supervisorctl,配置完后重新启动
# 常用命令如下
supervisordctl status 查看进程运行状态
supervisordctl start 进程名 启动进程
supervisordctl stop 进程名 关闭进程
supervisordctl restart 进程名 重启进程
supervisordctl update 重新载入配置文件
supervisordctl shutdown 关闭supervisord
supervisordctl clear 进程名 清空进程日志
supervisordctl 进入到交互模式下。使用help查看所有命令。
start stop restart + all 表示启动,关闭,重启所有进程

安装cesi

说明

这个只需要在一个顺眼的服务器上安装一个就可以了
  1. 首先安装依赖环境
# On Ubuntu [18.04, 16.04, 14.04]
sudo apt install -y git python3 python3-pip python3-venv
# On Centos 7
sudo yum install -y git epel-release
sudo yum install -y python34 python34-pip python34-venv
# On Fedora 28
sudo dnf install -y git python3 python3-pip python3-venv

2.安装cesi,比较推荐的集成到系统中作为service进行使用

export CESI_SETUP_PATH=/opt/cesi
mkdir ${CESI_SETUP_PATH}
cd ${CESI_SETUP_PATH}# Download the project to CESI_SETUP_PATH directory, 如果wget不行 直接用网页访问下载
wget https://github.com/gamegos/cesi/releases/download/v2.6.8/cesi-extended.tar.gz -O cesi.tar.gz
tar -xvf cesi.tar.gz# Create virtual environment and install requirement packages
python3 -m venv venv
source venv/bin/activate
(venv) $ pip3 install -r requirements.txt
(venv) $ deactivate   # Deactivate virtual environment# Build ui (First you must install dependencies for ui -> yarn) - Optional
cd ${CESI_SETUP_PATH}/cesi/ui
yarn install
yarn build# Create cesi.conf.toml file and update cesi.conf.toml for your environment.
# Config file documentation can be found inside default file.
# (You must create cesi.conf in the etc directory for cesi.service)
sudo cp ${CESI_SETUP_PATH}/defaults/cesi.conf.toml /etc/cesi.conf.toml# Run as a service
sudo cp ${CESI_SETUP_PATH}/defaults/cesi.service /etc/systemd/system/cesi.service
sudo systemctl daemon-reload
sudo systemctl start cesi

3.配置/etc/cesi.conf.toml,根据下列参考进行修改

database = "sqlite:///users.db" # Relative path
activity_log = "/home/cesi/logs/activity.log" # File path for CeSI logs
admin_username = "admin" # Username of admin user
admin_password = "admin" # Password of admin user[[nodes]]
name = "node1"  #节点名称,自定义
environment = "TEST" #这个可以理解为进程分组
username = "admin"  #远程主机supervisor的web主机帐号密码
password = "admin"  #密码不支持特殊字符,如果web成功监听远程主机但是无法选中操作,原因大都基于此。
host = "172.16.23.102"
port = "9001"[[nodes]]
name = "node2"
environment = "TEST"
username = "admin"
password = "pass123"
host = "172.16.23.241"
port = "9001"#如果出现无法启动的时候可以使用一下命令 进行debug比较方便
python /opt/cesi/cesi/run.py --config-file /etc/cesi.conf.toml

完成,又可以愉快的摸鱼了。。。

网上教程千千万,只有这里最全面,看完记得点个赞!!!!

supervisor+cesi多服务器进程集中管理相关推荐

  1. day06 : 01 Oracle 体系结构概念,内存结构,内存结构(服务器进程和用户进程)

    一    概念: 1. 实例/instance: 后台进程+共享内存 用于管理和控制数据库  数据库/database: 物理文件的集合 为实例提供数据,如数据文件,控制文件,参数文件,日志文件等   ...

  2. 服务器怎么查看性能,查看服务器进程性能查看

    查看服务器进程性能查看 内容精选 换一换 分析辅助软件是一款支持部署到多台服务器目标环境上,实现对整个业务集群的数据采集和优化的组件.已成功登录Java性能分析.待安装分析辅助软件的服务器已开启ssh ...

  3. 使用socket创建服务器进程和客户端进程

    TCP客户端和服务器创建流程在上篇博文中已经说明: TCP客户端服务器模型创建流程 服务器进程 #include <netdb.h> #include <sys/socket.h&g ...

  4. oracle多线程类连接数,数据库连接数,服务器进程,线程之间什么关系?

    服务器进程--spid 大部分系统都表示server process在OS层面的process ID==操作系统进程ID: 数据库进程--这里用Oracle做例子 pid 这里可以理解为Oracle自 ...

  5. 记一次海外大型SLG游戏服务器进程被OOM的修复经历

    事情经过 最近刚接手一个多次获得海外GooglePlay推荐的SLG的游戏项目,服务器是java的netty框架写的,客户端是cocos lua. 好吧既然服务器进程运行在jvm之上,吃内存倒是挺厉害 ...

  6. linux监听apache代码,linux系统使用python监控apache服务器进程脚本分享

    这篇文章主要介绍了linux系统使用python监控apache服务器进程的脚本,大家参考使用吧 crtrl.py监控Apache服务器进程的Python 脚本 复制代码 代码如下: !/usr/bi ...

  7. zabbix计算型监控项函数last_面试官:如何用zabbix实现监控linux服务器进程使用率...

    概述 今天主要介绍怎么用zabbix来监控linux服务器进程使用率,下面一起来看看吧~ 1.配置监控项 proc.num 是用来统计某些状态的进程数量的. proc.num[,,,] name - ...

  8. apache服务器进程配置文件是,apache服务器进程配置文件是

    apache服务器进程配置文件是 内容精选 换一换 文件作用:可以关闭/打开监听端口.指定监听端口.指定监听IP等.文件路径:Atlas 300场景下,在Host侧服务器上,在~/ide_daemon ...

  9. 怎么查看服务器的性能,查看服务器进程性能查看

    查看服务器进程性能查看 内容精选 换一换 为了提高程序的运行的性能,可以通过把云服务器上运行的某个进程,指定在某个CPU上工作,实现CPU性能调优.为了获取更高的执行效率,我们应该保证一个CPU把一个 ...

最新文章

  1. python要点简要-一日精通python
  2. graphpad做折线图坐标轴数字_多组数据制作折线图,四步让你的图表实用又美观,老板看了都说好...
  3. 实现百度地图导航Demo的语音播报功能
  4. 瞥一瞥AI,撩一撩算法,顺便送几本书
  5. VTK:vtkCaptionWidget用法实战
  6. 操作系统识别-python、nmap
  7. SAP Fiori application do filtering will real delete note in DB
  8. Spring MVC-视图解析器(View Resolverr)-内部资源视图解析器(Internal Resource View Resolver)示例(转载实践)...
  9. 基于RTMP实现Linux|麒麟操作系统下屏幕|系统声音采集推送
  10. 超级玛丽2014怀旧版发布
  11. js中 var a= b || c;
  12. Python学习笔记:字符串提取和清洗
  13. android开发之android:padding和android:margin的区别
  14. CCF201912-1 报数(100分)【模拟】
  15. Lenovo DS存储Linux下ISCSI 多路径映射配置
  16. HDU 2549 壮志难酬
  17. 对倒立摆的LQR控制
  18. H.264码流分析器,雷霄骅版本人修改版
  19. 【redis源码】删除大key导致redis主从切换
  20. Sketch插件介绍

热门文章

  1. python中文件的导入与导出
  2. 预防建筑倒塌高还能这样?
  3. 鸿蒙系统能把游戏窗口化吗,家里装上华为智慧屏S系列,这三个功能,让我爱不释手!...
  4. 用github写开源书籍
  5. html选择本地文件视频并播放器,使HTML5视频播放器播放不同的文件(Make a HTML5 video player play a different file)...
  6. HP2132打印机简易说明
  7. Java标识符规范书写规则
  8. Windows中 JDK下载与安装教程 JAVA环境变量配置、JDK基本介绍
  9. SIM7600连接MQTT流程
  10. 求1至10乘阶的总和及求任意数乘阶