nginx部署wordpress负载均衡

nginx部署wordpress架构

实验环境 

(nginx)         10.20.20.3    

(WordPress nginx   PHP) 10.20.20.4     10.20.20.5    

(mysql   主从)     10.20.20.6     10.20.20.7

 

查看WordPress支持的mysql版本

 

数据库主从设置  

安装依赖包

yum install libaio* -y

 

官网下载包  二进制安装

脚本安装   #脚本练习我QQ 790827253

传入包  安装mysql

10.20.20.6 (主)     10.20.20.7(从)

 

主 配置

vim /etc/my.cof

 

#master

[mysqld]

socket=/var/lib/mysql/mysql.sock

user=mysql

symbolic-links=0

datadir=/data/mysql

innodb_file_per_table=1

server-id=1

log-error=/data/mysql/mysql_error.txt

log-bin=/data/mysql/master-log

 

[client]

port=3306

socket=/var/lib/mysql/mysql.sock

 

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/tmp/mysql.sock

 

 

 

创建库用户

create database test1;

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO ‘dbb’@’10.20.20.%’ IDENTIFIED BY ‘123456’;

grant replication slave on *.* to “dbb”@”10.20.20.%” identified  by ‘123456’;

如果主数据库之前有数据 要把数据导出来然后让从数据库同步

要把日志改成数据大的时候

导出文件

/usr/local/mysql/bin/mysqldump   –all-databases  –single_transaction –flush-logs –master-data=2 –lock-tables > /opt/backup.sql

传入从

scp /opt/backup.sql  10.20.20.7:/opt/

 

/etc/init.d/mysqld  restart

 

查看二进制日志

 

 

从配置

vim /etc/my.cof

#slave

[mysqld]

socket=/var/lib/mysql/mysql.sock

user=mysql

symbolic-links=0

datadir=/data/mysql

innodb_file_per_table=1

server-id=10

#log-bin=/data/mysql/master-log

relay-log = /data/mysql

 

[client]

port=3306

socket=/var/lib/mysql/mysql.sock

 

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/tmp/mysql.sock

 

 

#mysql  < /opt/backup.sql #slave 导入sql文件数据

 

CHANGE MASTER TO   MASTER_HOST=’10.20.20.6′,MASTER_USER=’dbb’,MASTER_PASSWORD=’123456′,MASTER_LOG_FILE=’master-log.000002′,MASTER_LOG_POS=950;

 

验证

show  databases;

start  slave ;

show slave status\G

 

主从复制的问题

1  防火墙是否关闭

2  日志一定要同步到正确的时候

3 使用reset slave 清除同步信息  reset maser

 

 

(WordPress nginx)10.20.20.4     10.20.20.5   

php安装

安装依赖包

yum install -y gcc gcc-c++  make zlib zlib-devel pcre pcre-devel  libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

 

yum -y install wget vim pcre pcre-devel openssl openssl-devel libicu-devel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel

 

 

下载包

wget

增加用户

useradd www

编译

./configure  –prefix=/usr/local/php –with-config-file-path=/usr/local/php/etc –with-config-file-scan-dir=/usr/local/php/etc/conf.d –enable-fpm –with-fpm-user=www –with-fpm-group=www –with-pear –with-curl  –with-png-dir –with-freetype-dir –with-iconv   –with-mhash   –with-zlib –with-xmlrpc –with-xsl –with-openssl  –with-mysqli –with-pdo-mysql –disable-debug –enable-zip –enable-sockets –enable-soap   –enable-inline-optimization  –enable-xml –enable-ftp –enable-exif –enable-wddx –enable-bcmath –enable-calendar   –enable-shmop –enable-dba –enable-sysvsem –enable-sysvshm –enable-sysvmsg

 

make -j 2 && make install

 

cd /usr/local/php/etc/

[root@redis-s1 etc]# pwd

/usr/local/php/etc

[root@redis-s1 etc]# cp php-fpm.conf.default  php-fpm.conf

 

cd  /usr/local/php/etc/php-fpm.d/

root@redis-s1 php-fpm.d]# pwd

/usr/local/php/etc/php-fpm.d

[root@redis-s1 php-fpm.d]# cp www.conf.default  www.conf

 

vim php-fpm.conf

vim  www.conf

修改参数

8   4      4   6

pm.max_children =8
pm.start_servers =4
pm.min_spare_servers =4
pm.max_spare_servers =6

配置说明:
pm.max_children #,子进程最大数
pm.start_servers #,启动时的进程数
pm.min_spare_servers #,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.max_spare_servers #,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理

 

启动

/usr/local/php/sbin/php-fpm

 

 

(WordPress nginx)10.20.20.4     10.20.20.5   

安装nginx

 

配置官方yum源

或者编译安装

俩个服务器都是一样的配置

 

编译安装过程

cd /usr/local/scr/

传入安装包 1.12

解压缩

tar xvf

cd   进去  编译

./configure –prefix=/usr/local/nginx  –with-pcre  –with-http_stub_status_module –with-http_ssl_module

make && make install

配置文件在

/usr/local/nginx/conf/nginx.conf

 

#mkdir /data/nginx/wordpress –p

#chown  www.www /usr/local/nginx/ /data/nginx/ -R

location / {

            root   /code/wordpress;

            index   index.php index.html index.htm;

            if ($http_user_agent ~ “ApacheBench|WebBench|TurnitinBot|Sogou web spider|Grid Service”) {

                proxy_pass http://www.baidu.com;

                return 403;

            }

        }

location ~ \.php$ {

            root          /code/wordpress;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

             include        fastcgi_params;

        }

 

 

 

 

1.4:创建php测试页:

# cat /data/nginx/wordpress/index.php

<?php

  phpinfo();

?>

 

1.6:准备数据库:

mysql>  CREATE DATABASE wordpress;

创建的用户是负载均衡的ip地址  这里是0.20.20.3  

mysql> GRANT ALL PRIVILEGES ON *.* TO “dbb”@”10.20.20.%”  IDENTIFIED BY “123456”;

 

mysql> FLUSH PRIVILEGES;

 

部署WordPress:

[root@redis-s4 wordpress]# pwd

/data/nginx/wordpress

# tar  xvf wordpress-5.0.1-zh_CN.tar.gz

# mv wordpress-5.0.1-zh_CN.tar.gz  /opt

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

#vim wp-config.php #修改数据库配置

# grep “^[a-Z]” wp-config.php

define(‘DB_NAME’, ‘wordpress’);

define(‘DB_USER’, ‘wordpress’);

define(‘DB_PASSWORD’, ‘123456’);

define(‘DB_HOST’, ‘192.168.7.103’);

define(‘DB_CHARSET’, ‘utf8’);

define(‘DB_COLLATE’, ”);

define(‘AUTH_KEY’,         ‘zY%A)<+`Qf^68kzMC-)0+bL3m!LADP-PgJ9a~-CLtk*JnJ%-OGDEi/-v*zoJx1gP’);

define(‘SECURE_AUTH_KEY’,  ‘1muyi_3wR[/<}1-[2/F=Lb3`1c-+o5*!uu4-un-4!iMb!Nl|X=}Ud-<PGxkPpuse’);

define(‘LOGGED_IN_KEY’,    ‘*%/!SxN}FllpDe4+_Phylp>_^jD]N$Tc9/CstL )yRvLg!+9y #l}1?Da 8}sat{‘);

define(‘NONCE_KEY’,        ‘mTY2Bio ;v4j^%#O>J&@Py[6TaYy+mLmbp7$[=c,l|qY9TPwSH+Kf(!PUmTE9J`c’);

define(‘AUTH_SALT’,        ‘~:wkxx83`q_+bm|{MH-|CA<`>#JJGitCsed#?a^BSsm{rVC1sg;b:&/:h$f>9D.z’);

define(‘SECURE_AUTH_SALT’, ‘u%_}v`0L~#<kZ|U +st.]iNTbGq-%Bb)Ti&E<$-LMU6jtEz}X)T$MZ{@S(#DJOQp’);

define(‘LOGGED_IN_SALT’,   ‘QxUBuWv[GjaGx7=VR|&.i?wTsS-Jr($}p#?y})O-N1*h$gh d cj%H-g2~HV*&ki’);

define(‘NONCE_SALT’,       ‘>Lx7Vu=>R+O||Ks)cCDGO=+st|Ja&|+5GlR?F{1Vdng-q:f#:{[TIfY#EtP|1k8a’);

wp-config.php  文件中的主机不是mysql的地址而是 负载均衡的nginxip  10.20.20.3  独立的

 

访问网站  得到的替换在下面

 

测试并启动Nginx:

[root@redis-s4 wordpress]# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[root@redis-s4 wordpress]# /usr/local/nginx/sbin/nginx

 

 

 

 

推荐yum安装

yum 安装过程

配置yum 源 官网

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

[nginx]

name=nginx repo

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

gpgcheck=0

enabled=1

修改配置文件  改用户

vim /etc/nginx/nginx.conf  

 

user  www;

worker_processes  auto;

 

 

vim /etc/nginx/nginx.conf

server {

        server_name www.web.com;

        listen   80;

        root   /code;

        index index.php index.html;

 

        location ~ \.php$ {

            root /code;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

            include        fastcgi_params;

        }

}

 

更改目录的权限 和用户

chown  www.www  /code/ -R

测试页

[root@nginx ~]# cat /code/info.php

<?php

        phpinfo();

?>

 

 

部署博客产品Wordpress

 

1) 配置Nginx虚拟主机站点,域名为

www.dbb.com

#1.nginx具体配置信息

[root@nginx ~]# cat /etc/nginx/conf.d/wordpress.conf

server {

    listen 80;

    server_name www.dbb.com;

    root /code/wordpress;

    index index.php index.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;

    }

}

 

2) 重启nginx服务

[root@nginx ~]# systemctl restart nginx

3) 获取wordpress产品,解压并部署wordress

[root@nginx ~]# mkdir /code

[root@nginx ~]# cd /code

[root@nginx code]# wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz

[root@nginx ~]# tar xf wordpress-4.9.4-zh_CN.tar.gz

[root@nginx ~]# chown -R www.www /code/wordpress/

 

tar xf wordpress-4.9.4-zh_CN.tar.gz  -C /code/

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

 

cd /cxldata/www/wordpress

vi wp-config.php

#添加三行

define(“FS_METHOD”, “direct”);

define(“FS_CHMOD_DIR”, 0777); 

define(“FS_CHMOD_FILE”, 0777);

wp-config.php  文件中的主机不是mysql的地址而是 负载均衡的nginxip  10.20.20.3  独立的

 

4) 由于wordpress产品需要依赖数据库, 所以需要手动建立数据库

[root@nginx ~]# mysql -uroot -pBgx123.com

mysql> create database wordpress;

mysql> exit

create database wordpress;

grant all on *.* to dbb@’10.20.20.3′ identified  by ‘123456’;

 

(nginx)   10.20.20.3    

使用nginx负载均衡

同样安装nginx 

安装mysql

连接主mysql的服务器

mysql -udeng -h10.20.20.6  -p123456

配置负载均衡

vim /etc/nginx/nginx.cof

stream  {

    upstream  mysql {

          server  10.20.20.6:3306;

  }      

    server {

         listen 10.20.20.3 :3306;

         proxy_pass  mysql;

    }

}

启动nginx

nginx -t

nginx -s reload

端口是否打开

 

如果nginx启动错误

nginx: [error] open() “/Var/run/Nginx.pid” failed (2: No such file or directory)

执行

nginx -C  /etc/nginx/nginx.cof

 

测试在10.20.20.8  上 连接mysql 通过连接10.20.20.3来连接到主数据库 06上

mysql -udeng -h10.20.20.3 -p123456

 

修改8 9 上面nginx 配置文件访问网页的目录  改为PHp路径

访问ip 测试数据库连接   10.20.20.8

wordpress目录下放置图片的位置

/wp-content/uploads

 

(nginx)   10.20.20.3    

修改配置文件

 

实现负载均衡

把wordpress1 上面web目录下的文件拷贝到wordpress2 下面

或者重新在2的上面配置wordpress 和1 的上面要一样

 

server {

        server_name  www.dbbdbb.net;

         listen   80;

       location  /  {

 

        root   /code/wordpress;

        index index.php index.html;

}

        location ~ \.php$ {

        root /code/wordpress;

        fastcgi_pass   127.0.0.1:9000;

        fastcgi_index  index.php;

        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

        include        fastcgi_params;

        }

}

 

 

在wordpress2 上面要和wordpress1 上面nginx配置文件一样

的代码

 

server {

        server_name  www.dbbdbb.net;

         listen   80;

       location  /  {

 

        root   /code/wordpress;

        index index.php index.html;

}

        location ~ \.php$ {

        root /code/wordpress;

        fastcgi_pass   127.0.0.1:9000;

        fastcgi_index  index.php;

        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

        include        fastcgi_params;

        }

}

 

访问wordpress2 的ip 查看wordpress 网站  是否和1 的一样

 

把监听ip改成域名

1的

2 的

 

做nfs  

在3 上安装nfs

yum install nfs-utils -y

做目录共享

mkdir /nfsdata/images -pv

vim  /etc/exports

systemctl restart  nfs

 

在wordpress1 和2 上安装nfs-utils

yum install nfs-utils -y

 

 

wordoress1  上  查看挂载的目录

showmount -e  10.20.20.3

把目录挂载到图片的目录

如果目录下有数据就拷走   等挂载完再考回来

mount -t nfs10.20.20.3:/nfsdata/images   /data/nginx/wordpress/wp-content/iploads

2 的上面也挂载一下

并且写入文件中

vim /etc/fstab

或者写入

vim /etc/rc.d/rc.local

 

在3 上 加负载

yum install haproxy

/etc/nginx/conf/conf.d/*.cong:

vim conf.d/blog.conf

加人 ip_hash:  服务请求只在一个服务器上

 

 

nfs的主从同步

3 上 的主     4上的 从

安装

yum install nfs-utils -y

  从上要有和主上一样的目录结构

mkdir /nfsdata/images -pv

vim  /etc/exports

systemctl start nfs

将主的数据拷贝到从上面

scp 10.20.20.3:/nfsdata/images/*  10.20.20.8:/nfsdata/images/

 

可以在8上执行拷贝命令  也可以在别的主机上执行  跨主机执行

做好秘钥认证

 

 

可以使用rsync   比scp好    效验功能   已有的文件不会拷贝

yum install rsync

 

rsync  -avrlopg  /nfsdata/images/*  10.20.30.8:/nfsdata/images/

 

 

 

秘钥认证

ssh-keygen

ssh-copy-id 10.20.20.4

 

yum install httpd-tools -y

攻击网站 发起请求

查看本机的  ulimit -n

 

 

wordpress 更新 

3  上面

把新版本的传进来

解包  tar xvf

cd wordpress

 

把wordpress1(10.20.20.3) 上面的配置文件拷贝到  3 上面

目录下

scp wp-config-php 10.20.20.3:/usr/local/src/wordpress

 

3 上 

在wordpress目录下

 

配置文件

wp-config-php

修改配置

 

拷贝到wordpress2 下面

scp   -r ./* 10.20.20.9:/data/nginx/wordpress

修改权限

chown www.www -R /data/nginx/wordpress/

 

过程

1 停止服务nginx

2备份原数据或删除

3 升级版本

4 启动服务nginx

 

解完包   进入目录wordpress

打包  zip -r wordpress.zip wordpress/*

脚本

vim updata.sh

#!/bin/bash

 

ssh 10.20.20.8 “/usr/local/nginx/sbin/nginx  -s stop”

ssh 10.20.20.8 “rm -rf /data/nginx/wordpress/*”

scp wordpress.zip 10.20.20.8:/data

ssh 10.20.20.8 “unzip /data/wordpress.zip -d /data/nginx/wordpress/ && /usr/local/nginx/sbin/nginx && chown www.www -R /data/nginx/wordpress/”

 

 

 

 

学会查看网页的调试器   右键  查看元素

 

 

总结配置文件

wordpress1 的配置文件

wordpress2 的一样

 

server {

        server_name  www.dbbdbb.net;

         listen   80;

       location  /  {

 

        root   /code/wordpress;

        index index.php index.html;

}

        location ~ \.php$ {

        root /code/wordpress;

        fastcgi_pass   127.0.0.1:9000;

        fastcgi_index  index.php;

        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

        include        fastcgi_params;

        }

}

 

 

nginx配置文件

stream  {

      upstream  mysql  {

         server   10.20.20.6:3306;

         }

         server  {

           listen  10.20.20.16:3306;

           proxy_pass  mysql;

           }

        }

 

server  {

      listen 80;

      server_name   blogs;

      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;                        

        }

}

 

 

# vim /etc/nginx/conf.d/blog.conf

upstream  blogs  {

     server  172.20.101.204:80  weight=1  max_fails=3  fail_timeout=100s;

     server  172.20.101.205:80  weight=1  max_fails=3  fail_timeout=100s;

     ip_hash;

   }

 

 

server  {

      listen 80;

      server_name www.dengbingbings.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;                    

       }

   }

server_name    www.dbbdbb.com  3台机必须一样

 

10.20.20.3  配置文件  终极版

只需要这一个配置

#调配mysql数据库的

stream  {

      upstream  mysql  {

         server   10.20.20.5:3306;

         }

         server  {

           listen  10.20.20.3:3306;

           proxy_pass  mysql;

           }

        }

#负载均衡wordpress

注释掉哈希是为了体现出轮询

 

upstream  blogs  {

         server  172.20.101.204;

         server  172.20.101.205;

        # ip_hash;

        # hash $request_uri consistent;

server {

     listen       80;

     location / {

      proxy_pass http://blogs;

                    }

 

}

 

 

 

 

补充   实验过程可以切换绑定域名的ip地址来查看实验的效果

C:\Windows\System32\Drivers\etc

 

 

 

wordpress1和2 的配置文件

[root@wordpress2 etc]#cat /etc/nginx/nginx.conf

 

user  www;

worker_processes  auto;

 

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

pid        /var/run/nginx.pid;

 

 

events {

    worker_connections  1024;

}

 

 

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”‘;

 

server {

        server_name  www.dengbingbing.com;

        listen   80;

       location / {

         root   /code/wordpress;

         index index.php index.html;

         }

       location ~ \.php$ {

         root /code/wordpress;

         fastcgi_pass   127.0.0.1:9000;

         fastcgi_index  index.php;

         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

         include        fastcgi_params;

        }

}

    access_log  /var/log/nginx/access.log  main;

 

    sendfile        on;

    #tcp_nopush     on;

 

    keepalive_timeout  65;

 

    #gzip  on;

 

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

}

 

nginx 负载均衡的配置文件

[root@nginx ~]#cat /etc/nginx/nginx.conf

user  www;

worker_processes  auto;

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

pid        /var/run/nginx.pid;

events {

    worker_connections  1024;

}

stream  {

      upstream  mysql  {

         server   10.20.20.6:3306;

         }

         server  {

           listen  10.20.20.16: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”‘;

    upstream  blogs  {

         server  172.20.101.204;

         server  172.20.101.205;

        # ip_hash;

#       hash $request_uri consistent;

              }                   

server {

     listen       80;

     location / {

      proxy_pass http://blogs;

                    }

}

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

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

}

 

 

如果要实现在一个wordpress上面添加图片  另一个没有添加图片

访问可以看到图片和看不到图片  ,要修改wordpress后台的

WordPress地址(URL)和 站点地址(URL)

修改为nginx的调度服务器的地址  然后这个地址绑定到域名上

可能会出现的问题

修改完以后会因为密码不对进不去wordpress页面

解决办法

1 重新安装wordpress使俩个上面的配置都一样

复制拷贝过去

实验过程

在安装完一个wordpress以后在页面创建了以后 再把wordpress的配置文件传到第二个上面

原文链接:https://www.cnblogs.com/dengbingbing/p/10263030.html