今天来简述一下如何实现wordpress的动静分离以及读写分离
首先来放出大图。
1.来看图说话
首先来介绍一下这张图 最前端的两台机器是 负责调度后端主机请求动态资源还是静态资源 并使用keepalived实现[Haproxy+keepalived]主机的高可用
如果正在工作的Master主机宕机 会通过keepalived的WatchDog进程的两个子进程 当人两个子进程分别处理这自己复杂的任务 checker进程负责检查各个
主机的健康状态 如:http LVS MASTER主机等的健康状态 如果checker进程检查到MASTER服务”不可用”时便会通知另一个进程vrrp进程告诉它删除通告
并取消VIP并转换为BACKUP状态 在这里keepalived主要的是实现Haproxy的高可用 后端主机的状态检查完全可以交给Haproxy来做
然后来说一下Haproxy 如果请求的是动态资源就交给[Apeche+PHP]的主机 如果请求的资源是静态资源就交给[Nginx]主机来处理
例如:我访问的 http://1.1.1.1/wordpress/index.php 就交给[Apeche+PHP]的主机来处理请求
我访问的是http://1.1.1.1/index.html或1.jpg的话就交给[Nginx]主机来处理请求
首先来说一下第一种情况我请求的是 http://1.1.1.1/wordpress/index.php 前端的[Haproxy+keepalived]的Master主机会进行调度
例如:调度到后端的[Apeche+PHP] 1主机 会从这台主机网站根目录下找到/wordpress/目录并找到所对应的index.php文件来应答客户机的请求
如果用户的请求要访问数据库 会通过[Haproxy]主机来进行调度 调度到后端[DB_server]组中的某一台数据库主机 当然[DB_server]主机的数据库都是共享的
请求任意一台[DB_server]的数据都是一样的
如果要上传图片便会把图片 上传到指定的目录里边 当然这里的图片等静态资源也都是共享到一块的
再来说一下第二种我访问的是静态资源http://1.1.1.1/index.html或1.jpg 前端的[Haproxy+keepalived]的Master主机会进行调度
访问静态例如 调度器调度到调度到后端的[Nginx] 1主机 会从网站的跟目录下边找到index.html这个资源所对应的文件来应带客户请求 客户访问静资源
时 会通多后端调度器[Nginx/Haproxy]来进行调度 调度到其中的某一台[共享server2]服务器将对应的资源返回给客户端
2.简述各主机配置
最前端的两台主机要实现高可用的话 需要安装keepalived实现虚拟IP的调度 配置一个虚拟主机段 并添加一个虚拟IP 一个为主服务器另一个为从服务器两台 主机一主一备如果主宕机从可以接手虚拟IP继续对外一共服务 主机1和主机2的配置差别不大主要是一主一从
这只是配置样例如何配置还请各位自行定夺
! Configuration File for keepalived
global_defs {
notification_email {
123456@qq.com
}
notification_email_from root@localhost
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id testOnly
vrrp_mcast_group4 224.0.6.200
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 1
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass turnLeft
}
virtual_ipaddress {
172.18.6.100
}
}
这两台主机上还要配置 Haproxy 实现对动态资源和静态资源的调度如果访问的是 .jpg .css .js .png等资源是调度到[Nginx]静态资源主机
如果访问的是.php等动态资源调度到[Apache+PHP]动态资源主机上 两台主机的配置相同就行了
这不是最终配置只是我写出来的例子 请根据需要自行修改
frontend main *:80
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js .html ##.html方便我进行测试的
use_backend static if url_static
default_backend app
##默认的是后端主机是 backend app 如果匹配到的是 .jpg .gif .png .css .js .html或者/static /images /javascript /stylesheets就到backend static主机
backend static
balance roundrobin
server staticsrv1 172.18.6.113:80 check ##静态主机1
server staticsrv2 172.18.6.114:80 check ##静态主机2
server sorryserver 172.18.6.111:8081 backup check ##sorryserver主机
##这个静态主机我弄了两个
backend app
option httpchk GET /index.php
balance roundrobin
server appsrv1 172.18.6.112:80 check ##动态主机我主要进行测试就整了一台
server sorryserver 172.18.6.111:8082 backup check ##sorryserver主机
然后后端的两台[Apache+PHP]这就不用我多说了吧 安装httpd和PHP能解析php的代码就可以了 这里需要挂载[共享server1]主机的目录/wordpress的上级 目录 当然[共享server1]需要共享两个目录 一个是动态资源的目录 一个是存储的静态资源目录(实际环境应该是这样使用)
但我们做实验完全可以只共享一个目录就可以了这里完全没有必要对/wordpress/进行拆分
这里使用挂载共享目录还有一个好处 方便代码的更迭 如果需要更换代码直接从共享服务器上替换新的代码就可以了 因为这里是使用共享的资源
后端的[Haproxy]主机 只需要能调度数据库就可以了
这不是最终配置只是我写出来的例子 请根据需要自行修改
listen mysqls *:3306
mode tcp
balance leastconn
server mysql_1 172.18.6.112:3306 check
server msyql_2 172.18.6.113:3306 check
最后的[共享DBserver]z只需要安装mysql并配置可以远程登录的用户即可 主要是用来存储用户提交的文字信息
动态资源的主线说完了我们来说一说静态资源的主线
[Nginx]主机需要安装nginx 请求的是静态资源从这里返回
上边的大图我给自己挖了个坑 上边的图好像更绕了一点 两台[Nginx]主机需要开启反向代理功能 后端的主要还要开启web服务
这是我重新修改后的图配置简单只是把[Haproxy/nginx]主机去掉就行了 [Nginx]主机直接挂在共享的目录即可(这里需要挂载的是存储图片的目录)
注意:这里的图片存储目录需要与/wordpress/的目录结构完整对应 还要有/wordpress/的主页图片的目录 最简单的方法直接把/wordpress/整个目录挂载上
就可以了 共享目录最简单的只要共享/wordpress/目录的上级目录就行了 (当然这里实际环境应该只有存储图片的目录和/wordpress/的主页目录)
完全没有必要拆分嘛
3最后说一下请求和动静资源的流向
首选访问/wordpress/index.php 通过调度 调度到[Apache+PHP]群中 如果动态资源中有请求数据库的会通过[Haproxy]调度到[共享DB_server]群中 或用户 上传文字类内容是时通过[Haproxy]主机调度器来进行读写
请求的.php资源是通过共享目录挂载的方式来访问的 如果用户上传图片等内容是 会存储到指定的目录 共享服务器都是通过某些服务共享的 所以共享服务 器中的资源都是相同的
如果请求的是 图片资源或者 .css .jpg等资源会被调度到[Ngingx]群中 [Nginx]主机是挂载共享服务器中的资源的 也会有静态资源和用户上传的图片资源等
访问静态资源会直接通过[Nginx]主机来返回
用户从浏览器访问会组成完整的响应内容
原创文章,作者:wode,如若转载,请注明出处:http://www.178linux.com/76251