zoukankan      html  css  js  c++  java
  • nginx负载均衡场景实验2

    nginx负载均衡场景实验

    1.开始之前,先把所有的firewalldiptables以及selinux规则禁用先!

    2.五台PC环境:CentOS Linux release 7.5.1804 (最小化)

    主数据库IP地址:172.18.139.25

    从数据库IP地址:172.18.139.78

    Nginx+PHP+Wordpress服务器1IP地址:172.18.139.46

    Nginx+PHP+Wordpress服务器2IP地址:172.18.139.47

    调度服务器IP地址:172.18.139.77

    3.使用YUM源:阿里云、Nginx官方源,详细信息如下:

    阿里云源:

    [root@localhost ~]# cat /etc/yum.repos.d/base.repo

    [epel]

    baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64/

    gpgcheck=0

    enable=1

    Nginx官方源:

    [root@localhost ~]# cat /etc/yum.repos.d/nginx.repo

    [nginx]

    name=nginx repo

    baseurl=http://nginx.org/packages/centos/7/$basearch/

    gpgcheck=0

    enabled=1

    priority=1

    数据库版本:5.5.56-MariaDB

    Mariadb主数据库服务器上:

     

    1.禁用firewalld,selinux,iptables,再安装相关包

    systemctl stop firewalld.service

    yum -y install mariadb-server

     

    2.修改主数据库配置文件

    vim /etc/my.cnf,  在[mysqld]中添加内容如下:

     

    [mysqld]

    ...

    log_bin=/data/mysql/master-log

    server-id=1

     

    添加完保存退出

     

    3.创建二进制文件存放路径

    mkdir -pv /data/mysql/

    chown -R mysql.mysql /data

    systemctl restart mariadb

     

    4.登陆主数据库服务器上新建账户,为从服务器同步数据做准备

    mysql

    create database wordpress;                                

    GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'lei'@'172.18.139.%' IDENTIFIED BY '123456';

    reset master;                                                 //不是第一次安装不要使用这个命令!!!

    show master status;       

    +-------------------+-----------+

    | Log_name          | File_size |

    +-------------------+-----------+

    | master-log.000001 |       120 |

    +-------------------+-----------+                 

    quit

     

    5.导出主服务器上的数据,导出后不要有和重启主服务器的数据库相关的任何操作!!

    mysqldump   --all-databases  --single_transaction --flush-logs --master-data=2 --lock-tables > /opt/backup.sql

    scp /opt/backup.sql 172.18.139.78:/opt/

     

     

    Mariadb从数据库服务器上:

     

    1.禁用防火墙,selinux,iptables,再安装相关包

    systemctl stop firewalld.service

    yum -y install mariadb-server

     

     

    2.修改从数据库配置文件

    vim /etc/my.cnf,  在[mysqld]中添加内容如下:

     

    [mysqld]

    ...

    ...

    read_only=ON

    server-id=2

     

    systemctl restart mariadb

     

     

    3.导入数据并同步数据

    mysql < /opt/backup.sql

    mysql

    CHANGE MASTER TO MASTER_HOST='172.18.139.25', MASTER_USER='lei', MASTER_PASSWORD='123456', MASTER_PORT=3306, MASTER_LOG_FILE=' mysql-bin.000001', MASTER_LOG_POS=120;

    start slave;

    show slave statusG

    show  processlistG                //查看同步过程,如果文件大的话应该能看的到

     

     

    至此,主从复制实现

     

    PHPNginx安装部署:

    Nginx使用官方的版本: 1.14.2

    PHP版本: 5.4.16

    Wordpress版本5.0.3

    PHP配置:

    两台php+nginx+worspress服务器上PHP安装部署,都用相同的配置,详情如下:

    1.yum源安装php-fpm,php-mysql,使用的是阿里云的epel源!

    yum -y install php-fpm php-mysql

    systemctl stop firewalld.service

    yum -y install mariadb-server

     

    2.设置同步时区

    vim /etc/php.ini                                //找到和下面两行相关的配置文件

    date.timezone = Asia/Shanghai                //设置本地时区

    short_open_tag = On                                   //允许使用缩写形式的php代码

     

    vim /etc/php-fpm.d/www.conf      //找到并修改两行中的用户和组

    user = nobody                                               

    group = nobody                                             

     

    保存退出

     

    Nginx配置:

    两台php+nginx+worspress服务器上Nginx安装部署都用相同的配置,详情如下:

    1.     yum安装Nginx,这里使用的是官方的源

    内容如下:

    [root@localhost yum.repos.d]# cat nginx.repo

    [nginx]

    name=nginx repo

    baseurl=http://nginx.org/packages/centos/7/$basearch/

    gpgcheck=0

    enabled=1

     

    yum -y install nginx

     

    2.为后面存放网页配置建一个目录,并设置相应的权限:

    mkdir /data/web -pv

    setfacl -R -m u:nobody:rwx /data

     

    3.修改配置文件

    vim /etc/nginx/nginx.conf

     

    在全局配置中,修改如下内容:

    user nobody;

    worker_processes  auto;

     

    在事件驱动模块中,把最大连接数量调大到65535

    worker_connections 65535;

     

    http模块中

    整体配置:

    tcp_nodelay    on;

    ...

    gzip  on;

     

    4.重读配置文件使其生效

    nginx -c /etc/nginx/nginx.conf

    nginx -s reload

     

    具体配置如下:

    user  nobody;

    worker_processes  auto;

    error_log  /var/log/nginx/error.log warn

    pid        /var/run/nginx.pid;

     

    events {worker_connections  65535;}

     

    http {

        include       /etc/nginx/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  /var/log/nginx/access.log  main;

        sendfile        on;

        tcp_nopush     on;

        tcp_nodelay    on;

        keepalive_timeout  65;

        gzip  on;

        include /etc/nginx/conf.d/*.conf;

    }

     

    server有关的额配置为了方便管理我们写在/etc/nginx/conf.d/default.conf里面

    具体配置如下:

    server {

        listen       80;

        server_name  www.leishujun.com;

        root    /data/web;

        fastcgi_buffers 512 64k;

     

        location / {

            index  index.php index.html index.htm;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   /usr/share/nginx/html;

        }

     

    location ~ .php$ {

                fastcgi_pass   127.0.0.1:9000;

                fastcgi_index  index.php;

                fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;

                include        fastcgi_params;

            }

    }

     

     

    Wordpress配置:

    1.到官网下载wordpress并修改权限

    wget -O /data/web/wodpress.tar.gz https://wordpress.org/latest.tar.gz

    cd /data/web

    tar xf wodpress.tar.gz

    mv wodpress/* .

    rm -rf ./wordpress*

    chown -R nobody.nobody /data/web/*

     

    2.修改配置,并分别访问“https://api.wordpress.org/secret-key/1.1/salt/”这个网址获取盐

    cp wp-config-sample.php wp-config.php

    curl https://api.wordpress.org/secret-key/1.1/salt/

     

    vim wp-config.php

    (从第22行开始)

    /** WordPress数据库的名称 /

    define(‘DB_NAME’, ‘wordpress’);               //前面创建数据库名字

    /* MySQL数据库用户名 /

    define(‘DB_USER’, ‘lei’);                                 //前面创建的账户的名字

    /* MySQL数据库密码 /

    define(‘DB_PASSWORD’, ‘123456’);            //前面创建的数据库的登录密码

    /* MySQL主机 */

    define(‘DB_HOST’, ‘172.18.139.77’);                   //这里的IP就是前端Nginx调度的IP地址

    …(从第49行左右开始),将curl 得到的结果覆盖到下方

    define('AUTH_KEY',         '_v*zLU~i=^kc`JM,9_t/j#/r+SAd,_.ucaKrdr^:Q&@+A*bMVBSWH=P8th4qh*bS');

    define('SECURE_AUTH_KEY',  '<S|-bq(99:+Xe-YSa2t/{DhP;L]7cfk(D-t0NI#0y&5V=B*L0YIWlj7} rxB||k9');

    define('LOGGED_IN_KEY',    'sx-kZJRl,L:P+-j4])uE)h@|.rm?/+.&D5,(G92M-a7>|;-2Sn[`M|4>g3tsb^Dy');

    define('NONCE_KEY',        '+aBZYI}c.|v*+wFlKF!P 941;&<~z>/6i^Qaoslv)I=-CzIUDC(a:I$}7huP,B.+');

    define('AUTH_SALT',        'd]cGLk7qnE],}~`XQ8IM#3V]Dno<eT0M9Fvrjc+[^{SF:-m|@:,H?yS1%5uDra)*');

    define('SECURE_AUTH_SALT', 'oPI ]3qhq%o Q H._J2<=7vt-]fZf7|dX2U%Kj=fnyTE_eV)p[vb9Ute])*YO=Y{');

    define('LOGGED_IN_SALT',   '|{}XaZ|r#W=_UMSEqFpX$C]%%q] ,rI CdvTht77ev}fQ&(zK!wAB+-L_;T|0Yu~');

    define('NONCE_SALT',       '5[L|uvhV4E$}c1VVu$zyg6|rMjy2>]gEfj7h}q2@FZU)KXN2{4yQbhzP%khA*bUX');

    (最后再加上这三行,可以跳过许多无法预料的麻烦!)

    define(“FS_METHOD”,”direct”);

    define(“FS_CHMOD_DIR”, 0777);

    define(“FS_CHMOD_FILE”, 0777)

     

     

    调度服务器上安装Nginx进行调度:

    1.也是使用官方源下载的nginx

    yum -y install nginx 

    systemctl stop firewalld.service

    yum -y install mariadb-server

     

     

    2.编辑配置文件

    vim /etc/nginx/nginx.conf

     

    只需要在事件驱动下方添加转发代理模块即可,配置如下:

     

    stream  {upstream mysql

    {server  172.18.139.25:3306;}                         //这个是主数据库的IP地址和端口

    server {listen 172.18.139.77:3306; proxy_pass  mysql;}}              //代理机器IP和端口

     

    而整体配置如下:

    全局配置:

    user  nobody;

    worker_processes  auto;

    error_log  /var/log/nginx/error.log warn;

    pid        /var/run/nginx.pid;

     

    事件驱动配置:

    events {worker_connections  65535;}

     

    代理转发配置:

    stream  {upstream  mysql

    {server 172.18.139.25:3306;}

    server {listen 172.18.139.77:3306;                   proxy_pass  mysql;}

    }

     

    http {

        include       /etc/nginx/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  /var/log/nginx/access.log  main;

        sendfile        on;

        tcp_nopush     on;

        tcp_nodelay    on;

        keepalive_timeout  65;

        gzip  on;

        include /etc/nginx/conf.d/*.conf;

    }

     

     

    2.     为了方便管理我们把server的配置写到/etc/nginx/conf.d/目录下的leishujun.conf配置文件中 :

    配置如下:

    upstream blogs {

       server 172.18.139.46 weight=1 max_fails=3 fail_timeout=100s;

       server 172.18.139.47 weight=1 max_fails=3 fail_timeout=100s;

       #ip_hash;   //默认是使用轮询round-robin的方式,但是如果想利用到缓存可以考虑开启

    }

     

    server {

            listen 80;

            server_name www.leishujun.com;

            index index.html index.php;

     

            location / {

                    proxy_pass http://blogs;

                    proxy_set_header Host $host;

                    proxy_set_header X-Real-IP $remote_addr;

                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                    proxy_next_upstream http_502 http_504 error timeout invalid_header;

            }

    }

     

    3.重读配置文件使其生效

    nginx -c /etc/nginx/nginx.conf

    nginx -s reload

     

     

    实现轮询!但是检验过程中可能因为缓存原因可能会出现误判!

    补充:为了检验实验效果,使用notepad修改Windows中的hosts文件,在这个文件中加入我们之前在配置中写入的调度器的IP地址和域名,在CMD中输入“C:WindowsSystem32Driversetc”,追加如下内容:

    172.18.139.77          www.leishujun.com

    最后我们使用www.leishujun.com在浏览器中进行访问!

     

    配置NFS共享文件

     

    在两个数据库服务器上的操作:

    1.先在主和从数据库服务器上都装上nfs服务

    yum -y install nfs-utils

     

    2.在主从数据库上都创建一样的文件夹并赋予一样的权限,然后在主服务器上将其共享出去

    mkdir -pv /nfsmount/images

    setfacl -R -m o:rw /nfsmount/images

     

    3.在主数据库服务器上:

    vim /etc/exports

    /nfsmount/images *(rw,no_root_squash,sync)

     

    4.创建完成,重启服务,并查看自己的共享文件是否已经共享!

    systemctl restart nfs

    exportfs -v

     

    在两台PHP+Nginx+Wordpress服务器上进行的操作:

    1.查看主数据库服务器上的文件挂载状态

    showmount -e 172.18.139.25

     

    2.使用vim在/etc/fstab最后追加如下内容:

    vim /etc/fstab

    172.18.139.25:/nfsmount/images /data/web/wp-content/uploads nfs defaults,_netdev 0 0

    3.使用vim在/etc/rc.local软连接文件最后追加如下内容:

    vim /etc/rc.local 

    mount -t nfs 172.18.139.25:/nfsmount/images /data/web/wp-content/uploads

     

    4.读取/etc/fstab的挂载

    mount -a

  • 相关阅读:
    虚拟机安装CentOS不能联网的解决
    64位openSUSE12.3最完整的安装QQ的方法
    打水井
    一个阶乘中末尾零的个数
    DiscuzX开发手册【精品】
    一个获取PHP消耗时间的小函数
    php获取本月的第一天与最后一天
    在博客园创建了一个自己的博客~
    ie6 fixed 很纠结~这个js就解决了
    现在各个网站都在使用瀑布流布局吧~
  • 原文地址:https://www.cnblogs.com/dengbingbing/p/10263821.html
Copyright © 2011-2022 走看看