IP |
主机名 |
节点 |
192.168.200.30 |
mysql1 |
数据库主节点 |
192.168.200.40 |
mysql2 |
数据库从节点 |
192.168.200.50 |
nginx |
Nginx服务节点 |
192.168.200.60 |
php |
PHP环境节点 |
2. 基础准备
使用已经分别完成了主从数据库的安装配置、Nginx服务的安装、PHP环境的安装,本实战案例将进行分布式LNMP环境的调试及WordPress应用的部署。
1.PHP的安装
使用远程连接工具CRT连接到虚拟机,并进行修改主机名的操作,将虚拟机的主
机名修改为php。命令如下:
[root@localhost ~]# hostnamectl set-hostname php
[root@localhost ~]# logout
[root@php ~]# hostnamectl
Static hostname: php
Icon name: computer-vm
Chassis: vm
Machine ID: 179f6c8f2e7942ef81b0f5565a6883fa
Boot ID: e48eac1312ca40beae638f6f43e0c31a
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-327.el7.x86_64
Architecture: x86-64
关闭防火墙firewalld及SELinux服务,命令如下:
# setenforce 0
# systemctl stop firewalld
使用镜像文件自行配置本地YUM源,编译安装基础环境,命令如下:
[root@php ~]#yum -y install gcc gcc-c++ libxml2-devel libcurl-devel openssl-devel bzip2-devel openssl bzip2 bzip2-devel libpng libpng-devel freetype freetype-devel epel-release libmcrypt-devel
使用远程传输工具,将提供的libmcrypt-2.5.8.tar.gz压缩包上传至php节点的/usr/local/src目录下,解压该压缩包,进入解压后目录,编译安装该服务,命令如下:
[root@php src]# tar -zxvf libmcrypt-2.5.8.tar.gz
[root@php src]# cd libmcrypt-2.5.8/
[root@php libmcrypt-2.5.8]# ./configure --prefix=/usr/local/libmcrypt && make && make install
使用远程传输工具。将提供的php-5.6.27.tar.gz压缩包上传至php节点的/usr/local/src
目录下,解压该压缩包,进入解压后的目录,编译安装PHP服务,命令如下:
root@php src]# tar -zxvf php-5.6.27.tar.gz
[root@php src]# cd php-5.6.27/
[root@php php-5.6.27]#./configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd \
--with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm \
--enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir \
--with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash \
--with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts
如果没有报错提示,则进行下一步安装,命令如下:
[root@php php-5.6.27]#make && make install
在等待10分钟左右的时间,编译安装完毕。
创建用户ID,注意这个nginx的id号要和nginx主机上的保持一致。命令如下:
[root@php php-5.6.27]# groupadd -g 1001 nginx
[root@php php-5.6.27]# useradd -u 900 nginx -g nginx -s /sbin/nologin
[root@php php-5.6.27]# tail -1 /etc/passwd
nginx:x:900:1001::/home/nginx:/sbin/nologin
PHP压缩包中提供了PHP环境需要用到的模板文件,需要对文件进行改名后才能使用,复制文件并改名,命令如下:
[root@php php-5.6.27]# cp php.ini-production /etc/php.ini
[root@php php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
赋予文件执行权限,命令如下:
[root@php php-5.6.27]# chmod +x /etc/init.d/php-fpm
添加PHP服务到启动列表,并设置开机启动,命令如下:
[root@php php-5.6.27]# chkconfig --add php-fpm
[root@php php-5.6.27]# chkconfig php-fpm on
修改PHP的主配置文件php-fpm.conf,命令如下:
[root@php php-5.6.27]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
[root@php php-5.6.27]# vi /usr/local/php5.6/etc/php-fpm.conf
[root@php ~]# grep -n '^'[a-Z] /usr/local/php5.6/etc/php-fpm.conf
25:pid = run/php-fpm.pid
149:user = nginx
150:group = nginx
164:listen = 192.168.200.60:9000
224:pm = dynamic
235:pm.max_children = 50
240:pm.start_servers = 5
245:pm.min_spare_servers = 5
250:pm.max_spare_servers = 35
找到配置文件中的相应参数并修改,修改成上述配置
在完成上述配置并保存退出之后,就可以启动PHP服务,并检查是否启动成功。命令如下:(netstat命令无法使用时,请自行使用YUM源安装net-tools工具)
[root@php php-5.6.30]# service php-fpm start
Starting php-fpm done
[root@php php-5.6.30]# yum install -y net-tools
[root@php php-5.6.30]# netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.2.11:9000 0.0.0.0:* LISTEN 27287/php-fpm: mast
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1052/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1517/master
tcp6 0 0 :::22 :::* LISTEN 1052/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1517/master
2. nginx的安装
修改主机名命令如下:
[root@localhost ~]# hostnamectl set-hostname nginx
[root@localhost ~]# logout
[root@nginx ~]# hostnamectl
Static hostname: nginx
Icon name: computer-vm
Chassis: vm
Machine ID: 179f6c8f2e7942ef81b0f5565a6883fa
Boot ID: 9ac638fec1c64c94aab96d0acfa4f542
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-327.el7.x86_64
Architecture: x86-64
关闭防火墙及SELinux服务
关闭防火墙firewalld及SELinux服务,命令如下:
# setenforce 0
# systemctl stop firewalld
安装配置基础服务
自行配置本地YUM源,编译安装基础环境,命令如下:
[root@nginx ~]#yum install gcc gcc-c++ openssl-devel zlib-devel zlib pcre-devel -y
创建指定用户,这个nginx用户要和PHP服务器上创建的nginx两者id一致,这里先创建用户,命令如下:
[root@nginx ~]# groupadd -g 1001 nginx
[root@nginx ~]#useradd -u 900 nginx -g nginx -s /sbin/nologin
[root@nginx ~]# tail -1 /etc/passwd
使用远程传输工具,将提供的nginx-1.12.2.tar.gz压缩包上传至nginx节点的/usr/local/src/目录下,并解压到当前目录,命令如下:
[root@nginx src]# tar -zxvf nginx-1.12.2.tar.gz
进入nginx-1.12.2目录,编译并安装,命令如下:
[root@nginx src]# cd nginx-1.12.2/
[[email protected]]#./configure --prefix=/usr/local/nginx --with-http_dav_module \
--with-http_stub_status_module --with-http_addition_module \
--with-http_sub_module --with-http_flv_module --with-http_mp4_module \
--with-http_ssl_module --with-http_gzip_static_module --user=nginx --group=nginx
如果没有报错提示,请进行下一步安装,命令如下:
[[email protected]]#make && make install
编译安装完毕后,创建软连接并启动测试,命令如下:(netstat命令无法使用时,请自行使用YUM源安装net-tools工具)
[root@nginx nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@nginx nginx-1.12.2]# nginx -t
[root@nginx nginx-1.12.2]# nginx
[root@nginx nginx-1.12.2]# netstat -ntpl
3.mysql的安装
修改主机名
mysql1节点:
[root@localhost ~]# hostnamectl set-hostname mysql1
[root@localhost ~]# logout
[root@mysql1 ~]# hostnamectl
mysql2节点:
[root@localhost ~]# hostnamectl set-hostname mysql2
[root@localhost ~]# logout
[root@mysql2 ~]# hostnamectl
关闭防火墙及SELinux服务
两个节点关闭防火墙firewalld及SELinux服务,命令如下:
# setenforce 0
# systemctl stop firewalld
配置hosts文件
两个节点配置hosts文件,修改为如下:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.30 mysql1
192.168.200.40 mysql2
配置YUM源并安装数据库服务
挂载镜像并自行配置YUM源,配置完毕后,两个节点安装数据库服务,命令如下:
# yum install -y mariadb mariadb-server
两个节点启动数据库服务并设置开机自启,命令如下:
# systemctl start mariadb
# systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
初始化数据库
两个节点初始化数据库,配置数据库root密码为000000,命令如下:
[root@mysql1 ~]# mysql_secure_installation
配置mysql主节点
修改mysql1节点的数据库配置文件,在配置文件/etc/my.cnf中的[mysqld]增添如下内容。
[root@mysql1 ~]# cat /etc/my.cnf
[mysqld]
log_bin = mysql-bin #记录操作日志
binlog_ignore_db = mysql #不同步mysql系统数据库
server_id = 30 #数据库集群中的每个节点id都要不同,一般使用IP地址的最后段的数字,例如192.168.200.30,server_id就写30
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
重启数据库服务,并进入数据库,命令如下:
[root@mysql1 ~]# systemctl restart mariadb
[root@mysql1 ~]# mysql -uroot -p000000
在mysql1节点,授权在任何客户端机器上可以以root用户登录到数据库,然后在主节点上创建一个user用户连接节点mysql2,并赋予从节点同步主节点数据库的权限。命令如下:
MariaDB [(none)]> grant all privileges on *.* to root@'%' identified by "000000";
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant replication slave on *.* to 'user'@'mysql2' identified by '000000';
Query OK, 0 rows affected (0.00 sec)
配置mysql2主从节点
修改mysql2节点的主从数据库配置文件,在配置文件/etc/my.cnf中的[mysqld]增
加如下内容。
[root@mysql2 ~]# cat /etc/my.cnf
[mysqld]
log_bin = mysql-bin #记录操作日志
binlog_ignore_db = mysql #不同步mysql系统数据库
server_id = 40 #数据库集群中的每个节点id都要不同,一般使用IP地址的最后段的数字,例如192.168.200.40,server_id就写40
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
在从节点mysql2上登录MariaDB数据库,配置从节点连接主节点的连接信息。master_host为主节点主机名mysql1,master_user为上一步中创建的用户user,命令如下:
[root@mysql2 ~]# systemctl restart mariadb
[root@mysql2 ~]# mysql -uroot -p000000
....................
MariaDB [(none)]> change master to master_host='mysql1',master_user='user',master_password='000000';
配置完毕主从数据库之间的连接信息之后,开启从节点服务。使用show slave status\G命令,并查看从节点服务状态,如果Slave_IO_Running和Slave_SQL_Running的状态都为YES,则从节点服务开启成功。命令如下:
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G
可以看到Slave_IO_Running和Slave_SQL_Running的状态都是Yes,配置数据库主从集群成功。
验证主从数据库
先在主节点mysql1中创建库test,并在库test中创建表company,插入表数据,创建完成后,查看表company数据,命令如下:
[root@mysql1 ~]# mysql -uroot -p000000
-
登录mysql2节点的数据库,查看数据库列表。找到test数据库,查询表,并查询内容验证从数据库的复制功能,命令如下:
[root@mysql2 ~]# mysql -uroot -p000000
可以查看到主数据库中刚刚创建的库、表、信息,验证从数据库的复制功能成功。
4. 分布式LNMP环境的调试
配置nginx服务支持PHP环境
[root@nginx ~]# vi /usr/local/nginx/conf/nginx.conf
…省略…
location / {
root /www; #更改网页目录
index index.php index.html index.htm; #添加index.php
}
…省略…
location ~ \.php$ { #去掉location{}前的注释符
root /www; #更改目录为/www
fastcgi_pass 192.168.200.60:9000; #注意:在这里添加PHP主机IP地址
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
…省略…
修改完毕后,保存退出。
接着在/usr/local/nginx/conf/fastcgi_params添加配置,命令如下:
[root@nginx ~]# vi /usr/local/nginx/conf/fastcgi_params
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #添加这行代码
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
创建目录
在nginx和php节点,创建/www目录,并修改用户和用户组,命令如下:
nginx节点:
[root@nginx ~]# mkdir /www
[root@nginx ~]# chown nginx:nginx /www/
php节点:
[root@php ~]# mkdir /www
[root@php ~]# chown nginx:nginx /www/
部署WordPress
nginx节点:
[root@nginx ~]# unzip wordpress-4.7.3-zh_CN.zip
[root@nginx ~]# mv wordpress/* /www/
php节点:
[root@php ~]# unzip wordpress-4.7.3-zh_CN.zip
[root@php ~]# mv wordpress/* /www/
在nginx节点,修改WordPress应用的配置文件,WordPress应用提供了wp-config-sample.php模版文件,将模板文件复制为wp-config.php,并修改,命令如下:
[root@nginx ~]#cp /www/wp-config-sample.php /www/wp-config.php
[root@nginx ~]# vi /www/wp-config.php
…省略…
// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define('DB_NAME', 'wordpress');
/** MySQL数据库用户名 */
define('DB_USER', 'root');
/** MySQL数据库密码 */
define('DB_PASSWORD', '000000');
/** MySQL主机 */
define('DB_HOST', '192.168.200.30');
/** 创建数据表时默认的文字编码 */
define('DB_CHARSET', 'utf8');
/** 数据库整理类型。如不确定请勿更改 */
define('DB_COLLATE', '');
…省略…
按照上述文件修改配置文件,保存退出后,将该配置文件scp至php节点的/www目录下,命令如下:
[root@nginx ~]# scp /www/wp-config.php [email protected]:/www/
创建WordPress数据库
在mysql1节点,登录数据库,使用命令创建WordPress数据库,命令如下:
[root@mysql1 ~]# mysql -uroot -p000000
验证WordPress应用
在Nginx节点重启Nginx服务,命令如下:
[root@nginx ~]# nginx -s reload
在浏览器中输入192.168.2.10地址进行访问,会出现著名的WordPress五分钟安装程序,填写必要的信息,然后单击左下角“安装WordPress”按钮,进行WordPress应用的安装.
稍等片刻,安装完毕后,进入WordPress后台界面.
单击页面左上角的“myblog”图标,进入WordPress首页.
至此,分布式部署LNMP+WordPress应用已完成。