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

  • 相关阅读:
    flink 读取kafka 数据,partition分配
    Flink 报错 "Could not find a suitable table factory for 'org.apache.flink.table.factories.StreamTableSourceFactory' in the classpath"
    flume接收http请求,并将数据写到kafka
    【翻译】Flume 1.8.0 User Guide(用户指南) Processors
    【翻译】Flume 1.8.0 User Guide(用户指南) Channel
    【翻译】Flume 1.8.0 User Guide(用户指南) Sink
    【翻译】Flume 1.8.0 User Guide(用户指南) source
    【翻译】Flume 1.8.0 User Guide(用户指南)
    Apache Flink 简单安装
    Java之使用IDE
  • 原文地址:https://www.cnblogs.com/dengbingbing/p/10263821.html
Copyright © 2011-2022 走看看