第二章作业

公司共有两个业务,网上图书馆和一个电商网站。
现要求运维设计一个安全架构,本着高可用、廉价的原则。
具体情况如下:
网上图书馆是基于jsp开发;
电商系统是基于php开发;
两个网站都是使用的mysql数据库;
要求你提供一个高可用且廉价的架构方案,部署分发业务到外网;
请画出拓扑图及通过虚拟机搭建测试环境

拓扑图

一、部署mysql服务器

第一个里程:下载mysql软件

mysql官方下载链接地址:ftp://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/
wget ftp://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/mysql-5.6.41-linux-glibc2.12-x86_64.tar.gz
tar xf mysql-5.6.41-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.6.41-linux-glibc2.12-x86_64 /application/mysql-5.6

第二个里程:创建软链接

ln -s /application/mysql-5.6/ /application/mysql

第三个里程:创建数据库管理用户,并进行授权数据目录

useradd -M -s /sbin/nologin mysql
chown -R mysql. /application/mysql/data/
第四个里程:对数据库进行初始化
scripts/mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data/ --user=mysql

第五个里程:启动mysql服务

cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld
#将默认位的mysql位置改成现在安装的位置
sed -ri "s#/usr/local#/application#g" /etc/init.d/mysqld /application/mysql/bin/mysqld_safe
#因版本不同,需要现在的配置文件覆盖系统原来的配置文件
cp /application/mysql/support-files/my-default.cnf /etc/my.cnf 
cp: overwrite `/etc/my.cnf'? y
/etc/init.d/mysqld start

第六个里程:设置mysql密码

/application/mysql/bin/mysqladmin -uroot password "oldboy"
/application/mysql/bin/mysql -uroot -poldboy

第七个里程:创建jsp数据库与jsp用户名与密码

create database jpress DEFAULT CHARACTER SET utf8;
grant all on jpress.* to jpress@'10.0.0.0/255.255.255.0' identified by 'oldboy';
flush privileges;
show databases;

第八个里程:创建PHP数据库与php用户名与密码

create database wordpress DEFAULT CHARACTER SET utf8;
grant all on wordpress.* to wordpress@'10.0.0.0/255.255.255.0' identified by 'oldboy';
flush privileges;
select user,host from mysql.user;

二、部署java与tomcat环境

第一步:部署jsp环境(web03,web04)

第一个里程:下载jdk,在官网进行下载
第二个里程:将下载的jdk包解压放至到/application/下
tar xf jdk-8u201-linux-x64.tar.gz
mv jdk1.8.0_201/ /application/
ln -s jdk1.8.0_201/ /application/jdk
第三个里程:在/etc/profile环境变量里添加
export JAVA_HOME=/application/jdk
export PATH=$PATH:$JAVA_HOME/bin;
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile
第四个里程:查看是否安装成功
java -version

第二步:部署tomcat

第一个里程:在官网上下载tomcat
https://archive.apache.org/dist/tomcat/
第二个里程:将下载的tomcat包进行解压
tar xf apache-tomcat-9.0.8.tar.gz
mv apache-tomcat-9.0.8  /application/tomcat-9.0.8
cd /application/
ln -s tomcat-9.0.8/ /application/tomcat
第三个里程:在/etc/profile里添加配置
export CATALINT_HOME=/application/tomcat
export CATALINT_BASE=/application/tomcat
第四个里程:启动tomcat服务
/application/tomcat/bin/startup.sh
第五个里程:测试访问
10.0.0.9:8080

第三步:将代码放置到tomcat目录下面webapps/ROOT下

第一个里程:在jpress官网上下载tomcat包
https://gitee.com/fuhai/jpress/releases
第二个里程:将下载的war包移动到webapps下面
mv starter-tomcat-1.0.war /application/tomcat/webapps/
第三个里程:重启tomcat服务,进行测试访问
/application/tomcat/bin/shutdown.sh
/application/tomcat/bin/startup.sh
10.0.0.9:8080/starter-tomcat-1.0
第四个里程:初始化数据库,输入数据库的IP地址,已创建好的数据库名称等信息即可

三、部署php环境(web01,web02)

第一步:部署NGINX服务

第一个里程:软件包依懒安装
yum -y install pcre-devel open-ssl-devel
第二个里程:创建一个管理nginx进程的虚拟用户
useradd -M -s /sbin/nologin www
第三个里程:下载并解压nginxl软件
cd /server/tools
wget http://nginx.org/download/nginx-1.15.8.tar.gz
tar xf nginx-1.15.8.tar.gz
第四个里程:进行软件编译安装
./configure --prefix=/application/nginx-15.8 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
make && make install
第五个里程:为nginx程序软件创建软链接目录
ln -s /application/nginx-15.8 /application/nginx
第六个里程:启动nginx服务
/application/nginx/sbin/nginx

第二步:部署php环境

第一个里程:安装PHP软件依赖关系
[root@web01 tools]# yum install -y zlib-devel libxml2-devel libjpeg-devel libjpeg-t urbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel
libiconv软件安装---字符集转换库(默认可以不进行安装了)
cd /server/tools
 #wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
 tar zxf libiconv-1.14.tar.gz
 cd libiconv-1.14
 ./configure --prefix=/usr/local/libiconv
  make && make install
  #wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
   yum -y install libmcrypt-devel mhash mcrypt
   rpm -qa libmcrypt-devel mhash mcrypt
第二个里程:安装PHP软件
   php官方网站下载:php.net
[root@web01 sbin]# 
./configure \
--prefix=/application/php-5.5.32 \
--with-mysql=/application/mysql-5.6 \
--with-pdo-mysql=mysqlnd \
--with-iconv-dir=/usr/local/libiconv  \
--with-freetype-dir --with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-soap \
--enable-short-tags \
--enable-static \
--with-xsl \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-ftp \
--enable-opcache=no

##防错(以下信息可以不进行配置了)
ln -s /application/mysql/lib/libmysqlclient.so.18  /usr/lib64/
touch ext/phar/phar.phar
make && make install
ln -s /application/php-5.5.32/ /application/php
第三个里程:设置PHP程序配置文件
cp php.ini-production /application/php-5.5.32/lib/
    cd /application/php/etc/
    cp php-fpm.conf.default php-fpm.conf
第四个里程:启动PHP服务
/application/php/sbin/php-fpm
netstat -lntup|grep php
    tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      6251/php-fpm
第五个里程:编写nginx配置文件
    [root@web01 ~]# vim /application/nginx/conf/nginx.conf
worker_processes  1;
error_log logs/error.log debug;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;
    server {
        listen  80;
        server_name  blog.etiantian.org;
        root   html/blog;
        index  index.php index.html index.htm;
        location ~* .*\.(php|php5)?$ {
           fastcgi_pass 127.0.0.1:9000;
           fastcgi_index index.php;
           include fastcgi.conf;
        }
    }
}
第六个里程:将下载好的wordpress-4.7.3-zh_CN.tar.gz上传到服务器
第七个里程:解压代码程序,将代码和序保存到站点目录并进行授权
cd /server/tools
tar xf wordpress-4.7.3-zh_CN.tar.gz 
 mv wordpress/* /application/nginx/html/blog/
chown -R www.www /application/nginx/html/blog/
第八个里程:直接访问blog网站,进行初始化操作
blog.etiantian.org

四、部署负载均衡服务器(lb01,lb02)

第一个里程:安装nginx服务

第二个里程:编辑nginx配置文件后重启nginx服务

[root@lb01 ~]# cat /application/nginx/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream oldboy {
       server 10.0.0.7:80;
       server 10.0.0.8:80;
    }
    upstream jsp {
       server 10.0.0.9:8080;
    }

    server {
        listen  10.0.0.3:80;
        server_name blog.etiantian.org;
        root   html;
        index  index.html index.htm;
        location / {
           proxy_pass http://oldboy;
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
        }
    }
    server {
        listen  10.0.0.4:80;
        server_name yjiu1990.etiantian.org;
        location / {
           proxy_pass http://jsp;
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
        }
    }
}

第三个里程:安装keepalived服务

[root@lb01 nginx]# yum -y install keepalived

第四个里程:编写keepalived配置文件

主配置文件
[root@lb01 keepalived]# vim keepalived.conf 
! Configuration File for keepalived
global_defs {
   router_id lb01
}
vrrp_instance group01 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 110
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3/24
    }
}
备配置文件
[root@lb02 keepalived]# vim keepalived.conf 
! Configuration File for keepalived
global_defs {
   router_id lb02
}
vrrp_instance group01 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3/24
    }
}

第五个里程:keepalived常见问题优化

详见:http://1a7f2dd7.wiz03.com/share/s/0qvOTn10-AEH29_zxM18oPGG3aRLt40Fy4ji245QwB1CUWWz

第六个里程:测试访问

五、部署nfs

第一步:部署nfs服务端

第一个里程:安装服务软件
[root@nfs01 ~]# yum install -y nfs-utils rpcbind
第二个里程:修改配置文件
[root@nfs01 ~]# cat /etc/exports 
/data 172.16.1.7/24(rw,sync) 172.16.1.8/24(rw,sync)
表示共享的目录文件所在的位置 允许访问的网段或主机信息     rw:可读可写 sync:数据同步
第三个里程:创建共享存储目录,并进行授权
[root@nfs01 ~]# mkdir /data
[root@nfs01 ~]# chown -R nfsnobody. /data
[root@nfs01 ~]# ll -d /data
drwxr-xr-x 2 nfsnobody nfsnobody 4096 Feb 14 11:06 /data
第四个里程:启动服务,先启动rpcbind服务再启动nfs服务
[root@nfs01 ~]# /etc/init.d/rpcbind start
Starting rpcbind:                                          [  OK  ]
[root@nfs01 ~]# /etc/init.d/nfs
nfs       nfslock   nfs-rdma  
[root@nfs01 ~]# /etc/init.d/nfs start

第二步:部署客户端(每个客户端都安装)

php服务器
第一个里程:安装nfs与rpcbind服务
[root@web01 ~]# yum install -y nfs-utils rpcbind
第二个里程:使用mount进行挂载
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@web01 ~]# df -h
Filesystem         Size  Used Avail Use% Mounted on
/dev/sda2           38G  1.5G   34G   5% /
tmpfs              238M     0  238M   0% /dev/shm
/dev/sda1          190M   40M  141M  22% /boot
172.16.1.31:/data   38G  1.5G   34G   5% /mnt
jsp服务器
第一个里程:安装nfs与rpcbind服务
[root@web03 ~]# yum install -y nfs-utils rpcbind
第二个里程:使用mount进行挂载
[root@web03 ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@web03 attachment]# df -h
Filesystem         Size  Used Avail Use% Mounted on
/dev/sda2           38G  2.6G   33G   8% /
tmpfs              238M     0  238M   0% /dev/shm
/dev/sda1          190M   40M  141M  22% /boot
172.16.1.31:/data   38G  1.5G   34G   5% /application/tomcat-9.0.8/webapps/ROOT/attachment

六、部署rsync服务

第一步:部署服务端

第一个里程:确认是否安装rsync服务
[root@backup tmp]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
第二个里程:编写配置文件与配置文件说明
#全局配置,在全局生效
uid = rsync -->指定rsync服务运行的时候,向磁盘读取和写入的操作者
gid = rsync -->指定rsync服务运行的时候,向磁盘读取和写入的操作者
use chroot = no -->进行数据同步存储时,安全相关参数,默认内网进行数据同步时,可以关闭
max connections = 200 --> 定义向备份服务器进行数据存储的并发连接数
timeout = 300 --> 定义与备份服务器建立的网络连接,在多长时间没有数据传输时,就释放连接
pid file = /var/run/rsyncd.pid --> 服务程序运行时,会将进程的pid信息存储到一个指定的pid文件中
lock file = /var/run/rsync.lock --> 定义锁文件,主要用于配合max connections 参数,当达到最大连接就禁止继续访问
log file = /var/log/rsyncd.log --> 定义服务的日志文件保存路径信息
ignore errors --> 在进行数据备份传输过程过程中,忽略一些I/O产生的传输错误
read only = false --> 设置对备份的目录的具有读写权限,即将只读模式进行关闭
list = false --> 确认是否可以将服务配置的模块信息,在客户端可以查看显示
hosts allow = 172.16.1.0/24 --> 设置备份目录允许进行网络数据备份的主机地址或网段信息,即设置白名单
hosts deny = 0.0.0.0/32 --> 设置备份目录禁止进行网络数据备份的主机地址或网段信息,即设置黑名单
auth users = rsync_backup --> 指定访问备份数据目录的认证用户信息,为虚拟定义的用户,不需要进行创建
secrets file = /etc/rsync.password --> 设置访问备份数据目录进行认证用户的密码文件信息,会在文件中设置认证用户密码信息
#局部配置,只在模块内生效
[backup] --> 指定备份目录的模块名称信息
comment = "backup dir by oldboy" --> 模块说明信息
path = /backup --> 指定数据进行备份的目录信息
第三个里程:创建备份目录管理用户
useradd -M -s /sbin/nologin rsync
第四个里程:创建备份目录并将所属组与所属改成rsync用户
mkdir /backup
chown -R rsync. /backup
第五个里程:创建认证文件,并将权限改成600
echo "rsync_backup:oldboy123" >> /etc/rsync.password
chmod 600 /etc/rsync.password
启动rsync服务(rsync端口号为873)

[root@backup /]# rsync --daemon
[root@backup /]# ps -ef |grep rsync
root       2374      1  0 17:12 ?        00:00:00 rsync --daemon
root       2376   1224  0 17:12 pts/0    00:00:00 grep rsync
[root@backup /]# netstat -nltp |grep rsync
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      2374/r
sync          tcp        0      0 :::873                      :::*                        LISTEN      2374/r
sync 

第二步:部署客户端

创建认证密码文件
echo "oldboy123" >> /etc/rsync.password
chmod 600 /etc/rsync.password

第三步:将mysql数据库备份到rsync

mysql服务器上备份脚本
[root@db01 scripts]# cat mysql.sh 
#!/bin/bash
date=`date +%F`
/application/mysql/bin/mysqldump -uroot -poldboy --all-database > /server/backup/$d
ate.sql
rsync -avz /server/backup/$date.sql rsync@172.16.1.41::mysql --password-file=/etc/rsync.password
在定时任务中设置每天晚上12点备份
[root@db01 scripts]# crontab -l
#backup mysql to rsync
00 00 * * * /bin/sh /server/scripts/mysql.sh  >/dev/null 2>&1

第四步:将nfs服务器的文件备份到rsync

脚本
[root@nfs01 backup]# cat /server/scripts/web_rsync.sh 
#!/bin/bash
date=`date +%F`
cd / && tar -zcf backup/$date.tar.gz /data/*
rsync -az /backup/$date.tar.gz rsync@172.16.1.41::nfs --password-file=/etc/rsync.pa
ssword
在定时任务中设置每天晚上12点备份
[root@db01 scripts]# crontab -l
#backup nfs to rsync
00 00 * * * /bin/sh /server/scripts/web_rsync.sh  >/dev/null 2>&1
posted @ 2019-03-11 09:36  游走在边缘的人  阅读(667)  评论(0编辑  收藏  举报