1、搭建一个 LNMP 架构请写出它的底层原理,当用户访问的是静态资源、和动态资源这两种类型的资源是,其中各个 service 之间做了什么操作。请分别一 一写出
nginx+mysql+php,
nginx
#!/bin/bash
#安装前请检查是否存在web服务和要安装的nginx的版本
download_url="http://nginx.org/download/nginx-1.18.0.tar.gz"
filename=${download_url##*/}
uncompress_dir=${filename%.t*}
download_dir="/usr/local/src"
install_dir="/apps/nginx"
cpu=`lscpu|awk '/^CPU(s)/{print $2}'`
install_nginx(){
[ -d $install_dir ]||mkdir -pv $install_dir
yum install -y gcc pcre-devel openssl-devel zlib-devel
useradd -s /sbin/nologin nginx
cd $download_dir
wget $download_url
tar xf $filename
cd $uncompress_dir
./configure --prefix=$install_dir --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module
--with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
make -j $cpu && make install
chown -R nginx.nginx $install_dir
ln -s $install_dir/sbin/nginx /usr/bin/
cat >> /usr/lib/systemd/system/nginx.service <<EOF
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/apps/nginx/run/nginx.pid
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
EOF
mkdir -pv $install_dir/run
sed -Ei.bak '/^#pid/s@#pid.*@pid /apps/nginx/run/nginx.pid;@' $install_dir/conf/nginx.conf
systemctl daemon-reload
systemctl enable --now nginx
}
install_nginx
前面用nginx做代理,当访问不同后缀的页面时调度到相应的服务,通过location定义
mysql放到后面.通过php或其他程序建立与数据库的连接
2、AOF 和 RDB 的两者之间的区别以及优缺点
RDB:基于时间的快照,其默认只保留当前最新的一次快照,特点是执行速度比较快,redis从master主进程先fork出一个子进程,使用写时复制的机制,子进程将内存中的数据保存为一个临时文件,当数据保存完成再将上一次保存的临时文件替换掉,然后关闭子进程,这样可以保证每一次做快照时保存的数据都是完整的
缺点:不能实时保存数据,可能会丢失自上次RDB备份到当前的内存数据
AOF:默认每秒钟fsync一次,即执行的命令默认保存到AOF文件中,这样即使redis服务器发生故障的话最多只丢失1秒钟之内的数据,也可以设置不同的策略,数据的安全性相对较高写入采用的是append模式,在写入过程中不需要seek,即使出现了宕机现象,也不会破坏日志文件中已经存在的内容,可以在AOF文件体积变得过大时,自动进行AOF的重写.包含一个格式清晰、易于理解的文件日志记录
缺点:即使有些操作是重复的也会全部记录,AOF文件的大小要大于RDB文件
AOF在恢复大数据时的速度比RDB的恢复速度慢
bug出现的可能性更多
3、请问 Redis 持久化如何实现。
RDB和AOF
RDB:
自动保存
定时执行下bgsave,做好备份
AOF:
修改配置文件 appendonly yes
4、通过脚本实现自动化 RDB 备份
用定时任务,定时执行备份
#!/bin/bash
redis-cli -h 127.0.0.1 -a 123456 bgsave &> /dev/null
date=`date +%F_%T`
[ -e /backup/redis-rdb ]||mkdir -p /backup/redis-rdb
mv /var/lib/redis/dump.rdb /backup/redis-rdb/dump_6379-$date.rdb