公司企业架构LNMP(单点服务器部署)

一、运维十年演变发展史

1、项目开发流程

公司老板和产品经理根据市场调查,决定开发的一整套互联网产品

==互动社交+电商+用户论坛(BBS)==

产品决策(老板+产品+UI设计)=》代码开发(程序开发人员[前端开发[客户端页面或者APP]和后端开发[java php python node ruby])=》测试工作(测试人员)=》部署上线(运维人员)(SA、dev 开发ops 运维)

项目周期 技术人员在项目周期 加班 1-3月

2、企业架构分布式集群解决方案

集群:多台服务器在一起作同样的事 。

分布式 :多台服务器在一起作不同的事 。

​ 小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关系是集群。为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群

最终的架构图示

实现负载均衡LB、高可用HA、数据库主从复制M-S、读写分离R-W、缓存中间件[memcached、Redis] nosql[mongodb]·······

img

3、业务背景

年份:2008-2010

发布产品类型:互联网动态站点 社区论坛 商城 社交类站点

⽤户数量: 100-500

PV : 1000-3000(24小时访问次数总和 8小时) 页面访问数量 点击量

QPS: 5-10(每秒访问查询次数) 并发量 吞吐量 TPS

DAU: 10-50(每日活跃用户数) 日活数

QPS 两种方法:

①计算 pv/时间 = qps

②压测 ab sysbeach等测试软件 在规定时间发送一定的请求数量

二、服务器基本环境部署

为了学习的方便和需要,需要先进行基本环境的搭建

· 安装一台虚拟机,centos操作系统

· 网络配置

· 机器名FQDN设置

· DNS解析设置

· 各类防火墙暂时关闭

· 配置需要的yum环境及其源地址

· 网络校时 ntpd

1、虚拟机软件搭建

可以参考文档《虚拟机和镜像.doc》

2、准备好ISO镜像文件

这里安装系统镜像,采用minimal的方式,自定义选择开发工具。安装更加快速,系统也更加轻便。

可以参考文档《虚拟机和镜像.doc》

以上操作完成基本服务器镜像系统的安装

3、网络配置和检测

虚拟机网卡一般常用两种方式:

桥接方式:直接连接物理交换机(上层路由器DHCP)获取IP

NAT方式:转发宿主机网络方式,可以实现和宿主机(装虚拟机的系统[windows])上网的功能

IP获取方式:

静态获取:static 需要进行手动配置 指定之后不会改变 要配置,先ping是否被占用

动态获取:dhcp 需要启动一个dhcp服务 自动根据分配一个没有被使用的IP

如果说维护的机器数量比较多,单独配置静态IP是很繁琐的

Vmware NAT连接方式,延长续约时间

img

解决分配IP的问题

img

IP租约和续约

img

img

以上操作,可以选做,也看可以手动指定配置网卡IP

4、FQDN设置(重要)

在获取到一台主机之后,第一步要想到配置FQDN

作用:软件进行交互需要使用FQDN

server01 server01.devops.com

配置方式:

①添加修改/etc/hosts

img

②网卡配置/etc/sysconfig/network

img

通过重启使配置生效

img

5、防火墙关闭

centos6.x系列中

①关闭iptables

1> 关闭

img

2> 关闭开机自启动

img

②关闭selinux

selinux 美国安全子系统,一般运维环境中直接关闭了

如果不关闭,在编译一些软件时,发现运行不起来

查看selinux配置

img

img

6、yum源环境配置

yum源使用的方式:

①本地yum源 createrepo自定义 光盘源

②网络源 官方网络源 第三方网络源(国内源会更加快速一些,aliyun、sohu、清华、科大、163······)

配置aliyun云

①打开aliyun源的官网,找到centos,点击帮助,可以直接帮助下载已经配置好的仓库文件(先把原来的Base源备份掉)

img

②生成yum list缓存

shell > yum makecache

以上第三方官方源配置完毕

加入epel源

Enterprise Linux额外软件包(英文: Extra Packages for Enterprise Linux,EPEL)

epel是官网比较新的版本和软件的库

安装epel源

shell > yum -y install epel-release

img

epel可以安装一些base源中不存在的软件。解决一些依赖软件的问题,否则一些软件可能还需要使用源码编译的方式安装。

教学中,配置本地光盘源,有两个光盘:

①机器加载多个光盘

img

img

img

②linux挂载多个光盘

img

shell > mkdir /dvd1 /dvd2
shell > mount /dev/sr0 /dvd2
shell > mount /dev/sr1 /dvd1

开机自动挂载

img

③配置yum本地光盘源

img

img

7、安装vim编辑器并配置

①yum 安装vim

shell > yum -y install vim

②配置默认显示行号

img

img

img

grep的高亮的显示

img

img

使用source使配置文件生效

img

8、网络校时(重要)

问:为什么要校对服务器时间?

答:

①因为计划任务要执行,提供准确的时间

②服务器间进行通信时,需要统一的一致时间

因为业务的需要

实现方式:

①手动校对 ntpdate

②网络服务校时

ntpd服务

shell > yum -y install ntp

启动服务ntpd

shell > service ntpd start

开机自动启动

img

也可以使用一些第三方提供的校对ntp时间服务

https://opsx.alibaba.com/service?lang=zh-cn&activeKey=2

img

三、企业服务器LNMP环境搭建

LAMP Linux+Apache+MySQL+PHP

LNMP Linux+Nginx+MySQL+PHP

常见的web应用架构 http80 https 443

C/S APP 游戏

B/S 网站

实际业务环境中,依赖文件(小文件)使用yum,生产业务环境需要使用源码编译的方式。

源码编译预估时间:

Mysql 852s≈15m

Nginx 27s≈1m

PHP 564s≈10m

1、MySQL

1.1、相关参数介绍

编译参数的说明

-DCMAKE_INSTALL_PREFIX安装到的软件目录
-DMYSQL_DATADIR数据文件存储的路径
-DSYSCONFDIR配置文件路径 (my.cnf)
-DENABLED_LOCAL_INFILE=1使用localmysql客户端的配置
-DWITH_PARTITION_STORAGE_ENGINE使mysql支持分表
-DEXTRA_CHARSETS安装支持的字符集
-DDEFAULT_CHARSET默认字符集使用 这里配置为utf-8
-DDEFAULT_COLLATION连接字符集
-DWITH_SSL开启mysql的ssl使用

初始化参数说明

--basedir安装到的软件目录
--datadir数据文件存储路径
--usermysql使用的用户

1.2、脚本实现安装及其初始化

#!/bin/bash
#源码编译安装MySQL
#1、创建用户
`id mysql` > /dev/null
[ $? -ne 0 ] && useradd -s /sbin/nologin -M mysql
#2、解决依赖
yum install -y cmake
yum install -y ncurses-devel
#3、编译安装
cd /root/soft
tar zxvf mysql-5.6.33.tar.gz
cd mysql-5.6.33
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_SSL=bundled
make && make install
#配置文件
rm -rf /etc/my.cnf
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
#授权并初始化数据库
chown -R mysql:mysql /usr/local/mysql
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
#配置服务、自启动和环境变量
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
service mysqld start
chkconfig --add mysqld
echo 'PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
#删除匿名用户
#设置root域名的密码
rpm -qa|grep expect
if [ $? -ne 0 ];then
   yum -y install expect
fi
#导入环境变量PATH
export PATH=/usr/local/mysql/bin:$PATH
#初始化root密码 删除匿名用户
echo '#!/usr/bin/expect
set timeout 60
spawn mysql_secure_installation
expect {
"enter for none" { send "\r"; exp_continue}
"Y/n" { send "Y\r" ; exp_continue}
"password" { send "123456\r"; exp_continue}
"Cleaning up" { send "\r"}
}
interact ' > mysql_secure_installation.exp
chmod +x mysql_secure_installation.exp
./mysql_secure_installation.exp

2、Nginx

2.1、介绍

img

常见用法:

1) web服务器软件 httpd http协议

同类的web服务器软件:apache nginx(俄罗斯) IIS(微软 fastcgi) lighttpd(德国)

2)代理服务器 反向代理

3)邮箱代理服务器 IMAP POP3 SMTP

4)负载均衡功能 LB loadblance

Nginx架构的特点:

高可靠:稳定性 master进程 管理调度请求分发到哪一个worker=> worker进程 响应请求 一master多worker

热部署 :(1)平滑升级 (2)可以快速重载配置

高并发:可以同时响应更多的请求 事件 epoll模型 几万

响应快:尤其在处理静态文件上,响应速度很快 sendfile

低消耗:cpu和内存 1w个请求 内存2-3MB

分布式支持 :反向代理 七层负载均衡

官方网址:http://nginx.org/

2.2、安装

常见安装方式:

①yum安装配置,需使用Nginx官方源或者EPEL源

②源码编译

==问题编译过程中出现问题:==

img

img

img

==依赖解决==

shell > yum -y install pcre-devel zlib-devel openssl-devel

安装步骤及其脚本

#!/bin/bash
#创建软件运行用户
`id www`
if [ $? -ne 0 ];then
   useradd -s/sbin/nologin -M www
fi
#安装依赖
yum -y install pcre-devel zlib-devel openssl-devel
#编译安装
cd /root/soft
tar xvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module && make && make install

编译参数说明

参数作用
--prefix编译安装到的软件目录
--userworker进程运行用户
--groupworker进程运行用户组
--with-http_ssl_module支持https 需要==pcel-devel==依赖
--with-http_stub_status_module基本状态信息显示 查看请求数、连接数等
--with-http_realip_module定义客户端地址和端口为header头信息 常用于反向代理后的真实IP获取

1555567009095

1555567046120

1555566981941

1555567352809

1555567098888

###2.3、目录介绍

1555568038407

目录作用
conf配置文件
html网站默认目录
logs日志
sbin可执行文件 [软件的启动 停止 重启等]

###2.4、软件操作参数

img

2.5、服务配置

添加启动服务

nginx编译包里默认服务启动脚本模板,可以通过社区获得

https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/

nginx的service服务启动脚本文件

修改软件和配置路径即可

img

添加自启动

shell > chmod +x /etc/init.d/nginx
shell > chkconfig --add nginx
shell > chkconfig nginx on

img

3、PHP

3.1、介绍

1555493132166

​ ==PHP==(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,==主要适用于Web开发领域==。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,==PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多==;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。

​ ==PHP-FPM(FastCGI Process Manager:FastCGI进程管理器==)对于PHP 5.3.3之前的php来说,是一个补丁包 ,旨在将FastCGI进程管理整合进PHP包中。 相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab定时进行监控,而PHP-FPM则没有这种烦恼。 PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官方收录了。==在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。==

页面分类:

静态页面 html(css、js)

img

img

img

动态页面 用户可以和服务器进行交互页面

img

执行动态页面,需要和服务器进行交互,使用后端语言进行开发

LNMP 使用php进行开发交互

img

LAMP和LNMP在使用和配置PHP的区别:

img

PHP-FPM 是PHP的一种服务管理形式(FastCGI Process Manager:FastCGI进程管理器)

PHP启动一个FastCGI的服务,用来提供对外服务,接收请求。 PHP-FPM FPM 就是PHP的FastCGI服务的进程管理工具。

3.2、安装

解压进入目录

shell > tar zxf php-7.2.12.tar.gz
shell > cd php-7.2.12

编译参数配置

shell > ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-ftp --with-gd --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --with-libzip --enable-soap --without-pear --with-gettext --disable-fileinfo --enable-maintainer-zts

--with 代表需要手动开启 可能需要加载第三方模块 第三方模块没有,就会error

--enable 代表开启php的默认功能

--without 关闭默认加载的模块

解决遇到的依赖软件问题

shell > yum -y install libxml2-devel libjpeg-devel libpng-devel freetype-devel curl-devel openssl-devel

img

img

img

img

编译并安装到目录

shell > make && make install

img

查看是否安装到--prefix的目录路径

img

img

img

-v 查看版本信息 -m 查看模块信息 extension扩展

img

img

3.3、配置

使用php-fpm进行管理php服务,有两个配置文件:

①php.ini #默认php配置文件

②php-fpm.conf #php-fpm相关的配置

复制配置文件

shell > cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
shell > cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
shell > cp /root/soft/php-7.2.12/php.ini-development /usr/local/php/etc/php.ini

注意php.ini配置文件类型

img

development配置项多一些 显示语法错误等等信息 适合于部署开发环境和测试环境

production 默认开启项少 生产环境是不要出现错误 暴露服务器目录结构

添加启动服务

shell > cp /root/soft/php-7.2.12/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
shell > chmod +x /etc/init.d/php-fpm
shell > chkconfig --add php-fpm

添加环境变量(方便php、phpize、phpconfig查找使用)

shell > echo 'PATH=/usr/local/php/bin:$PATH' >> /etc/profile
shell > source /etc/profile

php安装脚本及其初始化配置

#!/bin/bash
#php编译安装
#和nginx使用相同的用户,如果没有就创建
`id www` &> /dev/null
[ $? -ne 0 ] && useradd -s /sbin/nologin -M www
#解决依赖
yum -y install libxml2-devel libjpeg-devel libpng-devel freetype-devel curl-devel openssl-devel
#解压
tar xvf php-7.2.12.tar.gz
cd php-7.2.12
#编译安装php
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-ftp --with-gd --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --with-libzip --enable-soap --without-pear --with-gettext --disable-fileinfo --enable-maintainer-zts && make && make install
#配置文件初始化
cp php.ini-development /usr/local/php/etc/php.ini
#php-fpm服务配置文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
#php-fpm服务子配置文件
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
#配置服务及其环境变量
cp /root/soft/php-7.2.12/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
service php-fpm start
chkconfig --add php-fpm
echo 'PATH=/usr/local/php/bin:$PATH' >> /etc/profile

3.4、nginx+php-fpm配置

写入文件/usr/local/nginx/html/index.php

<?php
	phpinfo();

nginx和php进行关联,告诉nginx,php在哪里

shell  > vim /usr/local/nginx/conf/nginx.conf

img

==$document_root==加载的就是root的目录

img