基于haproxy实现wordpress动静分离

基于haproxy实现wordpress动静分离

环境:centos 6.8

注:此处省略对于各服务器的IP配置。

一:图示讲解

     用户访问vip,通过haproxy代理得到服务器的资源。此架构下基于keepalived对haproxy做负载均衡(此种两种软件装在同一台服务器),基于haproxy对Nginx和apache做负载均衡,Nginx和Apache使用共享存储NFS和mysql。

二:配置讲解

第一步:配置mysql和nfs

# 配置Mysql服务
[root@mysql-nfs ~]$ yum -y install mariadb-server
[root@mysql-nfs ~]$ systemctl start mariadb
[root@mysql-nfs ~]$ mysql
MariaDB [(none)]> CREATE DATABASE wpdb;
MariaDB [(none)]> GRANT ALL ON wpdb.* TO wpuser@'192.168.%.%' IDENTIFIED BY 'wppass';
MariaDB [(none)]> 
 
# 配置NFS服务
[root@mysql-nfs ~]$ useradd -r -u 88 apache
[root@mysql-nfs ~]$ mkdir -p -v /data/www
[root@mysql-nfs ~]$ chown apache.apache /data/www
[root@mysql-nfs ~]$ yum -y install nfs-utils
[root@mysql-nfs ~]$ cat > /etc/exports.d/web_data.exports << EOF
/data/www/ 192.168.37.0/16(rw,all_squash,anonuid=88,anongid=88)
EOF
[root@mysql-nfs ~]$ systemctl start rpcbind
[root@mysql-nfs ~]$ systemctl start rpcidmapd
[root@mysql-nfs ~]$ systemctl start nfs
 
# 测试NFS服务
[root@mysql-nfs ~]$ showmount  -e 127.0.0.1
Export list for 127.0.0.1:
/data/www 192.168.37.0/16
 

第二步:配置Nginx和apache

# 配置apache1服务器
[root@lap1 ~]$ useradd -r -u 88 apache
[root@lap1 ~]$ yum -y install nfs-utils httpd php php-mysql
[root@lap1 ~]$ mount -t nfs 192.168.37.144:/data/www /var/www/html/
[root@lap1 ~]$  wget https://cn.wordpress.org/wordpress-4.7.4-zh_CN.zip
[root@lap1 ~]$unzip  wordpress-4.7.4-zh_CN.zip
[root@lap1 ~]$cp wordpress/   /var/www/html
[root@lap1 ~]$ service httpd restart
[root@lap2 ~]$ ls /var/www/html/
wordpress
 
# 配置apache2服务器
[root@lap1 ~]$ useradd -r -u 88 apache
[root@lap1 ~]$ yum -y install nfs-utils httpd php php-mysql
[root@lap1 ~]$ mount -t nfs 192.168.37.144:/data/www /var/www/html/
[root@lap1 ~]$ service httpd restart
[root@lap1 ~]$  ls /var/www/html/
wordpress
# 配置Nginx1服务器
[root@nginx1 ~]$ yum -y install nfs-utils nginx
[root@nginx1 ~]$ mount -t nfs 192.168.37.144:/data/www /usr/share/nginx/html/
[root@nginx1 ~]$ service httpd restart
[root@nginx1 ~]$ ls /usr/share/nginx/html/
wordpress
 
# 配置Nginx2服务器
[root@nginx1 ~]$ yum -y install nfs-utils nginx
[root@nginx1 ~]$ mount -t nfs 192.168.37.144:/data/www /usr/share/nginx/html/
[root@nginx1 ~]$ service httpd restart
[root@nginx1 ~]$ ls /usr/share/nginx/html/
wordpress

第三步:配置Keepalived和Haproxy

# 配置HAproxy1服务器

## 安装相关程序包
[root@haproxy1 ~]$ yum -y  install haproxy keepalived psmisc
## 为haproxy提供配置文件
[root@haproxy1 ~]$ cp /etc/haproxy/haproxy.cfg{,.bak}
[root@haproxy1 ~]$ cat > /etc/haproxy/haproxy.cfg << EOF 
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats

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  Test *:80
    stats enable
    stats uri /stats
    acl url_static  path_end       -i .jpg .gif .png .css .js .svg
    rspidel Server.*
    rspadd  Server:\ CNC 
    use_backend     web          if url_static
    default_backend php

backend php
    balance     roundrobin
    server      ap1 192.168.37.138:80 check 
    server      ap1 192.168.37.129:80 check 

backend web
    balance     roundrobin
    server      nginx1 192.168.37.135:80 check
    server      nginx2 192.168.37.134:80 check
EOF

## 为keepalived提供配置文件
[root@haproxy1 ~]$ cp /etc/keepalived/keepalived.conf{,.bak}
[root@haproxy1 ~]$ cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived

global_defs {
   router_id haproxy1
   vrrp_mcast_group4 224.0.128.100
}

vrrp_script check_haproxy {
    script "killall -0 haproxy && exit 0 || exit 1"
    interval 1
    weigth -5 
}

vrrp_script check_down {
    script "[ -f /etc/keepalived/down ] && exit 1 || exit 0"
    interval 1
    weigth -5
}

vrrp_instance Haproxy_VIP {
    state MASTER
    interface eth1
    virtual_router_id 66
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass  11111
    }
    virtual_ipaddress {
        172.18.32.232/16 dev eth1 label eth1:1
    }
    track_script {
        check_haproxy
        check_down   
    }
}
EOF

## 启动haproxy、keepalived服务
[root@haproxy1 ~]$ systemctl start haproxy
[root@haproxy1 ~]$ systemctl start keepalived
# 配置HAproxy2服务器

## 安装相关程序包
[root@haproxy1 ~]$ yum -y  install haproxy keepalived psmisc
## 为haproxy提供配置文件
[root@haproxy1 ~]$ cp /etc/haproxy/haproxy.cfg{,.bak}
[root@haproxy1 ~]$ cat > /etc/haproxy/haproxy.cfg << EOF 
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats

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  Test *:80
    stats enable
    stats uri /stats
    acl url_static  path_end       -i .jpg .gif .png .css .js .svg
    rspidel Server.*
    rspadd  Server:\ CNC 
    use_backend     web          if url_static
    default_backend php

backend php
    balance     roundrobin
    server      ap1 192.168.37.138:80 check 
    server      ap1 192.168.37.129:80 check 

backend web
    balance     roundrobin
    server      nginx1 192.168.37.135:80 check
    server      nginx2 192.168.37.134:80 check
EOF

## 为keepalived提供配置文件
[root@haproxy1 ~]$ cp /etc/keepalived/keepalived.conf{,.bak}
[root@haproxy1 ~]$ cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived

global_defs {
   router_id haproxy1
   vrrp_mcast_group4 224.0.128.100
}

vrrp_script check_haproxy {
    script "killall -0 haproxy && exit 0 || exit 1"
    interval 1
    weigth -5 
}

vrrp_script check_down {
    script "[ -f /etc/keepalived/down ] && exit 1 || exit 0"
    interval 1
    weigth -5
}

vrrp_instance Haproxy_VIP {
    state BACKUP
    interface eth1
    virtual_router_id 66
    priority 95
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass  11111
    }
    virtual_ipaddress {
        172.18.32.232/16 dev eth1 label eth1:1
    }
    track_script {
        check_haproxy
        check_down   
    }
}
EOF

## 启动haproxy、keepalived服务
[root@haproxy1 ~]$ systemctl start haproxy
[root@haproxy1 ~]$ systemctl start keepalived

三.测试访问

     在浏览器访问http://172.18.32.232/wordpress 正常

四.此实验需要注意的地方

    1. 配置wordpress时,数据库地址要填mysql服务器地址192.168.37.139

    2. 配置wordpress时,要在nfs服务器上切换到apache用户创建在/data/www/目录下创建wp-config.php文件。


ps: 如果大家在实验过程中有任何问题,欢迎随时联系我。VX:504498722



原创文章,作者:cnc,如若转载,请注明出处:http://www.178linux.com/76160

(0)
cnccnc
上一篇 2017-05-18 13:24
下一篇 2017-05-18 14:00

相关推荐

  • 文件的查找

    文件的查找 使用locate命令 默认从根开始搜索 非实时查找(数据库查找) locate 文件名 查询系统上预建的的文件索引数据库    /var/lib/mlocate/mlocate.db 依赖于事先构建的索引 索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库(updatedb)。注意工作中不能轻易…

    Linux干货 2016-08-18
  • 面向对象

    语言分类 面向机器:抽象成机器指令,机器容易理解。代表:汇编语言 面向过程:一件事情分步骤来完成,出现各种情况有解决办法一一对应,问题规模小可以步骤化、按部就班的处理。代表:C语言 面向对象oop(object Oriented Programming):随着计算机解决问题的规模扩大、情况更复杂,需要很多部分协作,面向过程编程就不合适了,演变出了面向对象编程…

    Linux干货 2017-11-13
  • Linux基础知识之文本处理三剑客sed

    处理文本的工具sed     1.sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”。接着用sed命令处理缓冲区中的内容,完成处理后,把缓冲区中的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编…

    Linux干货 2016-08-11
  • 初识SElinux

    一、SElinux(Secure Enhanced Linux):安全增强的Linux        SElinux是一个在内核中实践的强制访问控制(MAC)安全性机制,由美国国家安全局NSA(The National Security Agency)和SCC(Secure Computing Co…

    Linux干货 2016-09-15
  • Linux磁盘管理

    一、磁盘简介 机械硬盘的组成部件主要有:盘片、机械手臂、磁头与主轴马达;盘片又可以细分为扇区(Sector)和磁道(Track),所有盘片的同一个磁道称之为柱面(Cylinder) 目前主流的磁盘接口有SCSI、SATA、SAS、USB等 Linux一切皆文件,硬件设备也有对应的文件,linux访问设备,其实就是访问与其对应的文件系统接口 设备文件: &nb…

    Linux干货 2016-06-01
  • 系统启动和内核管理以及几个重要实验

    Centos启动流程:     1.加载BIOS的硬件信息,获取第一个启动设备     2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息     3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备 &n…

    Linux干货 2017-05-15