前言
LNMP 分布式集群的部署实践 系列文章:
- 《(一):Nginx+PHP平台搭建与负载均衡配置》
- 《(二):NFS文件服务器的搭建与文件缓冲上传的配置》
- 《(三):MySQL主从数据库服务器的搭建》
- 《(四):Memcached 缓存服务器的搭建》
- 《(五):ThinkPHP项目部署》
- 《(六):keepalived 高可用方案》
回顾一下基本的架构:
基本上我们已经搭好了平台,接下来就是为了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
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
性能测试
我们这里补充做一下性能测试,要知道这九台虚拟机的配置都是一样的:
利用Apache中提供的ApacheBench工具,该工具可以在一台计算机中向一个URL地址发送大量的并发请求,然后检测服务器响应这些请求花了多长时间,有多少请求处理失败。故此我们来测试集群的并发能力。
yum -y install httpd-tools
ab -c 500 -n 5000 http://itshop.test/
-c
表示Concurrency Level即并发用户数,-n
表示总的请求数量。在使用ab命令时,并发了过高会出现错误:Too many open files,由于系统打开文件数量限制了。MAC中应该是自带了Apache。查看系统打开文件数量,命令:ulimit -a
。修改打开文件数量,修改成1024,命令:ulimit -n 1024
,查看修改后情况,命令:ulimit -n
。——ApacheBench(ab)压力测试工具
Apache JMeter 有软件界面,用来做压力和性能测试也不错。
LNMP 分布式集群的部署实践 系列文章:
- 《(一):Nginx+PHP平台搭建与负载均衡配置》
- 《(二):NFS文件服务器的搭建与文件缓冲上传的配置》
- 《(三):MySQL主从数据库服务器的搭建》
- 《(四):Memcached 缓存服务器的搭建》
- 《(五):ThinkPHP项目部署》
- 《(六):keepalived 高可用方案》
dfface 的版权声明:所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处,严禁商业用途!