Centos 7 搭建 NGINX 负载均衡

一、实验环境

    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,网络可以访问了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容