精简版
0
0
0
云栖社区>博客>正文
上云小马达 2019-06-24 14:22:17 浏览 535
Redis
架构
MySQL
WordPress
高可用
数据库
配置
Image
aliyun
插件
数据管理
展开阅读全文
WordPress 是一种非常流行的博客网站平台, 也可以当作一个内容管理系统 (CMS) 来使用, 是世界上使用最广泛的博客系统之一. WordPress 有非常多优秀的插件, 使得这个开源产品变得非常容易扩展, 满足不同的需求.
我准备利用一个系列的文章, 来展示如果利用阿里云的各种产品(弹性计算, 数据库, 安全等等), 搭建一个完整的 WordPress 网站. 内容包括:
一, 搭建基础网站应用
二, 域名, 短信和邮箱
三, 动静分离和 CDN 加速
四, 数据库缓存和管理
五, 服务器横向扩展
六, 网站安全
四, 数据库缓存和管理
当网站业务量逐渐增加, 数据库往往是整个系统中第一个遇到性能瓶颈的组件. 这个时候需要通过对数据库进行优化和管理, 来提高数据库的吞吐能力.
针对网站类应用, 读多写少是常态, 因此针对性地进行数据库读写分离往往是一个好办法. 阿里云 RDS 数据提供的读写分离功能可以对外提供一个单一的数据库读写入口, 对系统的侵入性很小, 是个非常理想的解决方案. 除此之外, 业界最常用的方法应该是在整个架构中增加内存数据库来进行数据缓存, 一般来说会选用 Redis 数据库来进行实施. 由此, 系统的数据部分变得越来越复杂, 因此还需要利用 DMS 这种管理工具来进行方便的运维.
这个部分的架构图如下, 基于上一个版本增加了:
MySQL 数据库读写分离: 存放用户向 WordPress 上传的附件
CDN: 通过 CDN 边缘节点的缓存机制加速附件静态文件的读取
用 DMS 管理后台数据
阿里云的 DMS 数据管理产品 (https://www.aliyun.com/product/dms) 在官网上的口号是 "比 phpMyAdmin 更强大, 比 Navicat 更易用", 还是挺霸气的. 其主要作用当然是聚合所有数据库的管理 (无论在不在阿里云上), 方便 DBA 对库表进行各种操作和维护. 此外比较讨喜的功能是利用 DSQL(通过 Dlink) 进行跨库查询, 在微服务架构应用中进行数据验证的时候常常会用到. 这里简单演示一下免费版本的基本功能, 专业版和企业版需要额外购买, 同时也去除掉一些限制并提供一些额外功能, 详见: https://help.aliyun.com/document_detail/48109.html
最简单登陆 DMS 的方法是在 RDS 上面点击 "登陆数据库", 输入用户名和密码即可. 为了演示方便, 我就直接用了之前设置的高权限账号 root.
在界面的昨天可以看到数据库选择和数据表列表, 通过这里我们可以发现 WordPress 的数据结构还是很简单的, 基本上可以通过表名猜测到该表的用途, 比如 "wp_posts" 自然就是存储帖子啦. 注意 "wp_" 这个前缀是可以定制的哦, 如果不知道怎么做的同学注意回看这个系列的第一篇.
试着写个 SELECT 语句看看里面的内容, 很容易可以找到 WordPress 在安装时默认 po 的第一篇 hello world 的帖子.
回到页面上修改内容一下, 保存, 然后再回到 DMS 重跑一次 SQL, 可以看到新的内容已经写入了数据表中.
MySQL 读写分离
MySQL 读写分离这个功能, 如果是自建数据库的话, 需要利用 Mycat 做主从同步, 做心跳检测, 还得自己运维, 还是比较麻烦的. 阿里云 MySQL 直接提供这个功能还是很贴心, 在数据库实例的 "数据库代理" 标签就可以打开了. 首先选择添加只读实例, 稍等一会儿, 一个新的只读实例就创建好了. 创建只读实例时会从备实例复制数据, 数据与主实例一致, 主实例的数据更新也会在主实例完成操作后立即自动同步到所有只读实例, 完美.
在实例列表中会发现增加了一个打着 "R" 标的数据库实例. 只读实例数量有限制,<64GB 的主实例最多挂 5 个,≥64GB 的主实例最多挂 10 个, 一般中小网站挂 3 个就差不多了.
只读实例有自己的内网地址, 可以用程序控制什么时候使用主实例, 什么时候使用只读实例. 当然大多数情况下, 让 MySQL 自己决定就好了. 我们回到主实例中, 设置读写分离, 将所有的读权重都给只读实例好了. 这样就可以得到主实例的读写分离地址啦.
获得读写分离地址后, 我们需要回到 WordPress 的配置文件 wp-content/wp-config.PHP 中, 将之前填写的主库内网地址替换成刚刚获得的读写分析地址, 并重启.
完成后在网页上浏览一下, 从后端只读实例的监控可以看到 IOPS 和连接数等数据的变化, 可以确定读写分离已经起作用了.
MySQL 读写分离
Redis 数据库 (https://www.aliyun.com/product/kvstore) 作为一种最常用的缓存数据库, 几乎在各行各业的应用中都可以看到. 为了将 Redis 利用起来, 系统程序需要有一定的改造, WordPress 则是通过插件来支持. 一般来说还需要做高可用, 以避免 Redis 失效而造成的雪崩效应, 拖垮整个系统. 因此大多数情况下都应该选择集群版多节点, 以确保缓存的高可用. 实际购买的时候注意 VPC 并设置密码.
和 MySQL 一样, 使用之前要开白名单. 这种安全机制在阿里云数据库基本是标配, 配置方法也基本一样, 把 ECS 服务器加进去就可以了.
白名单配置完成后, 记录下内网地址, 后面会用到.
然后在 WordPress 中安装插件 Redis Object Cache. 安装后打开配置项, 可以发现这个插件需要修改配置才可以使用. 但是这个插件的配置居然不是可视化的, 还需要从后台修改配置文件, 差评.
插件的配置信息是放在配置文件 wp-content/wp-config.PHP 中的. 需要增加 / 修改以下代码(其中 WP_REDIS_PASSWORD 需要设置成创建 Redis 实例时设置的密码):
- /** setup for Redis Object Cache **/
- define('WP_REDIS_CLIENT', 'pecl');
- define('WP_REDIS_SCHEME', 'tcp');
- define('WP_REDIS_HOST', 'Redis 实例的内网地址');
- define('WP_REDIS_DATABASE', '0');
- define('WP_REDIS_PASSWORD', '创建 Redis 实例时候设置的密码');
- define('WP_CACHE_KEY_SALT', 'wp_');
- define('WP_REDIS_MAXTTL', '86400');
配置完成后, 再回到页面上的插件配置项上看一下 Redis 的配置, 如果正确无误的话, 选择 "Enable Object Cache", 在状态栏应该显示 "Connected" 就表示配置完成了.
试着使用一下 WordPress, 然后我们利用 DMS 数据管理再看看 Redis 的效果. 同样也是在 Redis 实例页面上方选择 "登陆数据库", 然后应该可以看到许多 Key-Value 对和 CPU, 内存, 命中率等指标, 这就表示 Redis 已经开始为网站提供缓存服务啦.
来源: https://yq.aliyun.com/articles/706322