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

原文地址:https://www.cnblogs.com/dengbingbing/p/10263821.html