LNMP 分布式集群(五):ThinkPHP项目部署

3,182 阅读3分钟

前言

LNMP 分布式集群的部署实践 系列文章:

回顾一下基本的架构:

架构(序号代表IP地址:192.168.177.1X)

基本上我们已经搭好了平台,接下来就是为了web应用能在集群上工作进行一些必要的环境配置。

配置

项目下载:

链接: pan.baidu.com/s/1mhPkx2S 密码: rft8

7号创建数据库和用户

/usr/local/mysql/bin/mysql -uroot -p123456
CREATE DATABASE itshop;
GRANT USAGE ON *.* TO 'itshop'@'192.168.177.14' IDENTIFIED BY '123456';
GRANT USAGE ON *.* TO 'itshop'@'192.168.177.15' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON itshop.* TO 'itshop'@'192.168.177.14';
GRANT ALL PRIVILEGES ON itshop.* TO 'itshop'@'192.168.177.15';
FLUSH PRIVILEGES;
EXIT

7号机创建数据库和用户

3、4、5号部署项目

tar -zxvf itshop-1.0.tar.gz
rm -rf /data/www
mv itshop-1.0 /data/www
chown -R www:www /data/www
ls /data/www

7号导入数据

curl -o data.sql http://192.168.177.13/data.sql
ll data.sql
/usr/local/mysql/bin/mysql -uroot -p123456
USE itshop;
source /root/data.sql

4、5号配置项目

cd /data/www
rm -f data.sql
vi Application/Common/Conf/config.php
'DB_DEPLOY_TYPE' => 1,  # 分布式数据库支持
'DB_RW_SEPARATE' => TRUE,  # 读写分离
'DB_TYPE' => 'MYSQL', 
'DB_HOST' => '192.168.177.17,192.168.177.18', 
'DB_NAME' => 'itshop',
'DB_USER' => 'itshop',
'DB_PWD' => '123456',
'DB_PORT' => '3306',
'DB_PREFIX' => 'shop_',	
'DB_CHARSET' => 'utf8',	

测试:

http://192.168.177.11/?m=admin&c=login&a=index

访问测试

4、5号配置单入口

针对Nginx在server块中,进行配置解决 PATHINFO 格式的问题:

rewrite  ^/index.php/(.*) /index.php?s=$1 break;
location / {
    try_files $uri $uri/ /index.php?s=$uri;
}
location ~ \.(gif|jpg|jpeg|png|bmg|swf|xml|ico|css|js|map|txt)$ {
    expires 30d;
}

3、4、5号配置Session

当服务端PHP开启Session时,每收到一个新客户端浏览器的请求,就会为这个浏览器创建一个Session文件保存在服务器中,其文件名是一串自动生成的秘钥,服务器利用Set-Cookie将秘钥响应给浏览器,下次请求就会携带Cookie中的秘钥进行发送。网站用户登录功能的原理就是将用户ID保存到Session文件中,从而区分每个请求对应的用户。如果通过浏览器提交的秘钥找不到Session文件,就说明该用户没有登录。

如果使用服务器本地保存Session的话,每个服务器都不一样,无法正确识别用户。因此我们需要两台服务器共享Session数据,利用Memcached 保存Session 就是非常好的方案。

vi /data/www/.user.ini
session.save_handler = memcached
session.save_path = "192.168.177.19:11211"

service php-fpm reload

2号上传项目静态文件

tar -zxvf itshop-1.0.tar.gz
cp -R itshop-1.0/Public /data/share

4、5号配置目录路径,上传与下载分离

vi /data/www/Application/Common/Conf/config.php # 配置模板路径,上传与下载分离
'TMPL_PARSE_STRING' => array(
        '__PUBLIC__' => '//file.itshop.test/Public',
'__UPLOAD_API__' => '//upload.itshop.test/upload.php',
),

注意我们之前修改本地主机的hosts文件,例如我的MacBook Pro上的vi /etc/hosts

192.168.177.11 itshop.test
192.168.177.11 www.itshop.test
192.168.177.12 file.itshop.test
192.168.177.13 upload.itshop.test

3号链接上传目录,配置Nginx只允许上传

cd /data/www
rm -rf data.sql Public/Uploads
ln -s /data/share/Public/Uploads Public/Uploads  # 将NFS共享目录链接为上传目录
chmod -R 777 Public/Uploads
vi /usr/local/nginx/conf/nginx.conf
location / {
        return 403;
    }
location /upload.php {  # 替换原来的  ~ \.php$
        try_files $uri =404;
        add_header Access-Control-Allow-Origin *;  # 添加此行允许跨域请求
        fastcgi_pass unix:/dev/shm/php-cgi.sock;
        include fastcgi.conf;
    }

service nginx reload

9个虚拟机

访问速度极快(静态文件服务器有缓存哦)

性能测试

我们这里补充做一下性能测试,要知道这九台虚拟机的配置都是一样的:

Server1 处理器和内存

利用Apache中提供的ApacheBench工具,该工具可以在一台计算机中向一个URL地址发送大量的并发请求,然后检测服务器响应这些请求花了多长时间,有多少请求处理失败。故此我们来测试集群的并发能力。

yum -y install httpd-tools
ab -c 500 -n 5000 http://itshop.test/

ab

结果这样啦

-c表示Concurrency Level即并发用户数,-n表示总的请求数量。在使用ab命令时,并发了过高会出现错误:Too many open files,由于系统打开文件数量限制了。MAC中应该是自带了Apache。查看系统打开文件数量,命令:ulimit -a。修改打开文件数量,修改成1024,命令:ulimit -n 1024,查看修改后情况,命令:ulimit -n。——ApacheBench(ab)压力测试工具

Apache JMeter 有软件界面,用来做压力和性能测试也不错。

LNMP 分布式集群的部署实践 系列文章:


dfface 的版权声明:所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处,严禁商业用途!