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

来源:互联网 发布:淘宝空包多少钱一个 编辑:程序博客网 时间:2024/05/19 11:38

一,架构图



二,安装软件

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




0 0
原创粉丝点击