您的位置:首页 > 运维架构 > 网站架构

study-19: LAMP企业网站集群架构搭建(自己实战)

2016-12-30 18:37 676 查看
一,架构图



二,安装软件

1,WEB-A (192.168.1.241): 

1)安装LAMP(MYSQL安装到make && make install即可)

2)安装rpcbind:yum install rpcbind -y,启动rpcind服务(/etc/init.d/rpcbind start),chkconfig rpcbind on 

3)建立/var/html/www , bbs , blog目录

4)挂载:

mount -t nfs -o nosuid,noexec,noatime,nodiratime,rsize=131072,wsize=131072 192.168.1.243:/data0/www   /var/html/www/uploads

mount -t nfs -o nosuid,noexec,noatime,nodiratime,rsize=131072,wsize=131072 192.168.1.243:/data0/bbs     /var/html/bbs/data

mount -t nfs -o nosuid,noexec,noatime,nodiratime,rsize=131072,wsize=131072 192.168.1.243:/data0/blog    /var/html/blog/uploads

5)rsync定时备份

编写推送脚本 rsync.sh (排除上传文件夹):

rsync -avz /var/html/www --exclude=uploads rsync_backup@192.168.1.244::lampa  --password-file=/etc/rsync.password

rsync -avz /var/html/bbs --exclude=data rsync_backup@192.168.1.244::lampa  --password-file=/etc/rsync.password

rsync -avz /var/html/blog --exclude=uploads  rsync_backup@192.168.1.244::lampa  --password-file=/etc/rsync.password

添加到定时计划任务,每天凌晨3点推送备份到 备份服务器中:

0 3 * * * /bin/sh /server/scripts/rsync.sh > /dev/null 2>&1

2,数据库-B(192.168.1.242):

1)编译安装mysql ,chkconfig mysqld on

2)删除system.user表中不安全的用户

3)建立三个数据库和对应用户及访问授权

mysql> create database www;

mysql> create database bbs;

mysql> create database blog;

mysql> grant all on bbs.* to bbs@192.168.1.241 identified by '123456';(授权给来自192.168.1.241的bbs用户(密码:123456)所有权限给bbs.*中的数据表)

mysql> grant all on blog.* to blog@192.168.1.241 identified by '123456';      

mysql> grant all on www.* to www@192.168.1.241 identified by '123456';  

4)定期备份数据库,自动删除7天以前的备份,

建立备份文件夹 /data/mysqlbBAK

编写备份脚本:backup.sh

#!/bin/bash

databases=(www bbs blog)

# 备份文件要保存的目录

basepath='/data/mysqlbBAK/'

DBUSER='root'

DBPASSWORD='123456'

if [ ! -d "$basepath" ]; then

  mkdir -p "$basepath"

fi

# 循环databases数组

for db in ${databases[*]}

  do

    # 备份数据库生成SQL文件

    /bin/nice -n 19 /application/mysql/bin/mysqldump -u$DBUSER -p$DBPASSWORD --database $db > $basepath$db-$(date +%Y%m%d).sql

    # 将生成的SQL文件压缩

    /bin/nice -n 19 tar zPcf $basepath$db-$(date +%Y%m%d).sql.tar.gz $basepath$db-$(date +%Y%m%d).sql

    # 删除7天之前的备份数据

    find $basepath -mtime +7 -name "*.sql.tar.gz" -exec rm -rf {} \;

  done

  # 删除生成的SQL文件

  rm -rf $basepath/*.sql

添加到定时计划任务,每天零点执行备份:

0 0 * * * /bin/sh /server/scripts/backup.sh > /dev/null 2>&1

编写推送脚本 rsync.sh :

rsync -avz /data/mysqlbBAK/bbs-$(date +%Y%m%d  --date="-1 day").sql.tar.gz  rsync_backup@192.168.1.244::mysqlb  --password-file=/etc/rsync.password

rsync -avz /data/mysqlbBAK/blog-$(date +%Y%m%d  --date="-1 day").sql.tar.gz  rsync_backup@192.168.1.244::mysqlb  --password-file=/etc/rsync.password

rsync -avz /data/mysqlbBAK/www-$(date +%Y%m%d  --date="-1 day").sql.tar.gz  rsync_backup@192.168.1.244::mysqlb  --password-file=/etc/rsync.password

添加到定时计划任务,每天凌晨3点推送备份到 备份服务器中:

0 3 * * * /bin/sh /server/scripts/rsync.sh > /dev/null 2>&1

3,存储-C(192.168.1.243):

1)建立共享目录data0/www , bbs , blog 

2)安装rpcbind,nfs-utils软件:yum install rpcbind nfs-utils -y

3)启动rpcbind 和 nfs服务:/etc/init.d/rpcbind start , /etc/init.d/nfs start   (chkconfig rpcbind on  , chkconfig nfs on)

4)编辑nfs 的export文件(建立www用户和用户组,保持gid,uid与WEB-A中的www用户、用户组一致)

/data0/www 192.168.1.0/24(rw,sync,all_squash,anonuid=503,anongid=503)

/data0/blog 192.168.1.0/24(rw,sync,all_squash,anonuid=503,anongid=503)

/data0/bbs 192.168.1.0/24(rw,sync,all_squash,anonuid=503,anongid=503)

5)兼职分发到服务器A / B / D(需要被分发的客户机A / B / D 都建立相同用户名名、密码的帐号,例如oldboy):

a)以oldboy登录,并在oldboy家目录执行:ssh-keygen -t dsa 

b)公钥分发到客户端(需要输入密码,免密码分发需要配合
expect ):

 ssh-copy-id -i id_dsa.pub "-p52113 oldboy@192.168.1.241"

 ssh-copy-id -i id_dsa.pub "-p52113 oldboy@192.168.1.242"

 ssh-copy-id -i id_dsa.pub "-p52113 oldboy@192.168.1.244"

c)验证拷贝(无密码提示输入):scp -P52113 a.txt oldboy@192.168.1.241

d)分发hosts文件:

另外三台机,允许oldboy sudo提权cp命令:
oldboy
ALL=(ALL)       NOPASSWD: 
/bin/cp




scp -P52113 hosts oldboy@192.168.1.241:~ && ssh -p52113 -t oldboy@192.168.1.241 sudo /bin/cp ~/hosts /etc/

scp -P52113 hosts oldboy@192.168.1.242:~ && ssh -p52113 -t oldboy@192.168.1.242 sudo /bin/cp ~/hosts /etc/

scp -P52113 hosts oldboy@192.168.1.244:~ && ssh -p52113 -t oldboy@192.168.1.244 sudo /bin/cp ~/hosts /etc/

6)inotify+ rsync实时备份

编写脚本inotify.sh:

#!/bin/sh

host01=192.168.1.244

src=/data0/

dst=nfsc

user=rsync_backup

rsync_passfile=/etc/rsync.password

inotify_home=/usr/local/inotify-tools-3.14/

#rsync -aruz $src $user@$host01::$dst --password-file=${rsync_passfile}

${inotify_home}/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src \

| while read file

do

        cd $src && rsync -aruz -R --delete ./ --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} > /dev/null 2>&1

done

exit 0

7)写入到开机启动项:/etc/rc.local

/bin/sh /server/scripts/inotify.sh > /dev/null 2>&1 &

4,备份-D(192.168.1.244 )linux内核自带rsync软件,/etc/rsyncd.conf(该文件可能不存在,可以自己新建一个:

1) 服务器端配置:

新建同步用户:

useradd rsync -s /sbin/nologin

新建配置文件 /etc/rsyncd.conf  :

uid = rsync

gid = rsync

use chroot = no

max connections = 200

timeout = 300

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

ignore errors

read only = false

list = false

hosts allow = 192.168.1.0/24

hosts deny = 0.0.0.0/32

auth users = rsync_backup 

secrets file = /etc/rsync.password 

[lampa] 

path = /data/lampaBAK

[mysqlb] 

path = /data/mysqlbBAK

[nfsc] 

path = /data/nfscBAK

启动rsync服务:

rsync --daemon

写入密码文件:

echo "rsync_backup:oldboy" > /etc/rsync.password

chmod -R 600 /etc/rsync.password

2)客户端192.168.1.241  , 192.168.1.242  ,192.168.1.243 配置:

echo "oldboy"  >  /etc/rsync.password (只有密码,权限设为600)
chmod -R 600 /etc/rsync.password

3)存储-C 是实时备份,用inotify + rsync

建立备份文件夹 /data/nfscBAK,且所有者为oldboy

4)WEB-A,数据库-B,用rsync 做定时备份

建立备份文件夹 /data/lampaBAK , mysqlbBAK,且所有者为oldboy
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: