搭建高可用WordPress网站托管

本指南将使用双Linode集群配置高可用的WordPress站点,数据库采用MySQL双主复制(Master-Master replication),并使用Linode NodeBalancer作为前端管理工具。

先决条件

本指南基于Debian 7或Ubuntu 14.04编写。要完成该指南,请确保您的账户中至少存在两个Linode节点和一个NodeBalancer。两个Linode节点都需要私有IP地址。同时还要确保已经在Linode节点上配置了SSH密钥,并且还需将另一台Linode主机的SSH密钥添加在本机的/.ssh/authorized_keys文件中。

注意

本指南是为非root用户编写的,会在需要提升权限的命令之前加上sudo。如果您不熟悉sudo命令,请参阅Linux用户和用户组指南。

安装所需软件包

使用以下命令在每个Linode节点上安装Apache,PHP和MySQL:

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install apache2 php5 php5-mysql mysql-server mysql-client

编辑MySQL配置文件以设置双主复制

1.编辑每个Linode节点上的/etc/mysql/my.cnf配置文件,添加或修改以下值:

Server 1:

server_id           = 1
log_bin             = /var/log/mysql/mysql-bin.log
log_bin_index       = /var/log/mysql/mysql-bin.log.index
relay_log           = /var/log/mysql/mysql-relay-bin
relay_log_index     = /var/log/mysql/mysql-relay-bin.index
expire_logs_days    = 10
max_binlog_size     = 100M
log_slave_updates   = 1
auto-increment-increment = 2
auto-increment-offset = 1

Server 2:

server_id           = 2
log_bin             = /var/log/mysql/mysql-bin.log
log_bin_index       = /var/log/mysql/mysql-bin.log.index
relay_log           = /var/log/mysql/mysql-relay-bin
relay_log_index     = /var/log/mysql/mysql-relay-bin.index
expire_logs_days    = 10
max_binlog_size     = 100M
log_slave_updates   = 1
auto-increment-increment = 2
auto-increment-offset = 2

2.对于每个Linode节点,编辑bind-address配置以使用私有IP地址:

bind-address    = x.x.x.x

3.修改完配置文件后,重启MySQL应用:

sudo service mysql restart

创建复制用户

1.在每台Linode节点上登录MySQL:

mysql -u root -p

2.在每台Linode节点上配置复制用户。将x.x.x.x替换为另一台Linode节点的私有IP地址,并将password修改为强密码:

GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';

3.返回终端,运行以下命令以测试配置。使用另一台Linode节点的私有IP地址:

mysql -ureplication -p -h x.x.x.x -P 3306

此时您应该可以通过以上命令连接到远程服务器的MySQL实例。

配置数据库同步复制

1.在第一台服务器上登录MySQL,查询主节点状态:

SHOW MASTER STATUS;

请注意显示的文件名和所在位置:

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      277 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

2.在第二台服务器上,根据MySQL的提示,为该数据库设置从属功能。将x.x.x.x替换为第一台服务器的私有IP。还要将master_log_filemaster_log_pos替换为上一步中对应的值:

SLAVE STOP;
CHANGE MASTER TO master_host='x.x.x.x', master_port=3306, master_user='replication', master_password='password', master_log_file='mysql-bin.000001', master_log_pos=277;
SLAVE START;

3.在第二台服务器上,查询主节点状态。注意文件名及其所在位置:

SHOW MASTER STATUS;

4.在第一台服务器上设置从属数据库状态,重复步骤2,并将需要修改的值替换为第一台服务器上相对应的值:

SLAVE STOP;
CHANGE MASTER TO master_host='x.x.x.x', master_port=3306, master_user='replication', master_password='password', master_log_file='mysql-bin.000001', master_log_pos=277;
SLAVE START;

5.在两台Linode节点上退出MySQL:

exit

配置Apache

两台Linode服务器均需要执行本章节的以下步骤。

注意

请将之后出现的example.com替换为您的域名。

1.输入以下命令禁用默认的Apache虚拟主机:

sudo a2dissite *default

2.切换至/var/www目录:

cd /var/www

3.输入以下命令,创建用来保存网站的文件夹:

sudo mkdir example.com

4.在您刚刚创建的文件夹中创建一组文件夹,以存储您网站的文件、日志和备份:

sudo mkdir example.com/public_html
sudo mkdir example.com/log

5.为网站创建虚拟主机文件:

/etc/apache2/sites-available/example.com.conf:

# domain: example.com
# 域名: example.com
# public: /var/www/example.com/public_html/
# 网站根目录: /var/www/example.com/public_html/

<VirtualHost *:80>
  # Admin email, Server Name (domain name), and any aliases
  # 管理员邮箱地址, 服务器名 (域名), 服务器别名
  ServerAdmin webmaster@example.com
  ServerName  www.example.com
  ServerAlias example.com

  # Index file and Document Root (where the public files are located)
  # 索引文件以及根目录 (网站页面文件存放位置)
  DirectoryIndex index.html index.php
  DocumentRoot /var/www/example.com/public_html
  # Log file locations
  # 日志文件存放位置
  LogLevel warn
  ErrorLog  /var/www/example.com/log/error.log
  CustomLog /var/www/example.com/log/access.log combined
</VirtualHost>

警告

在Apache 2.4(Ubuntu 14.04使用的版本)及之后的版本中,虚拟主机文件必须以.conf扩展名作为结尾。.conf扩展名在之前版本的Apache兼容。

6.输入以下命令启用新网站:

sudo a2ensite example.com.conf

7.重启Apache:

sudo service apache2 restart

安装WordPress

1.在Linode主节点上,下载并安装最新版本的WordPress。请根据您的实际配置替换以下命令中列出的所有路径:

cd /var/www
wget https://wordpress.org/latest.tar.gz
tar -xvf latest.tar.gz
cp -R wordpress/* /var/www/example.com/public_html

2.配置MySQL数据库以安装WordPress。您需要将wordpressuserpassword替换为您自己的设置:

mysql -u root -p
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
EXIT

3.设置网站根目录权限以确保WordPress能够完成其配置步骤:

chmod 777 /var/www/example.com/public_html/

4.使用Web浏览器访问您Linode的IP地址,并完成配置步骤以安装全功能的WordPress。

警告

为了确保每个WordPress实例都能定位到本地数据库,您需要将此步骤中的 Database Host(数据库主机)值设置为localhost。这也是WordPress的默认值。

5.通过WordPress管理界面中的 General Settings(常规设置)配置WordPress URL和网站地址,并确保在两个字段中都配置了您的域。

注意

完成WordPress安装步骤并首次登录后,应重置网站根目录的权限以确保安全。您可以使用以下命令来重置根目录权限:

chmod 755 /var/www/example.com/public_html/

6.完成WordPress安装步骤后,将配置文件复制到另一台Linode节点。将x.x.x.x替换为另一台Linode节点的IP地址:

rsync -r /var/www/* x.x.x.x:/var/www/.

7.登录另一台Linode节点并重启Apache:

sudo service apache2 restart

使用Lsyncd配置文件夹同步

1.在Linode集群主节点安装Lsyncd:

sudo apt-get install lsyncd

2.创建配置文件以执行同步操作。将x.x.x.x替换为集群中另一台Linode节点的私有IP地址:

settings = {
    logfile = "/var/log/lsyncd.log",
    statusFile = "/var/log/lsyncd-status.log"
}
sync {
    default.rsyncssh,
    delete = false,
    insist
    source="/var/www",
    host="x.x.x.x",
    targetdir="/var/www",
    rsync = {
        archive = true,
        perms = true,
        owner = true,
        _extra = {"-a"},
    },
    delay = 5,
    maxProcesses = 4,
    ssh = {
        port = 22
    }
}

3.启动Lsyncd进程:

service lsyncd start

4.测试Lsyncd是否已经成功启动:

service lsyncd status

如果此命令返回的结果不是lsyncd is running,请仔细检查lsyncd.conf.lua配置文件,并确保RSA公钥位于从属服务器的正确位置。

5.通过在主Linode节点的/var/www文件夹中创建文件来测试同步复制是否生效。几秒钟后您应该能够在从属Linode节点上的相同路径下看到该文件。

配置您的NodeBalancer

1.打开Linode管理界面中的NodeBalancer选项卡。

2.如果您之前尚未配置,请添加NodeBalancer,并确保它与后端Linode服务器位于同一数据中心。

3.选择您新添加的NodeBalancer并点击“Create Configuration”。按如下所示,编辑配置文件:

Port: 80
Protocol: HTTP
Algorithm: Least Connections
Session Stickiness: Table
Health Check Type: HTTP Valid Status

4.点击“Save Changes”按钮后,系统将提示您添加Linode节点。为每台节点提供唯一的标签,并在每个节点的地址字段中输入私有网络地址和端口号。

5.添加完两个节点后,确保节点运行状况检查功能处于启用状态。等到两个节点都显示为启动状态,返回NodeBalancer主页并记录列出的IP地址。您现在应该能访问该IP地址并查看您的网站。

为了测试高可用性,可以在其中一个节点上停止Apache2/MySQL服务,或者关闭其中一个节点。即使其中一个节点被标记为关闭状态,您的网站仍可以继续提供服务而不会出现问题。

恭喜,您现在已经成功搭建了高可用的WordPress网站!

本文的版权归 苏易北 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏别先生

一脸懵逼学习Nginx及其安装,Tomcat的安装

1:Nginx的相关概念知识:   1.1:反向代理:     反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然...

25810
来自专栏草根专栏

使用Identity Server 4建立Authorization Server (1)

本文内容基本完全来自于Identity Server 4官方文档: https://identityserver4.readthedocs.io/ 官方文档很详...

52510
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Lynis执行安全审计

Lynis是一个基于主机的开源安全审计应用程序,可以评估Linux和其他类型UNIX操作系统的安全配置文件和状态。

2964
来自专栏乐沙弥的世界

RMAN 配置、监控与管理

一个通道代表一个到设备(磁盘或磁带)的数据流并且在目标数据库或辅助数据库实例上产生一个相应的服务器会话(server session)

1271
来自专栏Samego开发资源

如何搭建私密云存储之ownCloud

7524
来自专栏Brian

Mac 配置终端环境

Mac 配置终端开发环境 ---- 概述 作为一个服务端开发人员基本上都是通过终端和服务器打交道,所以一个好个开发人员那么他的终端配置也是高效的。“工欲善事必先...

44911
来自专栏

后端开源软件集合

缓存系统:memcached(group cache)、redis、mongodb、Couchbase(CouchDB、Membase、CouchOne) ht...

2619
来自专栏大魏分享(微信公众号:david-share)

用Ansible自动供应vmware虚拟机--构建数据中心一体化运维平台第二篇

1.1 简述 一直以来,打开邮箱被ticket糊一脸的事情时有发生。我一直在想,能不能以一种简单的方案(不花老板的钱)来供应(provisioning)虚拟机呢...

7142
来自专栏本立2道生

bootsect及setup

硬件逻辑设计为加电瞬间强行设置:CS=0xF000,IP=0xFFF0,CS:IP=0xFFFF0

1083
来自专栏Android干货

Android项目实战(二十五):Android studio 混淆+打包+验证是否成功

3517

扫码关注云+社区

领取腾讯云代金券