设为首页 收藏本站
查看: 1664|回复: 0

[经验分享] 基于lvs的DR模型搭建高可用的web服务,并部署wordpress,(附...

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-4-19 20:25:06 | 显示全部楼层 |阅读模式
基于lvs的DR模型搭建高可用的web服务,并部署wordpress,(附有脚本实现健康状态检测的代码)
试验环境:


# uname -ro
2.6.32-358.el6.i686 GNU/Linux

基于lvs的DR模型搭建高可用的web服务,部署wordpress如下图
    wKioL1NRUynScoXdAAFOZfejYG4440.jpg
1.分别为在个服务器中同步时间,防止数据不同步。


# ntpdate 172.16.0.1
# crontab -e
no crontab for root - using an empty one
*/5 * * * * /usr/sbin/ntpdate 172.16.0.1

2.在172.16.1.1搭建基于fcgi的LAMP平台提供web服务。(具体实现过程可以参见基于fcgI编译安装LAMP实现层次化:httpd 2.4.9 + mysql-5.5.33 + php-5.4.26)

3.在172.16.19.101中搭建nfs,作为web1和web2的共享文件服务器


centos6.4自带nfs服务
1.新添加一块磁盘,创建逻辑卷,作为文件共享存储,并挂载/data目录下:具体过程可以参见以前的博客

2.编辑nfs的配置文件/etc/exports,添加如下代码:
# vim /etc/exports
/data   172.16.0.0/16(rw,no_root_squash)
3.启动nfs服务
# service nfs start

4.将NFS文件系统挂分别载至web1和web2服务器的 /usr/local/apache/htdocs目录下,共享web目录
# vim /etc/fstab
172.16.19.1:/data       /usr/local/apache/htdocs                        nfs     defaults,acl    0 0
4.设置共享文件的权限:
#setfacl -m -u:apache:rwx /data
NFS服务基于RPC(远程过程调用)实现网络文件共享

4.在172.16.1.101源码安装mariadb-10.0.10-linux-i686,做为web1和web2的mysql数据库服务器(聚过程可以参见上一篇博客)


为wordpress授权,使其能够操作数据库
MariaDB [(none)]> grant all privileges on *.* to "wordpress"@'172.16.%.%' identified by 'wordpress';
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.01 sec)

5为web服务提供测试页,测试web1和web2  


# vim /usr/local/apache/htdocs/index.php
<?php
phpinfo();
?>





wKiom1NRSHyRecPQAAEbsWbuQ0w833.jpg
    wKiom1NRSK7gT-InAAFVHHoF--I514.jpg

6.搭建基于DR模型的lvs服务
在Director中进行如下配置

1.清空iptables中的规则
# iptables -t filter -F
# yum -y install ipvsadm

2.配置vip
# ifconfig eth0:0 172.16.19.100/16 up

3.配置web1(RS1)
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

4.隐藏RS1中的VIP,使RS1基于VIP正常与客户端通信
# ifconfig lo:0 172.16.1.100 netmask 255.255.255.255 broadcast 172.16.19.100 up
# route add -host 172.16.19.100 dev lo:0

5.配置web2(RS2)
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

6.隐藏RS1中的VIP,使RS1基于VIP正常与客户端通信
# ifconfig lo:0 172.16.1.100 netmask 255.255.255.255 broadcast 172.16.19.100 up
# route add -host 172.16.19.100 dev lo:0

7.在Director中添加集群规则:实现session绑定
# ipvsadm  -A -t 172.16.19.100:80 -s wlc -p 86400
# ipvsadm  -a -t 172.16.19.100:80 -r 172.16.1.10 -g
# ipvsadm  -a -t 172.16.19.100:80 -r 172.16.1.11 -g

7.在nfs服务器中部署wordpress   


1 # cd /data/

下载wordpress
lftp 172.16.0.1:/> get pub/Sources/5.i386/new_lamp/wordpress-3.3.1-zh_CN.zip
2解压wordpress
# uzip wordpress-3.3.1-zh_CN.zip

3.修改wordpress所有文件的权限
# chmod 777  /data/wordpress/*

4 初始化wordpress,并安装部署wordpress
为wordpress创建数据库
# MariaDB [(none)]> create database  wordpress ;
5.为其提供配置脚本
# vim /data/wordpress/wp-config.php
<?php
define('DB_NAME', 'wordpress');
define('DB_USER', 'dis');
define('DB_PASSWORD', 'dis');
define('DB_HOST', '172.16.19.101');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
define('AUTH_KEY',         '{};kK-laXdILf#|3:0$dX_o( u*.SU9!B2!x,@,Zi!PK^-MQw;=o2P3SCk@0wRoK');
define('SECURE_AUTH_KEY',  '@AkI-VJs-WUVz+]A,n<hClqe.(nJ xsdfqOe:5SxH|UwV:tnU+qyVjCpzG2T/m*j');
define('LOGGED_IN_KEY',    '^8]94US~HTZ,1}K 0q6.Lg.y6,Deq,}7P*PK3I@]x)YxCQ<YVezqs]f!ah>%/* S');
define('NONCE_KEY',        'H wWh@]>p,[7mOdjXtM9hpw@{S[;3pqZN/jVOUSrDF<Kc/fb[5S4J@!)kzk>v428');
define('AUTH_SALT',        'ta:l97{$5{}tuH3&H_JEkR*6f^+AD&Iwv{&v$JXu`/1}dbixz=$sWAtiT]7D(aVt');
define('SECURE_AUTH_SALT', '-GH*Z=2]`6!jEiYfPe$XHk3Y/ItzD,81`4k`zjTj[LOGn&e?y:g?tY|#S%uZzGP$');
define('LOGGED_IN_SALT',   'SLML{Uuo4BX*{!Q.VRA&O3:JaWIYLT>GX{#_OsWS=IJO/bY^PciYjFQ_d{S}F(jp');
define('NONCE_SALT',       'EmkqCx,4<9C;J4]Fr(:2rr4TrgaW4F`R+k,<9K{Et5*i90T+C%#%![Kx^JJGz<$z');
$table_prefix  = 'wp_';
define('WPLANG', 'zh_CN');
define('WP_DEBUG', false);
if ( !defined('ABSPATH') )
        define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');
define('WP_ALLOW_REPAIR', true);
?>

Wordpress部署成功
wKioL1NRTNLRc2DUAAG81K8ONn0324.jpg    wKiom1NRTYXSAFuwAAEGznS-VQE537.jpg   
    wKioL1NRTbCCMuV9AAHip2IhpAM745.jpg
8.基于LAMP平台的DR模型的LVS集群搭建成功



# ipvsadm -L -n --connection
IPVS connection entries
pro expire state       source             virtual            destination
TCP 1385:22 NONE        172.16.0.102:0     172.16.19.100:80   172.16.1.11:80
TCP 1313:11 NONE        172.16.19.2:0      172.16.19.100:80   172.16.1.10:80

# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  172.16.19.100:80                  310     2958        0   256017        0
  -> 172.16.1.10:80                    196     1624        0   132126

9.为基于LAMP平台的LVS集群提供健康状态检测脚本,运行在LVS中的每一个节点


# vim checkhealth.sh
   #!/bin/bash
        #
        VIP=172.16.19.100
        CPORT=80
        FAIL_BACK=127.0.0.1
        RS=("172.16.1.10" "172.16.1.11")
        declare -a RSSTATUS
        RW=("2" "1")
        RPORT=80
        TYPE=g
        CHKLOOP=3
        LOG=/var/log/ipvsmonitor.log
        addrs() {
          ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
          [ $? -eq 0 ] && return 0 || return 1
        }
        delrs() {
          ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT
          [ $? -eq 0 ] && return 0 || return 1
        }
        checkrs() {
          local I=1
          while [ $I -le $CHKLOOP ]; do
            if curl --connect-timeout 1 http://$1 | grep OK  &> /dev/null; then
              return 0
            fi
            let I++
          done
          return 1
        }
        initstatus() {
          local I
          local COUNT=0;
          for I in ${RS
  • }; do
  •             if ipvsadm -L -n | grep "$I:$RPORT" &> /dev/null ; then
                  RSSTATUS[$COUNT]=1
                else
                  RSSTATUS[$COUNT]=0
                fi
              let COUNT++
              done
            }
            initstatus
            while true; do
              let COUNT=0
              for I in ${RS
  • }; do
  •             if checkrs $I; then
                  if [ ${RSSTATUS[$COUNT]} -eq 0 ]; then
                     addrs $I ${RW[$COUNT]}
                     [ $? -eq 0 ] && RSSTATUS[$COUNT]=1 && echo "`date +'%F %H:%M:%S'`, $I is back." >> $LOG
                  fi
                else
                  if [ ${RSSTATUS[$COUNT]} -eq 1 ]; then
                     delrs $I
                     [ $? -eq 0 ] && RSSTATUS[$COUNT]=0 && echo "`date +'%F %H:%M:%S'`, $I is gone." >> $LOG
                  fi
                fi
                let COUNT++
              done
              sleep 5
            done

    10.测试健康状态检测机制
       手动停止web2服务,lvs健康状态记录的查看日志文件
    # service httpd24 stop
        wKiom1NRUcfgLeoNAAC8sss79GQ683.jpg

    # service httpd24 start

    wKioL1NRUdrCn1IPAACpsWnKMeA821.jpg

       查看健康状态检测脚本记录日志:
        wKiom1NRUonylbHFAAFRL9ezddE011.jpg



    总结:
       基于lvs的DR模型搭建高可用的web服务,基于lvs的调度算法实现负载均衡,使用脚本可以实现web健康
    状态的检测。适合在小规模的生产情景中,此架构成本比较低,易于实现,能够实现一定的并发访问。
       在搭建nfs文件系统是应该使用no_root_squash,否则不能初始化安装wordpress,并且自动挂载时应该
    使用acl,使其能够更好的控制共享文件系统的权限。
       配置基于DR的LVS时,对于RS应该隐藏vip,能够使web服务的访问能够更加安全。


    运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-17786-1-1.html 上篇帖子: lvs-DR之同一网段的实现方法 下篇帖子: Lvs网络负载均衡 直接路由(dr) wordpress 模型
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表