PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建

小型分布式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

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第1张图片

安装nginx官方yum源:

http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第2张图片

安装nginx:

[root@nginx ~]# yum -y install nginx

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第3张图片

配置nginx负载均衡,将PHP请求转发给后端的PHP-1和PHP-2服务器。后端php服务器全部使用php-fpm监听9000端口。

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第4张图片

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;

}

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第5张图片

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    $document_root$fastcgi_script_name;

//增加这一行内容

# PHP only, required if PHP was built with--enable-force-cgi-redirect

fastcgi_param  REDIRECT_STATUS    200;

至此,nginx配置基本完成,启动nginx并设置开机自启动。

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第6张图片

第三步,部署应用服务器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文件,该文件内容如下:

phpinfo();

该文件用户显示php基本信息,如果能正常显示,则表明php运行正常,如果不能显示则代表配置错误。正常显示页面如下所示:

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第7张图片

至此,应用服务器搭建并测试完成。

第四步,搭建mysql数据库服务器并配置主从同步。

在安装步骤,两台服务器完全一致,都要安装mysql、mysql-server两个软件,在配置mysql主从同步时需要分开配置,故安装过程就以一台服务器为例:

[root@mysql-master~]# yum -y install mysql mysql-server

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第8张图片

安装完成后,开始配置mysql主从同步,首先配置mysql-master服务器:

修改mysql服务的配置文件/etc/my.cnf,文件内容如下:

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

log_bin                //开启binlog日志

sync_binlog=1    //允许同步binlog日志

server_id=203   //设置serverid,此id应在网络中保持唯一

# Disabling symbolic-links is recommendedto prevent assorted security risks

symbolic-links=0

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

启动mysql服务并修改root用户本地登录mysql数据库的密码:

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第9张图片

[root@mysql-master ~]# mysqladmin -urootpassword "mysqlmaster"  //修改使用root本地登录mysql数据库的密码为“msyqlmaster”

修改密码后,使用新密码登录数据库,为从服务器同步授权:

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第10张图片

3620bc92c30bbd2c5d060b7397484bf7.png

授权10.60.77.204可以同步master服务器上的binlog日志,且设置同步时使用的用户名是slaveuser,密码是slavepass。

查看当前使用的binlog日志的文件名以及其位偏移量:

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第11张图片

结果中显示当前master服务器使用的binlog文件是mysqld-bin.000001,当前的位偏移量是567,至此,mysql-master配置完成,退出数据库,并开始配置slave服务器。

第五步,配置mysql-slave服务器,修改slave的mysql配置文件如下:

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

log_bin         //开启binlog日志

sync-binlog=1    //允许同步binlog日志

server_id=204   //设置serverid

read_only=1       //设置只读,不允许写操作

# Disabling symbolic-links is recommendedto prevent assorted security risks

symbolic-links=0

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

设置完成后启动mysql服务并设置开机自启动

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第12张图片

修改使用root本地登录数据库的密码为“mysqlslave”,登录mysql服务器设置master服务器:

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第13张图片

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第14张图片

设置完成后,启动同步并查看同步状态:

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第15张图片

当Slave_IO_Running与Slave_SQL_Running状态都是yes,表示slave已经工作正常,至此,mysql主从同步搭建完成。

配置完成后,登录master服务器,授权为应用服务器授权:

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第16张图片

第七步,测试主从同步是否成功,测试应用服务器是否可以成功连接数据库;

在master服务器上创建数据库,在slave数据库中查看是否同步创建:

master:

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第17张图片

slave:

PHP如何搭建分布式架构,小型分布式LNMP平台架构搭建_第18张图片

至此,可以确定,主从同步正常工作。

在应用服务器上的网站根目录下创建连接数据库的php文件,测试连接数据库是否正常,连接数据库的PHP文件内容如下:

$link=mysql_connect('10.60.77.203:3306','php','phpmysql');    //连数据库

if($link) echo "数据库连接成功!!";  //成功时的提示

mysql_close();     //关数据库

?>

通过网页访问该文件,当页面显示“数据库连接成功”时表示数据库连接成功。

至此,该架构中的所有内容全部搭建完毕,后期可能还会添加一些PHP的模块、添加一些缓存机制,例如memcached、redis什么的,这些内容将在后期的文章中完成。

你可能感兴趣的:(PHP如何搭建分布式架构)