实战案例之wordpress 站点搭建
实验准备:
一台Nginx 两台Wrordpress Nginx+PHP 一台MySQL Master 一台MySQL slave
后端存储 两台NFS 相互rsync
注意:没有做负载高可用 只用了单个Nginx做的负载
部署数据库主从:
wordpress对数据库要求为最少mysql5.6 所以去MySQL官网下载
本机的mysql-5.6.34-onekey-install.tar 有一键安装mysql脚本及my.cnf的配置文件
-
将文件包传输到/usr/local/src下 并解压 注意两台mysql主机都做此步骤
-
解压:
[root@lnmp-mysql1 src]# tar -xvf mysql-5.6.34-onekey-install.tar.gz
-
执行安装脚本:
[root@lnmp-mysql1 src]# bash mysql-install.sh
-
-
执行mysql确保MySQL正常运行
[root@lnmp-mysql1 ~]# mysql
-
mysql主从同步过程
- master上必须开启bin-log日志 因为他的同步就是基于日志的顺序执行来完成主从同步
- 两个server的id必须不同 master的和Slave的
- 主MySQL上有一个IO线程 从MySQL上有一个IO线程和一个SQL线程,MySQL主从是实现MySQL高可用,数据备份,读写分离的一种最常见的解决方案 在绝大部分公司都有使用(现在更多的是使用中间层代理 例如mycat)
- Slave端的IO线程连接上Master,并向Master请求指定日志文件的指定位置(新部署的master和Slave从最开始的日志)之后的日志
- Master接受到来自Slave的IO线程请求,负责IO辅助的IO线程 根据Slave的请求信息读取相应的日志内容,然后将本地读取的bin-log的文件名,位置,及指定位置之后的内容一起返回给Slave的IO线程处理
- Slave的IO线程将接收到的信息依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的bin-log的文件名和位置记录到Master-info文件中,以便在下一次读取的时候能够清除的告诉Master”我需要从哪个bin-log的哪个位置开始往后的日志内容请发给我“
- Slave的sql线程检查到relay-log中新增了内容后,会马上将relay-log中的内容解析为在Master端真实执行时候的可执行命令,并顺序执行,从而保证对Slave的MySQL进行响应的增加或删除等操作,最终实现和Master数据保持一致
-
制作主从 更改Master和Slave的my。cnf文件,主要将id改为不一样
[root@lnmp-mysql1 ~]# vim /etc/my.cnf [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 [root@lnmp-mysql1 ~]# vim /etc/my.cnf [mysqld] socket=/var/lib/mysql/mysql.sock user=mysql symbolic-links=0 datadir=/data/mysql innodb_file_per_table=1 relay-log = /data/mysql/ server-id=20
-
在master上创建数据库并创建用户用于测试同步
[root@lnmp-mysql1 ~]# mysql mysql> create database test1; mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'zhangqiang'@'%' IDENTIFIED BY '123456'; 创建并授权账户
-
[root@lnmp-mysql1 ~]# /usr/local/mysql/bin/mysqldump --all-databases --single_transaction --flush-logs --master-data=2 --lock-tables > /opt/backup.sql [root@lnmp-mysql1 ~]# scp /opt/backup.sql 192.168.31.237:/opt/ 将文件传到slave上
一:部署一套完整的LNMP环境:
需要使用的站点架构:
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
1.1 编译安装PHP
-
编译安装PHP:
#./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
-
安装对应的软件包
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
-
make && make install
-
# pwd /usr/local/php/etc/php-fpm.d # cp www.conf.default www.conf # useradd www -s /sbin/nologin -u 1001
1.2 编译安装Nginx
./configure --prefix=/usr/local/nginx --with-pcre --with-http_stub_status_module --with-http_ssl_module
#make && make install
日志格式更改
log_format access_json '{"@timestamp":"$time_iso8601",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"url":"$uri",'
'"domain":"$host",'
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"status":"$status"}';
access_log /usr/local/nginx/logs/access.log access_json;
client_max_body_size 10M; #允许上传的最大文件大小
1.3:配置Nginx web目录
#mkdir /data/nginx/wordpress –p
# chown www.www /usr/local/nginx/ /data/nginx/ -R
location / {
root /data/nginx/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 /data/nginx/wordpress;
fastcgi_pass 192.168.7.104: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.5:启动Nginx并访问测试:
1.6:准备数据库
mysql> CREATE DATABASE wordpress;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO "wordpress"@"192.168.7.%" IDENTIFIED BY "123456";
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
1.7: 部署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');
1.8: 测试并启动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