Linux运维趋势采摘 -14期 【第一次编辑】

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:
构建高性能电子商务网站
-------------------------------
一、熟悉安全技术,了解硬件防火墙性能,能熟悉的配置iptables 和了解
Linux/Unix 相关的安全工具;
二、熟练的配置Linux 的集群技术,比如LVS/Nginx/HAproxy,了解其原
理和会话保持机制;
三、熟练的配置Nginx 和Apache 服务器,能熟练的配置其正则;
四、熟练和了解MySQL 或Oracle 数据库,至少要了解一种;
五、熟悉存储;
六、熟悉和了解虚拟化技术;
七、极熟悉SHELL 脚本,用其实现工作中的各项需求;
八、懂PHP 或Java 代码。(以上总结来自抚琴煮酒的一次访谈)
在大型电子商务网站下,运维的工作会细分,不过上述内容仍是基本功。
此外,由于大规模网站遇到的各方面挑战,会要求开发人员和运维人员能够
与时俱进,在网站遭遇瓶颈之前做好应对。
 
煮酒品茶:抚琴煮酒的这些个基本功,个人认为把他当成一个学习的过程即可,精通这个精通那个最终只会倒致啥事无成,只有一项完全熟悉之后方可进军下一目标。
-------------------------------------
 
Ubuntu 11.10,Fedora 16正式发布
-----------------------------------------------------
【脑细胞】网站架构的常见演进路径:web 与db 共用→ web 和db 拆分→多台web → db 主从→ web 缓存→ db 缓存→存储拆分→ Scale Up →按应用竖切web →内存当硬盘→按时间横切db →按事务竖切db →按hash 竖切db →存储网络化→虚拟化→云,看起来都有章可循,但不知多少技术人员在这路上死了无数脑细胞,还有那无数的不眠之夜。
http://weibo.com/1649415495/xwl7WBXwa
 
煮酒品茶:同上方观点一样,任何一个都是一个过程,只有彻底了解后方可进军下个方面,技术过渡也是这么过来的。
-------------------------------------------
 
淘宝软件基础设施近年发展情况
----------------------------------------------
MySQL优化
针对复制、同步、日志系统、单机效率、负载均衡方面的优化。详见
yufeng 的另一篇分享:
http://www.slideshare.net/mryufeng/mysql-7583273
服务优化
针对Apache/Nginx、HTTP 模块、Squid、LVS、HAProxy、TCP 方面的优化。Nginx 优化方面,淘宝有一个开源的模块,大家可以参考一下:
http://code.taobao.org/p/nginx_concat_module/
去年的Velociy 大会上,朱照远(叔度)和王晓哲(清无)也分享过Nginx定制开发方面的经验。
Java环境优化
这方面可以参考淘宝Java 中间件团队博客(注:该团队已经在今年和淘宝业务平台团队合并为通用产品团队):
http://rdc.taobao.com/team/jm/
Linux内核优化与定制
夸父通讯中间件
任卿对夸父通讯中间件进行过介绍:
http://www.slideshare.net/openparty/ss-6680035
低功耗硬件平台
这方面可以参考淘宝最近公开的开源绿色计算项目:
http://www.greencompute.org/
CDN系统
这方面也可以参考任卿的介绍:
http://www.slideshare.net/colderboy17/cdn-9022813
------------------------
架构或者构思前期必须思考:
应用服务器操作系统-应用服务器软件-Web Server-DB Server 开发框架
------------------------
 
煮酒品茶:以此记录,并慢慢学习
---------------------------------------------------
 
构建高安全电子商务网站之(网站文件及数据库自动本地/异地双备份)[连载之电子商务系统架构]
---------------------------------------------------
构建高安全电子商务网站之(网站文件及数据库自动本地/异地双备份)[连载之电子商务系统架构]
出处:http://jimmyli.blog.51cto.com/ 我站在巨人肩膀上Jimmy Li
作者:Jimmy Li
关键词:网站,电子商务,Shell,自动备份,异地备份
------[连载之电子商务系统架构]访问量超过100万的电子商务网站技术架构
连接:http://jimmyli.blog.51cto.com/3190309/584992 网站运维异地备份方案及故障应急备用镜像
 
 
上一遍文章详细介绍了服务器安全方面,接下来继续介绍Linux服务器文件备份,数据库备份,数据安
 
全存储相关的电子商务系统架构。针对安全性有多种多样的解决方案,其中数据备份是重中之重的首要
 
工作。
电子商务网站更加注重考虑数据安全,数据备份方案,包括本地备份、异地备份架构。其中Linux服务
 
器的备份方案非常多,本文介绍一个大众化适用的解决方案,通过编写Shell脚本来完成自动备份。本
 
架构包括备份网站文件、数据库,自动本地备份并FTP上传备份脚本,完成相应本地备份、异地备份,
 
实现双层备份解决方案。
 
本文要点:
 
1.全自动完成网站文件及数据库备份。
2.编写Shell脚本来完成自动备份。
3.同时进行自动本地/异地双备份,FTP上传备份。
4.Linux服务器的备份解决方案。
5.包括备份网站文件,网站程序文件、数据文件,MYSQL数据库。
6.定期定时自动完成备份。定期删除旧备份,这里是自动删除30天前备份,复用利用备份空间。
 
目录:
 
一、准备工作
二、构建高安全电子商务网站之(网站文件及数据库自动本地/异地双备份)架构图
三、网站及数据库自动本地备份并FTP上传备份Shell脚本,完整的实例;备份脚本进行详细解说,注释
 
 
 
在运营中的电子商务网站,建站之初就一直在重申一定要备份好自己的数据,因为太多的不确定性可能
 
会造成数据库丢失,而且大部分基础服务商也不可能提供每天备份数据。原来本BLOG提供过一个备份方
 
法,只是略微说了一下,可能部分新手会不太好入手。今天分享一个自己的备份脚本。
详见后面附录 http://jimmyli.blog.51cto.com/3190309/584992 《网站运维异地备份方案及故障应急
 
备用镜像站》
 
一、准备工作:
 
1.软件安装
需要提前在Linux服务器安装好lftp,lftp功能上比较强大,CentOS直接执行:yum install lftp,
 
Debian执行:apt-get install lftp 。
2.备份目录建立
需要在Linux服务器上创建/home/backup/ 目录。
3.FTP异地备份IP 账号 密码
需要在异地FTP上创建backup目录。
如果Linux服务器上数据库不多的话使用网络基础服务商的存储空间就可以。也可以用专门的备份服务
 
器。可根据应用的大小,数据量的大小,网络状况,和实际的网络资源,硬件资源灵活支配。
 
二、构建高安全电子商务网站之(网站文件及数据库自动本地/异地双备份)架构图
 
 
三、网站及数据库自动本地备份并FTP上传备份Shell脚本
完整的实例:
========================================================================
 #!/bin/bash 
#Funciont: Backup website and mysql database 
#Author: Jimmy Li 
#Website: http://jimmyli.blog.51cto.com/ 
#IMPORTANT!!!Please Setting the following Values! 
Backup_Dir1=/data/wwwroot/www.zuihuasuan8.net
wd=/var/www/html/blog 
MYSQL_UserName=root 
MYSQL_PassWord=你的mysql数据库root密码 
Backup_Database_Name1=www.zuihuasuan8.net 
FTP_HostName=www.zuihuasuan8.net 
FTP_UserName=www.zuihuasuan8.net 
FTP_PassWord=www.zuihuasuan8.net 
FTP_BackupDir=www.zuihuasuan8.net——backup 
TodayWWWBackup=www-*-$(date +"%Y%m%d").tar.gz 
TodayDBBackup=db-*-$(date +"%Y%m%d").sql 
OldWWWBackup=www-*-$(date -d -30day +"%Y%m%d").tar.gz 
OldDBBackup=db-*-$(date -d -30day +"%Y%m%d").sql 
#tar zcf /home/backup/www-$Backup_Dir1-$(date +"%Y%m%d").tar.gz -C /home/wwwroot/ 
cd $wd
tar -zcvf /home/backup/www-$Backup_Dir1-$(date +"%Y%m%d").tar.gz *
 
$Backup_Dir1 --exclude=soft 
/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name1 
 
> /home/backup/db-$Backup_Database_Name1-$(date +"%Y%m%d").sql 
rm $OldWWWBackup 
rm $OldDBBackup 
cd /home/backup/ 
lftp $FTP_HostName -u $FTP_UserName,$FTP_PassWord << EOF 
cd $FTP_BackupDir 
mrm $OldWWWBackup 
mrm $OldDBBackup 
mput $TodayWWWBackup 
mput $TodayDBBackup 
bye 
EOF
 
========================================================================
煮酒品茶:有点小小的人性化问题,打包后的文件解压后连整个目录都打包了,造成长目录,这本不是我们需求的,所以我们小小的cd一下就好了
定义:wd=/var/www/html/blog 
压缩:tar -zcvf /home/backup/www-$Backup_Dir1-$(date +"%Y%m%d").tar.gz *
 
------------------------------------
我修改后的:
Linux数据备份方案
 
设计需求:
一、每天零晨三点备份web文件
二、每天零晨三点备份MYsql数据库
三、远程传送至某地
 
脚本如下:
-----------------------------------------------------------
#-----------------------------------------
# form to cwtea.51cto.com or wh.cn-cert.com
#Email:zwhset@163.com
#-----------------------------------------
#
wd=Web即备份文件目录
bd=备份目录
su=Mysql用户
sp=Mysql密码
sn=数据库名字
fu=FTP用户
fp=FTP密码
fpd=FTP备份目录
#www
cd $wd
tar -zcvf $bd/web-$(date +"%Y%m%d").tar.gz *
#sql
mysqldump -u$su -p$sp $sn > $bd/$sn$(date +"%Y%m%d").sql
#ftp
lftp FTPIP -u$fu,FTP密码 <<EOF
cd $spd
mput $bd/web-$(date +"%Y%m%d").tar.gz
mput $bd/$sn$(date +"%Y%m%d").sql
bye
EOF
---------------------------------------------------------------
 
-----------------------------------
 
下面将备份脚本进行详细解说,注释:
#!/bin/bash
#Funciont: Backup website and mysql database
#Author: Jimmy Li
#Website: http://jimmyli.blog.51cto.com/
#IMPORTANT!!!Please Setting the following Values!
######~Set Directory you want to backup~######将下面的目录修改成自己要备份的目录,一般按我
 
的都是在/data/wwwroot/下面所有直接写了需要备份的目录。可以继续再加:Backup_Dir2=你的目录 
 
,Backup_Dir后面的数字依次递增。如果不足N个,直接删除不需要的就可以,同时修改下面tar zcf 
 
部分。
Backup_Dir1=/data/wwwroot/www.zuihuasuan8.net
 
######~Set MySQL UserName and password~######设置MySQL的用户名和密码,最好是root,其他用户
 
可能因为权限问题无法导出部分数据库。
MYSQL_UserName=root
MYSQL_PassWord=你的mysql数据库root密码
######~Set MySQL Database you want to backup~######设置要部分的数据库,可以继续再加:
 
Backup_Database_Name2=数据库名,Backup_Database_Name后面的数字依次递增。
Backup_Database_Name1=www.zuihuasuan8.net
 
######~Set FTP Information~######设置用来存放备份数据的FTP信息
FTP_HostName=www.zuihuasuan8.net   //FTP服务器的IP或者域名
FTP_UserName=www.zuihuasuan8.net                //FTP服务器用户名
FTP_PassWord=www.zuihuasuan8.net   //FTP服务器用户对应的密码
FTP_BackupDir=www.zuihuasuan8.net——backup                    //备份到FTP上的目录,需要提
 
前创建好。
#Values Setting END! ######设置结束
TodayWWWBackup=www-*-$(date +"%Y%m%d").tar.gz
TodayDBBackup=db-*-$(date +"%Y%m%d").sql
OldWWWBackup=www-*-$(date -d -30day +"%Y%m%d").tar.gz
OldDBBackup=db-*-$(date -d -30day +"%Y%m%d").sql
tar zcf /home/backup/www-$Backup_Dir1-$(date +"%Y%m%d").tar.gz -C /home/wwwroot/ 
 
$Backup_Dir1 --exclude=soft
 
###上面为备份网站文件数据,因为我的网站比较零散,而且网站目录下面有些目录属于临时目录并不
 
需要备份,所以可以在上面加上--exclude=不备份的目录。如果在前面加了Backup_Dir2=yourdir,则
 
再加tar zcf /home/backup/www-$Backup_Dir2-$(date +"%Y%m%d").tar.gz -C
/home/wwwroot/ $Backup_Dir2 。如果多余则删除多余行。
/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name1 
 
> /home/backup/db-$Backup_Database_Name1-$(date +"%Y%m%d").sql
 
###上面为备份MySQL数据库,如果在前面加了Backup_Database_Name2=yourdatabasename,则再
 
加/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord 
 
$Backup_Database_Name2 > /home/backup/db-$Backup_Database_Name2-$(date +"%Y%m%d").sql 。如
 
果多余则删除多余行。
rm $OldWWWBackup
rm $OldDBBackup
###删除30天前的备份###
cd /home/backup/
###下面为自动上传部分,不得不说lftp很强大,抛弃ftp吧####
lftp $FTP_HostName -u $FTP_UserName,$FTP_PassWord << EOF
cd $FTP_BackupDir
mrm $OldWWWBackup
mrm $OldDBBackup
mput $TodayWWWBackup
mput $TodayDBBackup
bye
EOF
脚本下载地址:
下载脚本,将脚本放到/root/ 下面,按上面的注释修改脚本中的参数,并保存,如果不熟悉vim或者
 
nano编辑器,可以用winscp,执行:chmod +x /root/backup.sh 为脚本添加执行权限,执行:crontab 
 
-e 添加定时执行
在crontab中加入:0 3 * * * /root/backup.sh
凌晨3点自动执行/root/bakcup.sh 脚本,备份Linux服务器上的数据并上传到预先设定好的异地FTP上
 
选择在凌晨3进行备份,是因为这个时间段网站的访问量是最低。也就是说在很少人访问的情况下做备
 
份操作。
 
附录:
网站运维异地备份方案及故障应急备用镜像站
 
 
定期检查异地备份故障应急时,启用应急Web服务
 
出处:http://jimmyli.blog.51cto.com/ Jimmy Li Blog 。欢迎朋友一起交流,讨论。扣扣:柒⑥柒陆叁⑤叁伍
 
煮酒品茶:一套非常nice的方案,过程就是脚本收集文件然后上传至远程备份服务器上。思路是头脑,脚本是执行。构成一个基本的备份系统。测试后再修改看效果。
------------------------------------------------------------
 
 
一种MySQL主从同步加速方案
------------------------------------------------------------
一种MySQL主从同步加速方案
一、问题起源
MySQL 的主从同步一直有从库延迟的问题,原因简单描述如下:
1、 MySQL 从库上有一个IO 线程负责从主库取binlog 到本地。另外有
一个SQL 线程负责执行这些本地日志,实现命令重放;
2、 正常网络状况下IO 线程没有性能问题(这个待会会用到),问题是
SQL 线程只有一个,更新速度跟不上。所以经常会看到从库的CPU idle 很
高,但同步性能就是上不去。
二、方案雏形
单线程的SQL 线程是造成这个问题的主要原因。比较直接的想法是把
它改成多线程版本,这个据说官方版本开发中,其实我们也有一个这样的
patch,但是直接写大片代码在线上提供服务的slave 机器上这种事儿,都会
因为担心稳定性而很难推动(写patch 的和运维的同学,你们懂的)。
所以打算用一个“第三方”工具中转,来实现多线程同步。基本结构如图:
说明:
1、这些transfer 从master 上各自同步一部分的数据,分别独立更新
slave。多进程、多线程均可。
2、Transfer 与master 之间异步更新日志,transfer 与slave 之间同步更新
数据。
3、从这可以看出这个方案的缺点之一:更新能够被独立分开。比较直观
的想法是,按照表分。
三、关于transfer
作为这个关键的转发工具transfer,需要提供如下功能:
1、能够指定同步master 中的哪部分数据,并且能够方便地修改这个配置
以应对master 的加表需求。
2、支持stop slave、start slave。支持快速切换到新主库的change master
命令。
3、能够记录读取点,transfer 自己重启或master 重启后能够按照记录点
继续读后面的binlog。
4、能够记录分发点,transfer 自己重启或slave 重启后能够按照记录点继续同步给slave。
用起来就会发现还有好多要求……
四、方案实现
Transfer 的这么多功能,自己造轮子就累了。这里直接用MySQL 来充当此角色。为了方便描述,下文还将之称为transfer。Transfer 更新slave 在功能上可以使用federated 引擎,但由于其纠结的实现导致性能上达不到要求,因此在MySQL 框架层中作了一点修改,读到同步日志后,直接发送给
slave。
方案简单描述如下:
1、Slave 机器上搭另外的若干个MySQL(transfer),将其设为Master 的从
库,且设置replicate-do-table, 每个transfer 承担一部分的表。
2、所有Transfer 的更新目标都设置为slave,其更新方式是读到日志后直
接mysql_real_query 执行到slave 上。从这可以看出这个方案的缺点之二:只能支持statement 格式的同步方
式。其实row 也能支持,后面再说。
五、仍然延迟?
在transfer 放弃federated 引擎改用直接发送后,性能提升不少,从库同步
性能增加一倍,但延迟还很大。发现这个时候slave 的机器cpu 已经很忙了,idle 20% 以下——这个算是好消息,总比idle 很高但性能上不去好。实际上是因为每个transfer,虽然设置只同步其中的部分表,但在实现上是IO 线程把master 上的所有命令都备份到本地,然后在SQL 线程执行的时候再判断,若不符合replicate-do-table,再放弃。这样存在的问题,是n 个transfer,磁盘写了n 倍,更严重的是导致SQL线程空转。我们上文提到整个流程中IO 线程是比较空闲的,因此修改IO 线程逻辑,在写入磁盘前先判断,若不符合本transfer 的replicate-do-table 设置,不写盘,直接放弃。
六、效果
从库的QPS 由于线程切换会有抖动,但总的执行时间与主库相同。从库的cpu idle 下降,与主库几乎同时恢复到100。
七、小结
1、要求在slave 机器上多配置n 个transfer(是否在从库上均可)
2、目前只能支持statement 的binlog 格式,实际上row 可以支持,方案定了,开发计划中。
3、跨表更新的语句,会按照其更新的第一个表,分发到唯一一个transfer,没有重复更新的问题,但有时序性问题。方案的好处:
1、功能比较齐全。直接使用MySQL,原有的管理功能基本都能用,主库
从库重启/ 换库的代价比较小。
2、开发量小,只在transfer 上修改两处,不包括配置读取部分,300 行以内
3、风险相对小,不直接修改master 和slave 上的代码,线上容易接收。




本文转自 煮酒品茶 51CTO博客,原文链接:http://blog.51cto.com/cwtea/843583,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
10天前
|
运维 监控 安全
盘点Linux服务器运维管理面板
随着云计算和大数据技术的迅猛发展,Linux服务器在运维管理中扮演着越来越重要的角色。传统的Linux服务器管理方式已经无法满足现代企业的需求,因此,高效、安全、易用的运维管理面板应运而生。
|
2月前
|
运维 监控 网络协议
|
18天前
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
41 3
|
2月前
|
存储 运维 搜索推荐
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
42 1
|
2月前
|
运维 网络协议 安全
Linux安全运维--一篇文章全部搞懂iptables
Linux安全运维--一篇文章全部搞懂iptables
45 1
|
3月前
|
运维 监控 Linux
深入理解Linux系统运维:命令行工具的力量
【9月更文挑战第14天】在Linux的世界里,命令行工具是系统管理员的瑞士军刀。本文将带你领略命令行的魅力,从基础操作到高级技巧,让你的运维工作更加高效和精准。准备好了吗?让我们一起开启这段探索之旅!
|
2月前
|
Web App开发 运维 安全
1Panel:一个现代化、开源的 Linux 服务器运维管理面板
1Panel:一个现代化、开源的 Linux 服务器运维管理面板
|
4月前
|
图形学 开发者 存储
超越基础教程:深度拆解Unity地形编辑器的每一个隐藏角落,让你的游戏世界既浩瀚无垠又细节满满——从新手到高手的全面技巧升级秘籍
【8月更文挑战第31天】Unity地形编辑器是游戏开发中的重要工具,可快速创建复杂多变的游戏环境。本文通过比较不同地形编辑技术,详细介绍如何利用其功能构建广阔且精细的游戏世界,并提供具体示例代码,展示从基础地形绘制到植被与纹理添加的全过程。通过学习这些技巧,开发者能显著提升游戏画面质量和玩家体验。
163 3
|
3月前
|
消息中间件 运维 Linux
linux之centos运维kafka
linux之centos运维kafka