一、实验环境
1、物理机系统配置:Windows 10 企业版或专业版,I7 处理器,16G 内存,SSD 固态盘512G 分区,安装 Hyper-V 管理器。
2、虚拟机系统配置:Centos1810,1 CPU,512M 内存
3、物理机与虚拟机文件传输:WinSCP-5.13.7 + PuTTY-0.70.00
4、 实验规划(Mongo 可以不安装,但提供安装步骤):
1):NGINX 服务器:192.168.31.100/24/1/1
2):App-01 服务器:192.168.31.101/24/1/1
3):App-02 服务器:192.168.31.102/24/1/1
4):Mongo 服务器:192.168.31.199/24/1/1
5、所有 APP-XXXXX 应用服务器,均使用 NGINX 承载。
二、安装步骤
1、安装 Centos1810 模板机,虚拟机名称:CentOS-1810-Mother-IP-Yes-192.168.31.88,选择最小化安装,配置 IP 为:192.168.31.88/24/1/1,机器名称:centos1810.test.com,安装完成,关机
2、创建 NGINX 差异盘,取名:192.168.31.100-NGINX;创建虚拟机,取名:192.168.31.100-NGINX,1CPU,512M内存,网络选择内部,修改机器名为:nginx,IP为:192.168.31.100
3、创建 App-01 差异盘,取名:192.168.31.101-App-01;创建虚拟机,取名:192.168.31.101-App-01,1CPU,512M内存,网络选择内部,修改机器名为:app01,IP为:192.168.31.101
4、创建 App-02 差异盘,取名:192.168.31.102-App-02;创建虚拟机,取名:192.168.31.102-App-02,1CPU,512M内存,网络选择内部,修改机器名为:app02,IP为:192.168.31.102
5、创建 Mongo 差异盘,取名:192.168.31.199-Mongo;创建虚拟机,取名:192.168.31.199-Mongo,1CPU,512M内存,网络选择内部,修改机器名为:mongo,IP为:192.168.31.199
三、安装并配置 NGINX 开机启动
从网站下载最新的 NGINX 安装包,目前为最新nginx-1.14.2.tar.gz,再启动WinSCP并且连接成功后,将安装包上传到/usr/local/src目录。
通过 WinSCP 打开 PuTTY,或者直接打开 PuTTY,切换到 /usr/local/src 目录,运行 tar -zxvf nginx-1.14.2.tar.gz 解压,再切换到 nginx-1.14.2 目录下,即 cd nginx-1.14.2,执行 ./configure命令,缺包 gcc,安装 yum -y install gcc,再执行 ./configure命令,缺包 pcre,安装 yum -y install pcre-devel,再执行 ./configure命令,缺包 zlib,安装 yum -y install zlib-devel,再执行 ./configure命令,提示正常,编译并安装 make && make install,查位置whereis nginx,显示 nginx: /usr/local/nginx。
切换到 /lib/systemd/system/ 目录,创建 nginx.service 文件 nginx.service,文件内容如下:
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx reload
ExecStop=/usr/local/nginx/sbin/nginx quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
保存文件退出。
四、打开防火墙
查看已开放的端口(默认不开放任何端口)
firewall-cmd --list-ports
开启端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
重启防火墙
firewall-cmd --reload
停止防火墙
systemctl stop firewalld.service
设置防火墙开机启动
systemctl enable firewalld.service
禁止防火墙开机启动
systemctl disable firewalld.service
删除端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent
firewall-cmd --zone=public --remove-port=40000-40080/tcp --permanent
五、配置NGINX开机启动
执行
systemctl enable nginx.service 使 nginx 开机启动
systemctl start nginx.service 启动 nginx
systemctl stop nginx.service 结束 nginx
systemctl restart nginx.service 重启 nginx
验证http://localhost,出现界面
六、重复三、四、五步骤,配置两台 APP 应用服务器
1、注意机器名和 IP 地址的修改
2、把 App-01 服务器:192.168.31.101 的 /usr/local/nginx/html 下的 index.html 的 body 中的第一行增加 <h1>192.168.31.101</h1>
3、把 App-02 服务器:192.168.31.102 的 /usr/local/nginx/html 下的 index.html 的 body 中的第一行增加 <h1>192.168.31.102</h1>
七、配置NGINX,实现负载均衡
1、打开 NGINX 服务器:192.168.31.100,的配置文件,/usr/local/nginx/conf/nginx.conf,修改内容如下:(或者直接拷贝即可)
#user nobody;
worker_processes auto;#工作进程的个数,可以配置多个
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
#epoll是多路复用IO(I/O Multiplexing)中的一种方式,仅用于linux2.6以上内核,可以大大提高nginx的性能
use epoll;
#单个进程最大连接数(最大连接数=连接数*进程数)
worker_connections 1024;
}
http {
#设定mime类型,类型由mime.type文件定义,#文件扩展名与文件类型映射表
include mime.types;
#默认文件类型
default_type application/octet-stream;
#设定日志格式
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65; #长连接超时时间,单位是秒
tcp_nodelay on;
gzip on;#启用Gizp压缩
#服务器的群集
upstream yzj.com { #服务器集群名字
#每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
#ip_hash;
#服务器配置 weight是权重的意思,权重越大,分配的概率越大。
server 192.168.31.101:80 weight=1;
server 192.168.31.102:80 weight=1;
}
#当前的Nginx的配置
server {
listen 80;#监听80端口,可以改成其他端口
server_name yzj.com localhost www.yzj.com;#当前服务的域名,用空格隔开的多个域名
#charset koi8-r;
#access_log logs/host.access.log main;
#location / {
# root html;
# index index.html index.htm;
#}
location / {
proxy_pass http://yzj.com;
proxy_redirect default;
}
location ~ \.(jpg|png|jpeg|bmp|gif|swf|css)$
{
expires 30d;
root /nginx-1.14.2;#root:
break;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443;
# server_name localhost;
# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
保存退出。
2、重启 NGINX: systemctl restart nginx.service
3、测试:在100上打开 http://localhost,会出现101和102切换的效果
4、开启 ip_hash:去掉 ip_hash 前边的 #,使 持久化后端服务器
5、重启 NGINX: systemctl restart nginx.service
6、测试:在100上打开 http://localhost,只会出现101,因为101排在第一位,和其它服务器的 weight 相同
7、修改 upstream yzj.com 中的 weight 为2: server 192.168.31.102:80 weight=2,保存
8、重启 NGINX: systemctl restart nginx.service
9、测试:在100上打开 http://localhost,只会出现102,因为101虽然排在第一位,但 weight 权重比102小,所以102优先提供服务
10、增加其它服务器:103、104,调整 weight,看到效果
八、MongoDB 离线安装及开机启动
1、以管理员 root 登录,从官网https://www.mongodb.com/download-center/community(https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.5.tgz)下载最新文件mongodb-linux-x86_64-4.0.5.gz,并上传到 /usr/local/src下,cd /usr/local/src,执行tar -zxvf mongodb-linux-x86_64-4.0.5.gz,移动并改目录名 mv mongodb-linux-x86_64-4.0.5 /usr/local/mongodb
2、查看当前磁盘空间:df -h,发现 home 下空间较大,在 home 下创建 mongodb 目录,mkdir -p /home/mongodb/db,mkdir -p /home/mongodb/log,创建两个目录,并设置目录权限:chmod -R 7777 /home/mongodb
3、创建配置文件。进入 /usr/local/mongodb 目录下的 bin 目录下,新建 mongodb.conf 文件,port 默认为 27017,为安全起见,使用其它端口,如:1972。具体内容如下
bind_ip = 0.0.0.0
port = 27017
dbpath = /home/mongodb/db
logpath = /home/mongodb/log/mongodb.log
logappend = true
fork = true
注意,开启守护进程模式 fork 的时候,一定要设置 log 日志;
设置log日志要注意,logpath的路径一定要是文件路径,而不是文件夹路径。
4、开启端口供网络访问
firewall-cmd --zone=public --add-port=27017/tcp --permanent
5、查看端口
firewall-cmd --permanent --query-port=27017/tcp
6、重启防火墙
firewall-cmd --reload
注意事项:
a,要加上 --permanent 才能保证重启后也能打开
b,这里最好重启一下防火墙,有时候开启端口并不能立即生效
好了,现在局域网内其它机器也可以连接到数据库了。
7、注册到系统开机启动
centos 7的开机启动跟之前版本的 centos 有很大不同。现在用 systemctl 命令代替了之前的 chkconfig 和 service 命令
注册到开机启动的方法如下:
在系统服务目录下新建mongodb的启动服务,并给与754的权限
cd /lib/systemd/system
创建 mongodb.service ,内容如下
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown -f /usr/local/mongodb/bin/mongodb.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
路径必须要写绝对路径
并给与754的权限chmod 754 /lib/systemd/system/mongodb.service
8、启动 systemctl start mongodb.service
9、关闭 systemctl stop mongodb.service
10、注册到开机启动 systemctl enable mongodb.service
11、检查数据库是否安装成功
ps -aux | grep mongod#查看数据库的进程是否存在
12、重启机器验证init 6,或者 reboot,网络可以访问了。