一步步搭建分布式应用
- VirtualBox配置静态ip和连外网
- 修改虚拟机主机名称,并配置主机域名解析
- 关闭防火墙
- 配置java环境变量
- fastdfs整合nginx搭建分布式文件服务器
- 安装过程中出现的错误和解决方案
- 可能出错的配置文件
- 启动nginx,但是worker进程挂掉了,报错: ERROR - file: ../storage/trunk_mgr/trunk_shared.c, line: 177, "No such file or directory" can't be accessed, error info: /opt/fdfs
- 一切都ok,但就是访问报404,ERROR - file: /opt/fastdfs-nginx-module/src/common.c, line: 870, file: /opt/fastdfs/fdfs_storage/data/00/00/wKgDyl1qPxKAZUc_AALLQJh-5q
- 附一些网络命令
- 启动前端工程
VirtualBox配置静态ip和连外网
这里我用的是桥接网卡的方式,只启动了一个网卡。使用桥接网卡,虚拟机即能连外网,又能ping通本地主机。缺点是ip是动态分配的,每次开机重启,或外网IP变化,虚拟机的ip就会跟着变化。又由于我用这个东西主要是学分布式的,动态ip比较不方便。所以接下来讲讲如何配置静态IP
- 使用ip addr 查看要配置静态ip的网卡名(lo是回环地址,不是我们想要的),可以看到enp0s3是动态分配ip的网卡
- yum install net-tools安装网络工具,并使用netstat -rn 查看linux的网关(其实取ip的前三个字段.1就是网关了)
- vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 修改该网卡的配置信息
- service network restart 重启你的网络。这样静态IP就配置好了,可使用ip addr查看(此时虚拟机ping www.baidu.com是ping不同的。)
- vi /etc/resolv.conf 添加dns服务器,使其支持dns域名解析,从而使虚拟机能够连接外网(192.168.3.1是自己虚拟机的网关,每台电脑的可能不一样)
# Generated by NetworkManager
nameserver 192.168.3.1
6. 重启服务器
修改虚拟机主机名称,并配置主机域名解析
- hostname查看主机名,hostnamectl set-hostname yourSelfHOstName()
- vi /etc/hosts 配置dns解析
关闭防火墙
为了使我们的网络程序能够被外界访问到,我们需要关闭防火墙 (1. 临时关闭) (2. 永久关闭)
systemctl stop firewalld.service
systemctl disable firewalld.service
查看防火墙的状态
service firewalld.service status
配置java环境变量
解决了虚拟机的网络问题,接下来就是相关软件的安装问题了
- 上传jdk的tar.gz压缩包到linux,使用tar zxvf jdk1.8命令解压
- vi /etc/profile (文件的末尾追加如下内容—相关jdk的位置请自行替换)
JAVA_HOME=/opt/jdk1.8.0_152 #jdk存放位置
JRE_HOME=/opt/jdk1.8.0_152/jre #jre存放位置
PATH=$PATH:$JRE_HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export JRE_HOME
export PATH
- source /etc/profile 使配置文件生效
- java -version 测试是否安装成功
fastdfs整合nginx搭建分布式文件服务器
- 上传图中的四个文件到/opt目录下
- 安装相关的软件编译,运行依赖
yum install gcc-c++ -y
yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools wget
yum -y install libevent
yum install perl*
安装Libfastcommon
- 安装Libfastcommon
cd /opt/libfastcommon-1.0.7
./make.sh
./make.sh install
cp /usr/lib64/libfastcommon.so /usr/lib/
安装FastDFS
- 安装FastDFS
tar zxvf /opt/FastDFS_v5.05.tar.gz -C /usr/local/
cd /usr/local/FastDFS/
./make.sh
./make.sh install
cp /usr/local/FastDFS/conf/* /etc/fdfs/
mkdir -p /home/yuqing/fastdfs
5.配置fastdfs的traketserver的ip
vim /etc/fdfs/storage.conf
- 添加fastdfs到service服务中
cd /usr/local/FastDFS/
cp restart.sh /usr/local/bin/
cp stop.sh /usr/local/bin/
cd /etc/init.d/
chkconfig --add fdfs_trackerd
chkconfig --add fdfs_storaged
vim /etc/init.d/fdfs_storaged
将PRG=/usr/local/bin/fdfs_storaged改成
PRG=/usr/bin/fdfs_storaged (将此处的local去掉)
vim /etc/init.d/fdfs_trackerd
操作同上(只改prg的local,别的local不动)
- 配置fastdfs的server对应的ip以及数据/日志的存放路径
vim /etc/fdfs/storage.conf ### 编辑这个文件就可以了,修改里面的trackver_server的ip
### vim /usr/local/FastDFS/conf/storage.conf
vim /etc/fdfs/client.conf ### 编辑客户端配置文件的服务器的ip地址。很重要,很重要
- 启动fastfds服务
service fdfs_storaged start
service fdfs_trackerd start
如果报错:
解决方案见文末
- 上传测试
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/lmj/tangyan.jpg
安装fast_nginx_module
- 解压配置fast_nginx_module
tar zxvf fastdfs-nginx-module_v1.16.tar.gz
cd /opt/fastdfs-nginx-module/src
vim config
运行到这里千万要注意:
原来的:CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
现在的:CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
/*就是要去掉这一行的local,别的local不要去,别的不动就好了/
cp mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf
mkdir -p /homeyuqing/tmp
mkdir -p /var/temp/nginx/client
安装nginx
- 解压nginx到/usr/local/
cd /opt
tar zxvf nginx-1.12.2.tar.gz -C /usr/local/
cd /usr/local/nginx-1.12.2/
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/opt/fastdfs-nginx-module/src
或者单独运行这条语句也行 ./configure --add-module=/opt/fastdfs-nginx-module/src/
make && make install
- 配置nginx反向代理/请求转发
vim /usr/local/nginx/conf/nginx.conf
内容如下:
location /group1/M00/ {
ngx_fastdfs_module;
}
- 原来的是:
location / {
root html;
index index.html index.htm;
}
- nginx相关命令
/usr/local/nginx/sbin/nginx 启动
/usr/local/nginx/sbin/nginx -s reload 重启动
/usr/local/nginx/sbin/nginx -s stop 停止
- 浏览器访问 http://192.168.3.203:8888/group1/M00/00/00/wKgDy11pSfqAU-8yAALLQJh-5qk800_big.jpg 测试(follow3节点正常)
安装过程中出现的错误和解决方案
正常启动是这样的,nginx有两个进程
但是由于我在编译安装nginx时,加入了fastdfs-nginx-module模块,但这个模块我在配置时又出了一些问题( ./configure --add-module=/opt/fastdfs-nginx-module/src/),所以启动失败的情况是这样的
这样它会导致浏览器请求nginx是一直处于响应等待状态,浏览器左上角一直在转圈。能访问到服务,但却一直处于等待。
- 解决办法1:
删除fastdfs-nginx-module模块,重新编译安装。执行如下命令即可
cd /usr/local/nginx-1.12.2/
./configure
make && make install
然后重启nginx就可以了(这样能解决nginx不能用的问题,但是nginx无法结合fastdfs完成分布式文件存储)
- 解决办法2:
查看原因:
vim /etc/init.d/fdfs_storaged
将第6步的
cd /usr/local/FastDFS/
cp restart.sh /usr/local/fdfs/
cp stop.sh /usr/local/fdfs/
改成
cd /usr/local/FastDFS/
cp restart.sh /usr/local/bin/
cp stop.sh /usr/local/bin/
然后启动
service fdfs_storaged start
service fdfs_trackerd start
- 解决方案3—ginx和fastdfs整合后nginx没有worker节点以及nginx无法正常启动问题
当使用nginx源码编译安装的时候
注意当nginx和fastdfs整合的时候,nginx的nginx配置文件需要修改,这时候会有两个nginx.conf。我们会认为nginx会读取的是/usr/local/nginx/conf的文件,其实不是!坑!
这个时候读取的时解压后nginx的目录,读取的是解压后的nginx下的conf目录下的nginx.conf,不要忘记修改这个文件!
如果这个文件有错误,启动不了worker节点
查看错误日志:发现如下:
conf file “/etc/fdfs/mod_fastdfs.conf”, host “192.168.3.304” is invalid
我的ip是192.168.3.204,但我却不小心配成了304,所以更改就好了
可能出错的配置文件
vim /usr/local/nginx/logs/error.log ###根据报错日志里面的信息定位错误到下面配置文件里
vim /usr/local/nginx/conf/nginx.conf
vim /usr/local/nginx-1.12.2/conf/nginx.conf
vim /etc/init.d/fdfs_storaged
vim /etc/init.d/fdfs_trackerd
vim /etc/fdfs/storage.conf ### 编辑这个文件就可以了,修改里面的trackver_server的ip
vim /opt/fastdfs-nginx-module/src/config
vim /etc/fdfs/mod_fastdfs.conf
vim /etc/init.d/fdfs_storaged
vim /etc/fdfs/mod_fastdfs.conf 记得将里面的url_hava_group_name等号后的值改成true
(已经修复上述bug)
- [emerg] open() “/var/run/nginx/nginx.pid” failed (2: No such file or directory)处理
mkdir -p /var/run/nginx
在var/run/下建立一个文件夹命名为nginx,然后重启
修改:
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;(把#删除)
然后:wq保存退出
在/usr/local/nginx目录下建立logs文件夹,把/var/run/nginx/nginx.pid这里面的这个nginx.pid拷贝到这个logs文件夹下面,
然后把logs这个文件夹在conf下也拷贝一份
然后:
[root@localhost ~]# chmod 755 logs
[root@localhost ~]# chmod 755 nginx.pid
[root@localhost ~]# /usr/local/nginx/sbin/nginx
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload
记录一下:
vim /etc/fdfs/storage.conf
vim /etc/fdfs/mod_fastdfs.conf
启动nginx,但是worker进程挂掉了,报错: ERROR - file: …/storage/trunk_mgr/trunk_shared.c, line: 177, “No such file or directory” can’t be accessed, error info: /opt/fdfs
这个错误是因为我配置了/opt/fdfs,但是我却没有创建这个目录,所以使用命令 mkdir /opt/fdfs创建即可
一切都ok,但就是访问报404,ERROR - file: /opt/fastdfs-nginx-module/src/common.c, line: 870, file: /opt/fastdfs/fdfs_storage/data/00/00/wKgDyl1qPxKAZUc_AALLQJh-5q
本地目录是有个文件的 ls /opt/fastdfs/fdfs_storage/data/00/00/
使用命令修改权限即可
- chmod 777 /opt/fastdfs/fdfs_storage/data/00/00/
附一些网络命令
lsof -i:8200 查看端口占用情况
启动前端工程
命令行进入 E:\WORK_SPACE\Idea_workspace\分布式\gmall0106\front\gmall-admin
然后 npm run dev
http://127.0.0.1:8888/#/dashboard