小型分布式LNMP平台架构搭建
最近想和几个朋友一起搞一个小网站的项目,作为运维工程师,搭环境的任务自然而然的就落到了我的肩膀上,由于我们的项目还处在幻想阶段,所以就不租服务器了,我们就在电脑上开个五六台虚机来先搭建一个开发环境好了。
为了以后和我们的线上环境一致(说的好像真的要上线似得),本屌决定搭建一个分布式的开发环境,由于本屌的笔记本性能有限,所以就使用5台虚机来实现了。总的架构很简单,前端一个nginx负责负载均衡和前端转发,后端两台服务器安装PHP作为应用服务器。剩两台服务器作为数据库服务器并配置主从同步。另外,本屌想在nginx服务器上搭建memcached和redis缓存,让缓存尽量靠近用户来提高访问速度(不过没这么搞过,不知道是不是有缺陷)。
接下来就是配置过程了,有一点是需要提一下的,我使用的linux系统是centos6.5,内核版本应该是2.3(具体记不清楚了),安装软件能用yum方式就用yum方式,别问我为什么不用源码方式(因为源码方式太麻烦了,原谅我偷个懒吧)。
接下来进入正式的搭建过程,我会详细的记录我搭建的过程。
第一步,设置服务器主机名、IP地址,配置防火墙(我直接关了)和Selinux(我也直接关了)、网关、DNS。
nginx主机:
IP地址:10.60.77.200
主机名:nginx
网关:10.60.77.254
DNS:114.114.114.114
PHP-1主机:
IP地址:10.60.77.201
主机名:PHP-1
PHP-2主机:
IP地址:10.60.77.202
主机名:PHP-2
mysql-master主机:
IP地址:10.60.77.203
主机名:mysql-master
mysql-slave主机:
IP地址:10.60.77.204
主机名:mysql-slave
所有配置完毕后ping一下百度看看网络连通性是否正常。没有问题的话就进入第二步。
第二步,安装配置nginx主机
1、安装epel源
http://mirrors.zju.edu.cn/epel/6/i386/epel-release-6-8.noarch.rpm
wKiom1Uqcq_TXowcAAXni5rnibY939.jpg
安装nginx官方yum源:
http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
wKioL1UqdDPhXKowAAX3qHvs0_E567.jpg
安装nginx:
[root@nginx ~]# yum -y install nginx
wKiom1Uqcw_D21rbAAdKN3hUZJo612.jpg
配置nginx负载均衡,将PHP请求转发给后端的PHP-1和PHP-2服务器。后端php服务器全部使用php-fpm监听9000端口。
wKioL1UqdIWjeycbAAJmWBpig2A184.jpg
front.conf的内容如下:
server {
listen 80; //监听端口
server_name www.zhy.com; //网站域名
access_log /var/log/nginx/zhy.access.log main;
location / {
root /var/www/html; //网站根目录
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
root /var/www/html; //PHP文件根目录
fastcgi_pass all; //转发池名称,连接将转发到该池中的地址
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
}
upstream.conf的内容为:
upstream all {
ip_hash; //采用每按IP生成hash值,按hash分配到固定的后端服务器,解决session同步的问题
server10.60.77.201:9000;
server10.60.77.202:9000;
}
wKiom1Uqc1yB5alNAADsYbGeRWs467.jpg
fastcgi_params的内容为:
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param SCRIPT_FILENAME d o c u m e n t r o o t document_root documentrootfastcgi_script_name;
//增加这一行内容
fastcgi_param REDIRECT_STATUS 200;
至此,nginx配置基本完成,启动nginx并设置开机自启动。
wKiom1Uqc4LQtvh4AAETj03pneU166.jpg
第三步,部署应用服务器PHP-1、PHP-2
PHP-1和PHP-2是两台完全一样的服务器,所以两台服务器都使用同样的配置,两台服务器上安装php、php-fpm、php-mysql。两台服务器上同样要安装epel源,安装方法参照nginx部分。
安装完成epel源后,使用如下命令安装php、php-fpm:
[root@PHP-1 ~]#yum -y install php php-fpm php-mysql
安装完成后开始配置php-fpm,配置fpm监听自己的IP地址,并设置允许nginx服务器监听,修改/etc/php-fpm.d/www.conf文件中的如下两行配置:
listen = 10.60.77.201:9000
listen.allowed_clients= 10.60.77.200
应用服务器基本配置至此完成,准备测试用php文件来测试平台是否生效。在应用服务器上的网站根目录下(nginx中配置的网站根目录/var/www/html)创建index.php文件,该文件内容如下:
通过网页访问该文件,当页面显示“数据库连接成功”时表示数据库连接成功。
至此,该架构中的所有内容全部搭建完毕,后期可能还会添加一些PHP的模块、添加一些缓存机制,例如memcached、redis什么的,这些内容将在后期的文章中完成。