supervisor管理集群(多个tomcat)

官网:http://www.supervisord.org/
在这里插入图片描述
安装之前要确定你的虚拟机上是否有Python环境
安装supervisor

yum -y install supervisor
设置开启自启
systemctl enable supervisord
#常用supervisorctl命令
supervisorctl status
supervisorctl stop tomcat
supervisorctl start tomcat
supervisorctl restart tomcat
supervisorctl reread
supervisorctl update

通过supervisor管理tomcat
配置jdk环境

tar -zxvf jdk-8u60-linux-x64.tar.gz -C /usr/local/
chown -R root.root /usr/local/jdk1.8.0_60
cat>>/etc/profile<<\EOF
###jdk环境###
export JAVA_HOME=/usr/local/jdk1.8.0_60
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
EOF
生效
source /etc/profile
java -version

安装tomcat

tar zxf apache-tomcat-8.5.29.tar.gz
mkdir -p /opt/app01
cp -a apache-tomcat-8.5.29/* /opt/app01/
#删除没有用的
rm -f NOTICE LICENSE RELEASE-NOTES RUNNING.txt
#启动tomcat
 ./bin/startup.sh
 ##查看一下有没有起来
 ps -ef | grep java
 #关闭tomcat
 ./bin/shutdown.sh

创建supervisor管理tomcat的子配置文件

[root@ c7-41 app01]# vim /etc/supervisord.d/app01.ini

[program:app01]
command=/opt/app01/bin/catalina.sh run
environment=JAVA_HOME="/usr/local/jdk1.8.0_60",JAVA_BIN="/usr/local/jdk1.8.0_60/bin"
directory=/opt/app01/bin/
numprocs=1
user = root
autostart = true
autorestart=true
startsecs = 5

启动supervisor,会把它下面的都给带起来

[root@ c7-41 app01]# systemctl status supervisord.service
● supervisord.service - Process Monitoring and Control Daemon
   Loaded: loaded (/usr/lib/systemd/system/supervisord.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
[root@ c7-41 app01]# systemctl start supervisord.service
[root@ c7-41 app01]# ps -ef | grep java
root       3839   3838 67 15:19 ?        00:00:05 /usr/local/jdk1.8.0_60/bin/java -Djava.util.logging.config.file=/opt/app01/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -classpath /opt/app01/bin/bootstrap.jar:/opt/app01/bin/tomcat-juli.jar -Dcatalina.base=/opt/app01 -Dcatalina.home=/opt/app01 -Djava.io.tmpdir=/opt/app01/temp org.apache.catalina.startup.Bootstrap start
root       3887   3380  0 15:19 pts/0    00:00:00 grep --color=auto java

bash终端管理

[root@ c7-41 app01]# supervisorctl status   #命令行模式
app01                            RUNNING   pid 3839, uptime 0:02:09

[root@ c7-41 app01]# supervisorctl          #交互模式
app01                            RUNNING   pid 3839, uptime 0:13:57
supervisor> help

default commands (type help <topic>):
=====================================
add    exit      open  reload  restart   start   tail
avail  fg        pid   remove  shutdown  status  update
clear  maintail  quit  reread  signal    stop    version

supervisor>
#ctrl+c退出

常用命令supervisorctl

[root@ c7-41 app01]# supervisorctl status app01
app01                            RUNNING   pid 3839, uptime 0:15:31
[root@ c7-41 app01]# supervisorctl start app01
app01: ERROR (already started)
supervisorctl stop app01
supervisorctl reload app01

看一下是否有问题

[root@ c7-41 app01]# curl -I 10.0.0.41:8080
HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 20 Apr 2020 07:22:28 GMT

进入到主配置文件(ctrl+v可以删除多行,选中就好了)(按一下esc,然后ctrl+c,然后在i,添加完之后按一个esc)把注释去掉
在这里插入图片描述
启动一下

[root@ c7-41 ~]# systemctl restart supervisord
[root@ c7-41 ~]# supervisorctl start app01
app01: ERROR (already started)
[root@ c7-41 ~]# supervisorctl status app01
app01                            RUNNING   pid 4506, uptime 0:00:14
[root@ c7-41 ~]#

测试
在这里插入图片描述
在这里插入图片描述
怎么弄多个tomcat

[root@ c7-41 opt]# cp -a app01 app02
[root@ c7-41 conf]# vim server.xml
[root@ c7-41 conf]# pwd
/opt/app02/conf

修改一下端口号
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建supervisor管理tomcat的子配置文件

[root@ c7-41 app02]# cd /opt/app02/
[root@ c7-41 app02]# cd /etc/supervisord.d/
[root@ c7-41 supervisord.d]# ls
app01.ini
[root@ c7-41 supervisord.d]# cp app01.ini app02.ini
[root@ c7-41 supervisord.d]# vim app02
[root@ c7-41 supervisord.d]# vim app02.ini

[program:app02]
command=/opt/app02/bin/catalina.sh run
environment=JAVA_HOME="/usr/local/jdk1.8.0_60",JAVA_BIN="/usr/local/jdk1.8.0_60/bin"
directory=/opt/app02/bin/
numprocs=1
user = root
autostart = true
autorestart=true
startsecs = 5

更新(添加)启动
在这里插入图片描述
在这里插入图片描述
页面刷新一下
在这里插入图片描述

知识点

传统的将程序放置后台启动:

1
(1)、&放置后台启动;但是一般和nohup(不挂断运行命令)一起用;常用方法;nohup command &
(2)工具类:可以用supervisor等守护进程工具管理

2、
(1)nohup /opt/app01/bin/catalina.sh run & #后台启动
(2)nohup /opt/app01/bin/catalina.sh run #前台启动

3、cat /etc/supervisord.conf(这里面不用修改就是为了让你了解一下)
yum安装的supervisor的主配置文件详解

[root@ c7-41 app01]# cat /etc/supervisord.conf
; Sample supervisor config file.

[unix_http_server]          #下面这个是supervisorctl和supervisord主程序通讯使用的
file=/var/run/supervisor/supervisor.sock   ; (the path to the socket file)
;chmod=0700                 ; sockef file mode (default 0700)
;chown=nobody:nogroup       ; socket file uid:gid owner
;username=user              ; (default is no username (open server))
;password=123               ; (default is no password (open server))

;[inet_http_server]         #supervisor自带UI界面有关; inet (TCP) server disabled by default
;port=127.0.0.1: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]               #supervisord主程序的配置
logfile=/var/log/supervisor/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=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false#在后台启动              ; (start in foreground if true;default false)
minfds=1024                 ; (min. avail startup file descriptors;default 1024)
minprocs=200                ; (min. avail process descriptors;default 200)
;umask=022                  ; (process file creation umask;default 022)
;user=chrism                 ; (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)

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]               #supervisorctl命令行(客户端)
serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;username=chris              ; should be same as http_username if set
;password=123                ; should be same as http_password if set
;prompt=mysupervisor         ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history  ; use readline history if available

; The below sample program section shows all possible program subsection values,
; create one or more 'real' program: sections to be able to control them under
; supervisor.

;[program:theprogramname]      #supervisord管理的子项目配置
;command=/bin/cat              ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1                    ; number of processes copies to start (def 1)
;directory=/tmp                ; directory to cwd to before exec (def no cwd)
;umask=022                     ; umask for process (default None)
;priority=999                  ; the relative start priority (default 999)
;autostart=true                ; start at supervisord start (default: true)
;autorestart=true              ; retstart at unexpected quit (default: true)
;startsecs=10                  ; number of secs prog must stay running (def. 1)
;startretries=3                ; max # of serial start failures (default 3)
;exitcodes=0,2                 ; 'expected' exit codes for process (default 0,2)
;stopsignal=QUIT               ; signal used to kill process (default TERM)
;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
;user=chrism                   ; setuid to this UNIX account to run the program
;redirect_stderr=true          ; redirect proc stderr to stdout (default false)
;stdout_logfile=/a/path        ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10     ; # of stdout logfile backups (default 10)
;stdout_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
;stdout_events_enabled=false   ; emit events on stdout writes (default false)
;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10     ; # of stderr logfile backups (default 10)
;stderr_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false   ; emit events on stderr writes (default false)
;environment=A=1,B=2           ; process environment additions (def no adds)
;serverurl=AUTO                ; override serverurl computation (childutils)

; The below sample eventlistener section shows all possible
; eventlistener subsection values, create one or more 'real'
; eventlistener: sections to be able to handle event notifications
; sent by supervisor.

;[eventlistener:theeventlistenername]  #子程序错误,会报警
;command=/bin/eventlistener    ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1                    ; number of processes copies to start (def 1)
;events=EVENT                  ; event notif. types to subscribe to (req'd)
;buffer_size=10                ; event buffer queue size (default 10)
;directory=/tmp                ; directory to cwd to before exec (def no cwd)
;umask=022                     ; umask for process (default None)
;priority=-1                   ; the relative start priority (default -1)
;autostart=true                ; start at supervisord start (default: true)
;autorestart=unexpected        ; restart at unexpected quit (default: unexpected)
;startsecs=10                  ; number of secs prog must stay running (def. 1)
;startretries=3                ; max # of serial start failures (default 3)
;exitcodes=0,2                 ; 'expected' exit codes for process (default 0,2)
;stopsignal=QUIT               ; signal used to kill process (default TERM)
;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
;user=chrism                   ; setuid to this UNIX account to run the program
;redirect_stderr=true          ; redirect proc stderr to stdout (default false)
;stdout_logfile=/a/path        ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10     ; # of stdout logfile backups (default 10)
;stdout_events_enabled=false   ; emit events on stdout writes (default false)
;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups        ; # of stderr logfile backups (default 10)
;stderr_events_enabled=false   ; emit events on stderr writes (default false)
;environment=A=1,B=2           ; process environment additions
;serverurl=AUTO                ; override serverurl computation (childutils)

; The below sample group section shows all possible group values,
; create one or more 'real' group: sections to create "heterogeneous"
; process groups.

;[group:thegroupname]
;programs=progname1,progname2  ; each refers to 'x' in [program:x] definitions
;priority=999                  ; the relative start priority (default 999)

; The [include] section can just contain the "files" setting.  This
; setting can list multiple files (separated by whitespace or
; newlines).  It can also contain wildcards.  The filenames are
; interpreted as relative to this file.  Included files *cannot*
; include files themselves.

[include]
files = supervisord.d/*.ini
发布了133 篇原创文章 · 获赞 4 · 访问量 2270

猜你喜欢

转载自blog.csdn.net/xiaowoniuwzx/article/details/105634692