实现高可用WordPress部署

2017-11-07  本文已影响0人  ghbsunny

1  概述

本文通过HAProxy,Keepalive,实现动静分离wordpress,在每台haproxy和wordpress服务器之间加入缓存,通过缓存实现加速。具体需求如下

.(1)动静分离部署wordpress,动静都要能实现负载均衡

.(2)在haproxy和后端主机之间添加varnish进行缓存

.(3) haproxy的设定要求:动静分离

.(4) haproxy高可用

.(5)通过VIP:172.18.50.80来访问wordpress

前提

1:node1 ip是172.18.50.62,node2 ip 是172.18.50.63.写入/etc/hosts文件里,node1和node2实现基于ssh-key的验证。

2:所有主机时间同步。

拓扑图如下


2  配置

172.18.50.62  HAproxy配置,主备配置一样,172.18.50.63不附上代码

global

log         127.0.0.1 local2

chroot      /var/lib/haproxy

pidfile     /var/run/haproxy.pid

maxconn     4000

user        haproxy

group       haproxy

daemon

# turn on stats unix socket

stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------

# common defaults that all the 'listen' and 'backend' sections will

# use if not designated in their block

#---------------------------------------------------------------------

defaults

mode                    http

log                     global

option                  httplog

option                  dontlognull

option http-server-close

option forwardfor       except 127.0.0.0/8

option                  redispatch

retries                 3

timeout http-request    10s

timeout queue           1m

timeout connect         10s

timeout client          1m

timeout server          1m

timeout http-keep-alive 10s

timeout check           10s

maxconn                 3000

frontend  http

bind *:80

acl url_dyn path_end -i .php

acl url_stac path_end -i  .jpg .gif .png .css .js .html .txt .ico .svg

reqadd sunny-x-via:\ haproxy6b

default_backend dynamicblog if url_dyn

use_backend    staticblog if url_stac

option forwardfor    header sunny-x-client

rspdel Server

rspadd  Server:\ Sunny-proxy6b

backend staticblog

balance     roundrobin

cookie WEBSRV insert nocache

server      varnish7b 172.18.50.72:80 check weight 1   inter 3000 rise 2 fall 2 cookie cksrv1

backend dynamicblog

balance     roundrobin

cookie WEBSRV insert nocache

server     varnish7c 172.18.50.73:80 check weight 1  inter 3000 rise 2 fall 2 cookie cksrv2

listen stats

bind :9091

stats enable

stats auth  admin:admin

stats admin  if TRUE

172.18.50.62  HAproxy配置,主备配置有区别,区别在于四点:

notification_email_from node2@localhost

router_id node2

state BACKUP

priority 90

172.18.50.63不附上代码。

! Configuration File for keepalived

global_defs {

notification_email {

root@localhost

}

notification_email_from node1@localhost

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id node1

vrrp_mcast_group4 224.0.100.100

}

vrrp_script  chk_down {

script "[[ -f   /etc/keepalived/down ]] && exit 1 || exit 0"

interval  1

weight  -20

}

vrrp_script  chk_haproxy {

script "killall -0 haproxy && exit 0 || exit 1"

interval 1

weight  -20

fall 2

rise 1

}

vrrp_instance VI_1 {

state MASTER

interface eth1

virtual_router_id 50

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass sunny

}

virtual_ipaddress {

172.18.50.80

}

notify_master "/etc/keepalived/vip1_notify.sh master"

notify_backup "/etc/keepalived/vip1_notify.sh backup"

notify_fault  "/etc/keepalived/vip1_notify.sh fault"

track_script {

chk_down

chk_haproxy

}

}

172.18.50.62  HAproxy配置里notify.sh脚本如下

#!/bin/bash

contact='root@localhost'

notify() {

mailsubject="$(hostname) to be $1, vip

floating"

mailbody="$(date +'%F %T'): vrrp transition,

$(hostname) changed to be $1"

echo "$mailbody" | mail -s

"$mailsubject" $contact

}

case  $1  in

master)

notify master

;;

backup)

notify backup

;;

fault)

notify fault

;;

*)

echo "Usage: $(basename $0)

{master|backup|fault}"

exit 1

;;

esac

172.18.50.73 varnish配置default.vcl如下,172.18.50.72配置区别如下

backend static {

.host = "172.18.50.65";

.port = "80";

.probe = check;

}

其他配置一样,172.18.50.72这里就附上脚本

vcl 4.0;

probe check {

.url = "/index.html";

.window = 5;

.threshold = 4;

.interval = 2s;

.timeout = 1s;

}

backend dynamic {

.host = "172.18.50.75";

.port = "80";

.probe = check;

}

sub vcl_recv {

if (req.restarts == 0){

if (req.http.X-Forwarded-For){

set req.http.X-Forwarded-For = req.http.X-Forwarded-For + "," + client.ip;

} else {

set req.http.X.Forwarded-For = client.ip;

}

}

}

sub vcl_backend_response {

if (beresp.http.cache-control !~ "s-maxage") {

if (bereq.url ~ "(?i)\.(jpg|jpeg|png|gif|css|js|xml)$") {

unset beresp.http.Set-Cookie;

set beresp.ttl = 3600s;

}

}

if (bereq.url ~ "(?i).*php.*") {

unset beresp.http.Set-Cookie;

set beresp.ttl = 3600s;

}

}

sub vcl_deliver {

if (obj.hits>0) {

set resp.http.X-Cache = "Hit via " + server.ip;

} else {

set resp.http.X-Cache = "Miss from " + server.ip;

}

}

后端的172.18.50.65和172.18.50.75这两台wordpress都要安装wordpress和http,同时172.18.50.75是处理动态资源的脚本,所以还需要安装php-fpm.同时在75这台安装mysql.这里就不演示了,相关部署见http://ghbsunny.blog.51cto.com/7759574/1970716文章。j

到这里部署就完成了。可以通过网页访问http://172.18.50.80/blog查看功能是否正常。其中,这里的blog是将wordpress安装包部署后重命名为blog,可根据实际情况自行设定。

上一篇下一篇

猜你喜欢

热点阅读