LNMP架构搭建
一、LNMP搭建
1、Nginx安装
#! /bin/bash . /etc/init.d/functions ###install dependency packages###### [ `rpm -qa | grep openssl-devel` ] || yum -y install openssl-devel [ `rpm -qa | grep pcre-devel` ] || yum -y install pcre-devel ###creat user#### id www &> /dev/null [ `echo $?` -eq 0 ] || useradd -M -s /sbin/nologin www ###Download nginx### [ -d /root/tools ] || mkdir -p /root/tools [ -d /application ] || mkdir -p /application Nginx_Install() { cd /root/tools wget -P /root/tools http://nginx.org/download/nginx-1.15.8.tar.gz tar xf nginx-1.15.8.tar.gz && cd /root/tools/nginx-1.15.8 ./configure --prefix=/application/nginx-15.8 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module if [ $? -eq 0 ];then make && make install if [ $? -eq 0 ];then action "Install nginx is ok" /bin/true else exit 1 fi else exit 2 fi } ###Nginx Config### Nginx_Config() { ln -s /application/nginx-15.8 /application/nginx grep -Ev "#|^$" /application/nginx/conf/nginx.conf.default >/application/nginx/conf/nginx.conf sed -i '10,21d' /application/nginx/conf/nginx.conf for i in bbs www do mkdir -p /application/nginx/conf/extra; touch /application/nginx/conf/extra/$i.conf; mkdir -p /application/nginx/html/$i ; cat >> /application/nginx/conf/extra/$i.conf << 'EOF' server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } } EOF sed -i "s/localhost/$i.etiantian.com/g" /application/nginx/conf/extra/$i.conf; echo "Hello $i NgiNx!!" >> /application/nginx/html/$i/index.html; sed -i "9a\ include extra/$i.conf;" /application/nginx/conf/nginx.conf; sed -i "s/html;/html\/$i;/g" /application/nginx/conf/extra/$i.conf; done } Nginx_Install Nginx_Config ####start Nginx### /application/nginx/sbin/nginx if [ `ps -elf | grep nginx | wc -l` -gt 1 ];then action "Nginx start is running" /bin/true else action "Nginx start is failed" /bin/false fi
验证测试结果:
[root@centos74-ren-test ~]# curl -H host:bbs.etiantian.com 192.168.0.225/index.html
Hello bbs NgiNx!!
[root@centos74-ren-test ~]# curl -H host:www.etiantian.com 192.168.0.225/index.html
Hello www NgiNx!!
[root@centos74-ren-test ~]# curl -x 192.168.0.225:80 bbs.etiantian.com/index.html
Hello bbs NgiNx!!
[root@centos74-ren-test ~]# curl -x 192.168.0.225:80 www.etiantian.com/index.html
Hello www NgiNx!!
[root@centos74-ren-test ~]#
2、Mysql安装
#! /bin/bash id mysql [ $? -eq 0 ] || useradd -M -s /sbin/nologin mysql yum -y install autoconf libaio* &> /dev/null [ -d /appliaction ] || mkdir -p /application if [ -d /root/tools ] ;then wget -P /root/tools https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.32-linux-glibc2.5-x86_64.tar.gz else mkdir -P /root/tools exit 1 fi ###Mysql Config#### Mysql_Config() { cd /root/tools && tar xf mysql-5.6.32-linux-glibc2.5-x86_64.tar.gz mv /root/tools/mysql-5.6.32-linux-glibc2.5-x86_64 /application/mysql-5.6.32 ln -s /application/mysql-5.6.32 /application/mysql cd /application/mysql chown -R mysql.mysql /application/mysql/data/ /application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data/ --user=mysql cp -rf /application/mysql/support-files/mysql.server /etc/init.d/mysqld sed -ri "s#/usr/local#/application#g" /etc/init.d/mysqld /application/mysql/bin/mysqld_safe cp -rf /application/mysql/support-files/my-default.cnf /etc/my.cnf /etc/init.d/mysqld start /application/mysql/bin/mysqladmin -uroot password "Rcs551552?" } Mysql_Config
mysql安装测试结果:
3、PHP安装
#! /bin/bash yum install -y zlib-devel libxml2-devel libjpeg-devel libjpeg-t urbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel ####Download Php### ###First Instal Nginx### Php_Install() { wget -P /root/tools http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz cd /root/tools && tar zxf libiconv-1.14.tar.gz && cd libiconv-1.14 ./configure --prefix=/usr/local/libiconv [ $? -eq 0 ] || exit 1 make && make install yum -y install libmcrypt-devel mhash mcrypt wget -P /root/tools http://mirrors.sohu.com/php/php-5.5.32.tar.gz cd /root/tools/ && tar zxf php-5.5.32.tar.gz cd /root/tools/php-5.5.32 && ./configure --with-mysql=/application/mysql-5.6.32 --with-pdo-mysql=mysqlnd --prefix=/application/php-5.5.32 --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --enable-short-tags --enable-static --with-xsl --with-fpm-user=www --with-fpm-group=www --enable-ftp --enable-opcache=no ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/ touch ext/phar/phar.phar make && make install ln -s /application/php-5.5.32/ /application/php cp php.ini-production /application/php-5.5.32/lib/ cp /application/php/etc/php-fpm.conf.default /application/php/etc/php-fpm.conf /application/php/sbin/php-fpm sed -i '7a\ location ~* .*\.(php|php5)?$ {\n fastcgi_pass 127.0.0.1:9000;\n fastcgi_index index.php;\n include fastcgi.conf;\n }' /application/nginx/conf/extra/bbs.conf sed -i '7a\ location ~* .*\.(php|php5)?$ {\n fastcgi_pass 127.0.0.1:9000;\n fastcgi_index index.php;\n include fastcgi.conf;\n }' /application/nginx/conf/extra/www.conf sed -i '4,7d' /application/nginx/conf/extra/bbs.conf sed -i '4,7d' /application/nginx/conf/extra/www.conf sed -i '3a\ root html/bbs;\n index index.html index htm;' /application/nginx/conf/extra/bbs.conf sed -i '3a\ root html/bbs;\n index index.html index htm;' /application/nginx/conf/extra/www.conf echo -e "<?\nphpinfo();\n?>" >> /application/nginx/html/bbs/test.php echo -e "<?\nphpinfo();\n?>" >> /application/nginx/html/www/test.php } Php_Install
PHP安装测试结果:
现在是PHP还是静态,我们需要修改Nginx配置文件,让静态的文件让Nginx去处理;让动态的文件让PHP去处理
[root@centos74-ren1 ~]# cat /application/nginx/conf/extra/bbs.conf server { listen 80; server_name bbs.etiantian.com; root html/bbs; index index.html index htm; location ~ \.(php|php5)(.*) { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } }
[root@centos74-ren-test ~]# curl -I -H host:www.etiantian.com 192.168.0.225/test.php HTTP/1.1 200 OK Server: nginx/1.15.8 Date: Wed, 29 Jul 2020 15:56:04 GMT Content-Type: text/html Connection: keep-alive X-Powered-By: PHP/5.5.32
二、服务监控
1、Nginx连接数
Nginx连接数,需要在Nginx配置文件中添加: [root@centos74-ren1 ~]# vim /application/nginx/conf/extra/bbs.conf [root@centos74-ren1 ~]# vim /application/nginx/conf/extra/www.conf [root@centos74-ren1 ~]# /application/nginx/sbin/nginx -s reload location /nginx_status { stub_status on; access_log off; }
在测试机中验证curl 192.168.0.225/nginx_status
2、PHP性能监控
[root@centos74-ren-test ~]# cat /application/nginx/conf/extra/www.conf server { listen 80; server_name www.etiantian.com; root html/bbs; index index.html index htm; location ~ \.(php|php5)(.*)$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } location ~ \.php|^/status$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } } [root@centos74-ren-test ~]# [root@centos74-ren-test ~]# cat /application/nginx/conf/extra/bbs.conf server { listen 80; server_name bbs.etiantian.com; root html/bbs; index index.html index htm; location ~ \.(php|php5)(.*)$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } location ~ \.php|^/status$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } } [root@centos74-ren1 ~]# grep -i "pm.status_path" /application/php/etc/php-fpm.conf pm.status_path = /status [root@centos74-ren1 ~]# [root@centos74-ren1 ~]# pkill php [root@centos74-ren1 ~]# /application/php/sbin/php-fpm [root@centos74-ren1 ~]# /application/nginx/sbin/nginx -s reload
测试监控结果:
#PHP-FPM状态解释:
pool #fpm池名称,大多数为www
process manager #进程管理方式dynamic或者static
start time #启动日志,如果reload了fpm,时间会更新
start since #运行时间
accepted conn #当前池接受的请求数
listen queue #请求等待队列,如果这个值不为0,那么需要增加FPM的进程数量
max listen queue #请求等待队列最高的数量
listen queue len #socket等待队列长度
idle processes #空闲进程数量
active processes #活跃进程数量
total processes #总进程数量
max active processes #最大的活跃进程数量(FPM启动开始计算)
max children reached #程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量过小,可以适当调整。
#!/bin/bash PHPFPM_COMMAND=$1 PHPFPM_PORT=80 start_since(){ /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^start since:/ {print $NF}' } accepted_conn(){ /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^accepted conn:/ {print $NF}' } listen_queue(){ /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^listen queue:/ {print $NF}' } max_listen_queue(){ /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^max listen queue:/ {print $NF}' } listen_queue_len(){ /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^listen queue len:/ {print $NF}' } idle_processes(){ /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^idle processes:/ {print $NF}' } active_processes(){ /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^active processes:/ {print $NF}' } total_processes(){ /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^total processes:/ {print $NF}' } max_active_processes(){ /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^max active processes:/ {print $NF}' } max_children_reached(){ /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^max children reached:/ {print $NF}' } slow_requests(){ /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^slow requests:/ {print $NF}' } case $PHPFPM_COMMAND in start_since) start_since; ;; accepted_conn) accepted_conn; ;; listen_queue) listen_queue; ;; max_listen_queue) max_listen_queue; ;; listen_queue_len) listen_queue_len; ;; idle_processes) idle_processes; ;; active_processes) active_processes; ;; total_processes) total_processes; ;; max_active_processes) max_active_processes; ;; max_children_reached) max_children_reached; ;; slow_requests) slow_requests; ;; *) echo $"USAGE:$0 {start_since|accepted_conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processes|total_processes|max_active_processes|max_children_reached}" esac
3、mysql性能监控
#! /bin/bash Failure="echo -en \\033[1;31m" Success="echo -en \\033[1;32m" Normal="echo -en \\033[1;39m" PassWd="Rcs551552?" ###1. Monitor Features##### Threads_conn=`/application/mysql/bin/mysql -uroot -pRcs551552? -e "show status like 'Threads_connected';"| awk '/Threads/{print $2}'` Uptime=`/application/mysql/bin/mysql -uroot -pRcs551552? -e "show status like 'uptime'; "| awk '/Uptime/{print $2}'` Max_conn=`/application/mysql/bin/mysql -uroot -pRcs551552? -e "show variables like 'max_connections'; " | awk '/connect/{print $2}'` echo "Threads_connect: $Threads_conn" echo "Uptime: $Uptime" echo "Max_conn: $Max_conn" ###2.Check mysql whether Login or not### /application/mysql/bin/mysql -uroot -p$PassWd -e "show databases;" &> /dev/null if [ $? -eq 0 ];then $Success echo "Mysql login successfully" $Normal exit 0 else $Failed "Mysql login failed" $Normal fi
测试结果: