1、什么是运维工程师?
运维工程师,服务器与系统安全稳定的掌舵者!当一个产品(如Web网站、APP软件、网络游戏等)正式上线后,产品、开发、测试类的工作就正式结束了,接下来的维护和管理工作就会全部移交给运维工程师。
运维工程师的主要工作职责就是负责服务器的架构设计以及云计算平台管理,保障软件的稳定运行。没有开发以及测试类工作复杂且工作解决方案相对固定。更重要的是没有年龄以及学历的限制,随着工作年限和工作经验地增长,也会越老越吃香。
2、运维工程师工作场景
运维学科2019全年所有班级就业率93.5%,平均薪资8.7k起,最高薪资25k* 14薪
三、运维课程
运维基础:运维发展史、计算机概述、计算机组成、操作系统学完此阶段可掌握的核心能力:熟练掌握Linux操作系统的安装(CentOS7.6)、配置、基础命令、VIM编辑器、用户管理、权限管理、自有服务、进程检测与控制、阿里云平台管理、开源CMS项目上线部署实战。
Linux操作系统:Linux系统概述、虚拟机、CentOS7.6系统安装,Linux基础命令
Linux下文件管理(上):文件命名规则、目录管理、文件管理、文件复制与剪切、重命名、Linux文件打包与压缩、文件处理命令
Linux下文件管理(下):VIM编辑器介绍、VI与VIM的区别、VIM安装与配置、四种工作模式(命令模式,编辑模式,末行模式,可视化模式)、相关VIM指令、VIM扩展功能、VIM总结
Linux下用户管理:用户和组的相关概念、用户组管理、用户管理、用户密码设置、切换用户、Linux用户管理实战
Linux下权限管理:权限的基本概念、权限在生产环境中的作用、Linux权限类别(rwx)、Linux文件所有者类别(ugo)、普通权限设置(字母+数字)、文件属主与属组设置、高级权限、ACL权限控制、umask
Linux下自有服务+软件包管理:自由服务概述、systemctl管理服务命令、ntp时间同步服务、firewalld防火墙、crond计划任务、设备挂载与解挂、rpm包管理工具
Linux进程检测与控制:进程与程序的概念、进程管理命令(top命令,free命令,df命令,ps命令,netstat命令,kill命令与killall命令)、进程优先级设置
阿里云平台管理与开发CMS项目上线部署实战:云计算平台概述、阿里云平台注册、登录与管理、项目背景、LAMP环境概述、YUM指令、LAMP环境搭建、开源CMS项目上线部署实战
学完此阶段可解决的现实问题:能够根据企业实际项目需求实现服务器部署与架构。
学完此阶段可拥有的市场价值:熟练掌握之后,可以满足市场对初级运维工程师的需求,但是市场就业工资相对较低,还是建议继续学习就业班课程。
Linux高级指令:基础命令回顾、find命令之高级搜索、tree命令、scp文件上传与下载、计划任务crontab + tar实现定时备份、用户管理高级、文件权限管理高级
Linux下软件包管理:软件包管理任务背景、Linux下软件包概述、RPM包管理工具、YUM包管理工具、YUM源配置(公网YUM源,本地YUM源、自建YUM源仓库)、源码安装概述、源码安装三步走、源码安装实战
Linux远程管理服务SSH:SSH任务背景、SSH服务概述,yum源配置,SSH服务安装与配置实战,公私钥概念,SSH免密码登录
Linux数据同步RSYNC:RSYNC任务背景、RSYNC介绍、RSYNC基本语法、本机同步与远程同步、把RSYNC作为系统服务、RSYNC结合INOTIFY实现实时同步、RSYNC托管XINETD
Linux下文件共享服务FTP、NFS、SAMBA:文件共享任务背景、FTP服务介绍、FTP工作模式(主动模式+被动模式)、FTP服务搭建、客户端工具(ftp、lftp使用)、FTP访问控制、NFS服务介绍、NFS服务搭建、配置文件详解、NFS任务背景及解决方案、SAMBA服务介绍、SAMBA服务搭建、配置文件详解、文件共享服务总结
DNS域名管理服务:DNS服务介绍、DNS的作用、DNS服务搭建、正向解析、反向解析、多域搭建、NTP时间服务器、主从DNS架构
源码构建LAMP环境及部署业务应用:LAMP任务背景、Web服务器环境准备、软件编译回顾、编译安装MySQL、编译安装Apache、编译安装PHP、后期配置、Web应用系统部署实战
Linux下日志管理服务RSYSLOG:日志管理任务背景、查看日志、日志管理服务(RSYSLOG概述,日志列表,日志级别,相关符号,配置文件)、RSYSLOG本地日志管理、RSYSLOG远程日志管理、日志管理应用实践
Linux 磁盘管理:磁盘管理任务背景、磁盘管理概述、fdisk命令详解、Linux分区概述、Linux分区实战、逻辑卷介绍、逻辑卷基本概念(PV、VG、PE、LV)、逻辑卷LVM应用操作实战、RAID介绍、RAID常见级别、软硬RAID、软RAID应用实践
Shell脚本编程:Shell概述、变量、Shell流程控制、Shell数组、Shell函数、Shell特殊用法、正则表达式、Shell编程实战
数据库DBA:MySQL概述,MySQL5.7安装,MySQL配置,MySQL基本操作、SQL语句详解、MySQL索引、MySQL备份与还原、MySQL主从复制、MHA高可用架构、MySQL企业级应用实战
学完此阶段课掌握的核心能力:
1、了解Linux系统运行原理,实现Linux服务器的维护与管理;
2、了解Linux系统相关服务,能根据企业需求实现企业运维工作。
学完此阶段可解决的现实问题:能实现企业Linux服务器的日常维护与管理,搭建SSH、文件共享、DNS、Apache等服务、能独立完成系统日志分析、Shell脚本编程、数据库DBA等相关工作。
学完此阶段可拥有的市场价值:熟练学习和掌握后,可满足企业运维的初中级需求。
源码构建企业级LNMP架构及电商系统上线部署:千万级商城系统架构设计任务背景、Web项目开发流程、Linux服务器环境准备、LNMP环境概述、MySQL数据库服务搭建、Nginx软件服务搭建、PHP软件服务搭建、Web商城项目部署上线
大型WEB服务软件Nginx部署介绍使用:Nginx软件概述、Nginx平滑升级、nginx.conf配置文件详解、虚拟主机配置、Nginx默认官方模块详解(GZIP压缩,客户端缓存,反向代理,基于IP/用户的访问控制,目录显示)、日志管理、日志轮转、第三方日志管理软件GoAccess、Location区块、URL重写、第三方模块安装与配置、Nginx安全管理、Nginx其他衍生版本(Tengine,OpenResty)
WEB高可用集群架构设计及实现(keepalived):WEB高可用集群架构设计任务背景、单点数据库迁移、HA高可用集群概述、Keepalived软件介绍、Keepalived组成和原理、VRRP协议、安装与配置Keepalived、Nginx服务高可用实践、Keepalived扩展内容(非抢占模式、VIP脑裂、单播模式)
WEB负载均衡服务器集群架构设计及实现LB(Nginx/LVS/HAProxy):WEB负载均衡服务器集群架构设计任务背景、为什么需要LB负载均衡技术、LB负载均衡架构图、负载均衡分类、常见负载均衡实现方式、LB负载均衡环境准备、Nginx负载均衡实现、负载均衡算法、Session共享解决方案、高可用负载实践; LVS概述、LVS工作原理、LVS核心组件、LVS三种工作模式(NAT模式、DR模式、TUN隧道模式)、LVS/NAT原理和特点、LVS/DR原理和特点、LVS/TUN原理和特点、LVS的十种调度算法、LVS/NAT模式部署实践、LVS/DR模式部署实践; HAProxy概述、HAProxy安装与部署、haproxy.cfg配置文件详解、常见问题分析、HAProxy调度算法、HAProxy负载均衡应用实践
MyCAT读写分离:MySQL读写分离任务背景、读写分离的目的、读写分离常见的实现方式、搭建M-S主从复制、代码实现读写分离、MyCAT实现读写分离实战(JDK配置、MyCAT配置文件详解、读写分离实践、高可用实践、分库分表、MyCAT企业级案例实践)
非关系型数据库NoSQL(Memcache/Redis/MongoDB):非关系型数据库任务背景、Web项目访问流程、优化方案、缓存技术引入、memcached介绍、memcached安装与部署、telnet客户端使用、memcached指令详解、memcached tools工具使用、LRU失效机制、PHP memcached扩展安装、Session入memcached、缓存项目的热点数据; Redis介绍、Redis应用场景、Redis源码安装、客户端工具使用、Redis数据结构详解、数据持久化操作(快照+AOF)、企业级案例(主从,安全限制,PHP Redis扩展,Session入Redis);MongoDB任务背景、MongoDB安装和配置、数据结构类型操作CURD、MongoDB安全设置、PHP扩展、桌面管理软件、企业级日志统计实践
JAVA项目架构设计实战(LNTM架构):Java项目任务背景、Tomcat概述、Tomcat安装与部署、Tomcat企业级管理、Host虚拟主机配置、Server Status服务器状态、应用管理、Nginx动静分离、Nginx+Tomcat负载均衡、Maven概述、Maven项目打包、Maven项目部署
存储(NAS/SAN/GlusterFS/Ceph):存储概述、Linux存储分层、存储的分类(DAS,NAS,SAN)、存储类型的分类(文件存储、块存储、对象存储)、SAN的分类、IP-SAN之iscsi实现; 分布式存储、Glusterfs介绍、raid级别回顾、常见卷的模式、Glusterfs集群、环境准备、集群部署、创建glusterfs存储卷、客户端使用、卷的删除、常见卷类型(stripe模式、distributed模式、distributed-replica模式、dispersed模式、distributed-dispersed模式)、其它卷类型、glusterfs分部署存储应用实战; 认识Ceph、Ceph架构原理图、Ceph集群、Ceph集群组件、Ceph集群环境准备、Ceph集群部署实践、RADOS原生数据存取、Ceph文件存储、Ceph块存储、Ceph对象存储、Ceph对象存储+owncloud打造云盘系统、Ceph Dashboard(拓展)
配置自动化(Ansible/SaltStack):自动化运维任务背景、认识ansible、ansible安装与配置、服务器分组、ansible模块(hostname模块,file模块,模块,yum模块,service模块,command和shell模块,scriYAML格式pt模块)、playbook介绍、playbook实例、playbook编排应用、roles介绍、roles的目录结构、roles应用案例; saltstack介绍、saltstack安装与配置、saltstack远程执行命令、grains、pillar、配置管理文件、配置管理目录、配置管理命令、配置管理计划任务、其他命令、salt-ssh使用
企业级监控平台(Zabbix/Prometheus):企业级监控任务背景、监控的目的、主流的开源监控平台、Zabbix概述、Zabbix服务器安装、Zabbix监控本机与远程主机、模板、监控项与应用集、图形、触发器、报警、Zabbix代理、主动监控与被动监控、Zabbix应用部署实战; 认识Prometheus、Prometheus原理架构图、Prometheus监控安装部署、Prometheus监控远程主机、远程MySQL、Grafana介绍、Grafana安装与登录、Prometheus结合Grafana实现Linux系统监控、CPU监控、MySQL监控等等、Grafana报警系统实践
企业级日志分析(ELK/Kafka):ELK任务背景、ELK概述、elasticsearch部署、elasticsearch基础概念、elaticsearch基础API操作、ES查询语句、elasticsearch-head、logstash简介、logstash部署、日志采集、采集messages日志、采集多日志源、kibana介绍、kibana部署、kibana汉化、通过kibana查看集群信息、通过kibana查看logstash收集的日志索引、通过kibana做可视化图形、filebeat介绍、filebeat收集日志、filebeat传输给logstash、filebeat收集nginx日志、filebeat日志过滤
CI/CD(Git、Gitlab、Jenkins):CI/CD任务背景、版本控制概念、Git安装、Git身份设置、Git创建本地仓库、Git暂存区、Git版本控制、Git分支管理、扩展:Windows版Git; Github概述、GitHub注册、创建项目、远程仓库、免密push、分支、多人协作; GitLab介绍、GitLab下载、安装与配置、GitLab配置、仓库管理、持续集成(CI)、持续交付(CD)、蓝绿部署、滚动更新、灰度发布
运维安全(SSL与CA认证/防火墙/ VPN/JumpServer与Teleport跳板机):运维安全任务背景、运维安全概述、硬盘分区加密(扩展)、对称加密、非对称加密、数字签名、SSL与CA认证、SSL介绍、CA认证介绍、https应用实践; 防火墙概述、iptables的应用、iptables防火墙结构、iptables基本语法、iptables四表五链、企业级防火墙规则设置、firewalld包过滤、firewalld与iptables的区别、firewalld防火墙规则设置、firewall-config图形模式; VPN任务背景、隧道介绍、net-to-net隧道通讯、VPN介绍、IPSec协议、libreswan实现net-to-netVPN、三网络VPN互联、roadwarrior VPN(libreswan实现点对网VPN,openvpn实现点对网vpn,使用pptpd实现VPN),PAM认证,LDAP,开源堡垒机jumpserver,轻量级开源堡垒机teleport(拓展)
学完此阶段可掌握的核心能力:
1、 具备Linux服务器架构设计能力,保证应用架构合理可控;
2、具备监控检查系统软硬件运行状态,保证系统安全稳定运行的能力;
3、具备CI/CD持续集成/持续支付能力;
4、具备配置自动化以及日志分析能力;
5、具备解决复杂问题和技术难点的能力。
学完此阶段可解决的现实问题:
1、掌握Java、PHP服务器架构能力;
2、能够独立搭建企业级高可用服务器(集群、高可用、负载均衡、缓存、存储);
3、掌握阿里云/华为云产品实战;
4、能使用Zabbix/Prometheus搭建企业级监控;
5、能够熟练掌握CI/CD持续集成/持续支付工具;
6、能够使用Ansible/SaltStack实现运维自动化;
7、能使用ELK实现企业级日志分析;
8、能够掌握常见运维安全防护手段。
学完此阶段可拥有的市场价值:熟练掌握和学习后,可满足Linux运维行业中高级需求。
KVM虚拟化:KVM任务背景、计算机工作原理、虚拟化概述与分类、KVM环境准备、KVM安装、使用KVM安装虚拟机、KVM基础管理命令、KVM配置文件、KVM克隆、KVM网络管理、快照、设备管理、存储池管理、磁盘镜像管理、虚拟机快速创建脚本
公有云运维(阿里云[ECS/RDS/SLB/CDN/OSS/NFS]):公有云任务背景、阿里云概述、VPC专有网络、阿里云安全组、云服务器ECS、自定义镜像、阿里云SLB、阿里云RDS、阿里云存储(NAS与OSS)、CDN、域名与域名解析、SSL证书、数据传输DTS、云监控、DDOS高防、容器服务、公有云企业级案例应用实践
私有云运维之OpenStack平台:私有云任务背景、OpenStack概述、OpenStack组件及其作用(Compute 计算服务、Networking 网络服务、Object Storage 对象存储、Block Storage 块存储服务、Identity 身份认证、Image Service 镜像服务、Dashboard UI页面、Metering 测量服务、Orchestration 编排部署、Database Service 云数据库)、OpenStack自动部署、OpenStack手工部署、OpenStack云平台应用实践
Docker容器技术:Docker容器技术任务背景、PAAS平台介绍、认识容器、Docker介绍、Docker内核技术(NameSpace,Control Group,LXC与docker区别)、Docker环境准备、Docker软件安装、Docker Daemon管理、镜像、容器、仓库、Docker存储驱动、Docker应用实践、Dockerfile概述、使用Dockerfile构建镜像、单宿主机容器互联方式、Docker网络、Docker的Web管理平台、Docker三剑客(Docker machine、Docker compose、Docker swarm)、Docker容器应用部署实践
Kubernetes(K8S)容器编排工具:Kubernetes(K8S)容器编排任务背景、认识容器编排、Kubernetes概述、Kubernetes架构、集群部署方式、Kubeadm部署Kubernetes集群、集群与节点信息、节点标签、namespace命名空间、工作负载(workloads)、pod概述、pod分类、pod的YAML格式、pod资源限制、pod调度、pod生命周期、pod控制器、service、ingress controller、kubernetes存储卷、ceph集群部署、ConfigMap、Secret、PV与PVC、API网关 kong、包管理方案 helm2、存储解决方案 GlusterFS、服务网格 istio、监控解决方案 heapster、应用实践 gitlab-ce、应用实践 jenkins、应用实践 kafka、应用实践 zookeeper应用实践 配置中心Apollo
综合案例:Docker+K8S企业级项目应用实践
学完此阶段可掌握的核心能力:
1、熟练掌握虚拟化技术;
2、掌握公有云与私有云架构实战;
3、熟练使用容器与容器编排工具;
4、熟练掌握企业级云计算技术应用实践。
学完此阶段可解决的现实问题:
1、能够使用KVM实现虚拟化;
2、能够掌握公有云与私有云服务器架构实战;
3、能够熟练使用Docker容器;
4、能够熟练使用Kubernetes(K8S)容器编排工具;
5、能够熟练掌握Docker+Kubernetes(K8S)项目架构设计
学完此阶段可拥有的市场价值:熟练掌握和学习后,可满足Linux云计算架构工程师的高级需求。
HTML5:HTML简介、HTML标签详解、字符编码的奥秘、HTML5新特性与常用标签
CSS3:CSS简介、CSS的引入方式、CSS基本选择器、CSS属性、盒子模型、CSS浮动、CSS3新特性与常用属性、CSS应用案例
Bootstrap:Bootstrap环境搭建、全局样式、网页排版、表单、图片及辅助类、网页布局、Bootstrap组件、CMDB后台布局实战
JavaScript/Ajax/jQuery:JavaScript简介、Javascipt语法基础、BOM模型、DOM模型、Ajax概述、Ajax中的get与post请求、Ajax案例、jQuery框架概述、jQuery选择器、jQuery事件、jQuery与Ajax、JavaScript应用实践
Python基础:Python概述、Python环境部署、变量、标识符和关键字、输入和输出、数据类型转换、条件控制语句和循环语句、容器类型、函数、文件操作
Python高级:面向对象、异常处理、模块和包、Python与MySQL应用实践
Django框架:Django框架介绍、Django模型、ORM及数据库操作、视图及模板、Django中间件
综合项目:Python+Django实现CMDB企业自动化运维平台
学完此阶段可掌握的核心能力:
1、掌握Web前端开发相关技术如HTML5/CSS3/JavaScript;
2、掌握Python运维相关模块;
3、掌握Python Django框架;
4、具备一定的Python运维开发能力。
学完此阶段可解决的现实问题:
1、具备一定的编程思维,为未来系统架构师铺路搭桥;
2、能够熟练掌握Python运维相关模块实现运维管理;
3、能够使用Python+Django开发企业自动化运维平台。
学完此阶段可拥有的市场价值:熟练掌握和学习后,可满足Linux运维行业的高级需求。
B. 要想成为Linux大神,还需具备什么能力
Linux只是一个操作系统而已,其实相对于系统,其实更重要的是运行在系统上的服务,比如apache,nginx,mysql,oracle,haproxy,tomcat等等,这些都是需要熟练掌握。同时又因为Linux是开源的,所以你需要懂开发语言,应用程序的源码包有时遇到问题,或者是定制化调整,多需要改源码,你也要懂。我遇到的一些人,他们以为懂了shell就已经可以作为一个合格的linux管理者,其实还差了不少距离。linux要对网络,架构,开发,安全多方面都有所掌握。没有捷径,建议你先从Linux基础开始学,然后往我说的上面几个方向扩展。
C. haproxy日志记录在哪
haproxy的日志需要打开才能够查看,一般haproxy会将日志输出到系统日志中。
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动,单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。
事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
包括GitHub、Bitbucket、Stack Overflow[4]、Reddit、Tumblr、Twitter[5][6]和Tuenti[7]在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。
D. 如何在Linux上使用HAProxy配置HTTP负载均衡系统
一、安装HAProxy
1、创建HAProxy运行账户和组
groupadd haproxy #添加haproxy组
useradd -g haproxy haproxy -s /bin/false #创建nginx运行账户haproxy并加入到haproxy组,不允许haproxy用户直接登录系统
2、安装编译工具
yum install gcc gcc-c++ make openssl-devel kernel-devel
3、安装HAProxy
HAProxy下载地址:http://haproxy.1wt.eu/download/1.5/src/haproxy-1.5.2.tar.gz
上传haproxy-1.5.2.tar.gz到/usr/local/src目录中
cd /usr/local/src #进入软件包存放目录
tar zxvf haproxy-1.5.2.tar.gz #解压
cd haproxy-1.5.2 #进入安装目录
make TARGET=linux26 CPU=x86_64 PREFIX=/usr/local/haprpxy #编译
make install PREFIX=/usr/local/haproxy #安装
参数说明:
TARGET=linux26 #使用uname -r查看内核,如:2.6.18-371.el5,此时该参数就为linux26
CPU=x86_64 #使用uname -r查看系统信息,如x86_64 x86_64 x86_64 GNU/Linux,此时该参数就为x86_64
PREFIX=/usr/local/haprpxy #/usr/local/haprpxy为haprpxy安装路径
4、设置HAProxy
mkdir -p /usr/local/haproxy/conf #创建配置文件目录
mkdir -p /etc/haproxy #创建配置文件目录
cp /usr/local/src/haproxy-1.5.2/examples/haproxy.cfg /usr/local/haproxy/conf/haproxy.cfg #拷贝配置模板文件
ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg #添加配置文件软连接
cp -r /usr/local/src/haproxy-1.5.2/examples/errorfiles /usr/local/haproxy/errorfiles #拷贝错误页面
ln -s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles #添加软连接
mkdir -p /usr/local/haproxy/log #创建日志文件目录
touch /usr/local/haproxy/log/haproxy.log #创建日志文件
ln -s /usr/local/haproxy/log/haproxy.log /var/log/haproxy.log #添加软连接
cp /usr/local/src/haproxy-1.5.2/examples/haproxy.init /etc/rc.d/init.d/haproxy #拷贝开机启动文件
chmod +x /etc/rc.d/init.d/haproxy #添加脚本执行权限
chkconfig haproxy on #设置开机启动
update-rc.d haproxy defaults 99 # ubuntu 设置开机启动
ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin #添加软连接
5、配置haproxy.cfg参数
cp /usr/local/haproxy/conf/haproxy.cfg /usr/local/haproxy/conf/haproxy.cfg-bak #备份
vi /usr/local/haproxy/conf/haproxy.cfg #编辑,修改
global
log 127.0.0.1 local0 notice
maxconn 2000
user haproxy
group haproxy
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
timeout connect 5000
timeout client 10000
timeout server 10000
listen appname 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
stats realm Strictly\ Private
stats auth A_Username:YourPassword
stats auth Another_User:passwd
balance roundrobin
option httpclose
option forwardfor
server lamp1 10.0.0.1:80 check
server lamp2 10.0.0.2:80 check
这里的haproxy.cfg只是一个案例,你可以根据实际情况修改
E. 如何优化mysql写入速
单机MySQL数据库的优化
一、服务器硬件对MySQL性能的影响
①磁盘寻道能力 (磁盘I/O),我们现在上的都是SAS15000转的硬盘。MySQL每秒钟都在进行大量、复杂的查询操作,对磁盘的读写量可想而知。所以,通常认为磁 盘I/O是制约MySQL性能的最大因素之一,对于日均访 问量在100万PV以上的Discuz!论坛,由于磁盘I/O的制约,MySQL的性能会非常低下!解决这一制约因素可以考虑以下几种解决方案: 使用RAID1+0磁盘阵列,注意不要尝试使用RAID-5,MySQL在RAID-5磁盘阵列上的效率不会像你期待的那样快。
②CPU 对于MySQL应用,推荐使用DELL R710,E5620 @2.40GHz(4 core)* 2 ,我现在比较喜欢DELL R710,也在用其作Linuxakg 虚拟化应用;
③物理内存对于一台使用MySQL的Database Server来说,服务器内存建议不要小于2GB,推荐使用4GB以上的物理内存,不过内存对于现在的服务器而言可以说是一个可以忽略的问题,工作中遇到高端服务器基本上内存都超过了32G。
我们工作中用得比较多的数据库服务器是HP DL580G5和DELL R710,稳定性和性能都不错;特别是DELL R710,我发现许多同行都是采用它作数据库的服务器,所以重点推荐下。
二、MySQL的线上安装我建议采取编译安装的方法,这样性能上有较大提升,服务器系统我建议用64bit的Centos5.5,源码包的编译参数会默 认以Debgu模式生成二进制代码,而Debug模式给MySQL带来的性能损失是比较大的,所以当我们编译准备安装的产品代码时,一定不要忘记使用“— without-debug”参数禁用Debug模式。而如果把—with-mysqld-ldflags和—with-client-ldflags二 个编译参数设置为—all-static的话,可以告诉编译器以静态方式编译和编译结果代码得到最高的性能。使用静态编译和使用动态编译的代码相比,性能 差距可能会达到5%至10%之多。我参考了简朝阳先生的编译参数,特列如下,供大家参考
./configure –prefix=/usr/local/mysql –without-debug –without-bench –enable-thread-safe-client –enable-assembler –enable-profiling –with-mysqld-ldflags=-all-static –with-client-ldflags=-all-static –with-charset=latin1 –with-extra-charset=utf8,gbk –with-innodb –with-csv-storage-engine –with-federated-storage-engine –with-mysqld-user=mysql –without-我是怎么了ded-server –with-server-suffix=-community –with-unix-socket-path=/usr/local/mysql/sock/mysql.sock
三、MySQL自身因素当解决了上述服务器硬件制约因素后,让我们看看MySQL自身的优化是如何操作的。对 MySQL自身的优化主要是对其配置文件my.cnf中的各项参数进行优化调整。下面介绍一些对性能影响较大的参数。
下面,根据以上硬件配置结合一份已经优化好的my.cnf进行说明:
#vim /etc/my.cnf
以下只列出my.cnf文件中[mysqld]段落中的内容,其他段落内容对MySQL运行性能影响甚微,因而姑且忽略。
[mysqld]
port = 3306
serverid = 1
socket = /tmp/mysql.sock
skip-locking
#避免MySQL的外部锁定,减少出错几率增强稳定性。
skip-name-resolve
#禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!
back_log = 384
#back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。 如果系统在一个短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的侦听队列的大小。不同的操作系统在这个队列大小上有它自 己的限制。 试图设定back_log高于你的操作系统的限制将是无效的。默认值为50。对于Linux系统推荐设置为小于512的整数。
key_buffer_size = 384M
#key_buffer_size指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。对于内存在4GB左右的服务器该参数可设置为256M或384M。注意:该参数值设置的过大反而会是服务器整体效率降低!
max_allowed_packet = 4M
thread_stack = 256K
table_cache = 614K
sort_buffer_size = 6M
#查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每连接独占,如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。所以,对于内存在4GB左右的服务器推荐设置为6-8M。
read_buffer_size = 4M
#读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。
join_buffer_size = 8M
#联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。
myisam_sort_buffer_size = 64M
table_cache = 512
thread_cache_size = 64
query_cache_size = 64M
#指定MySQL查询缓冲区的大小。可以通过在MySQL控制台观察,如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不 够 的情况;如果Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓 冲;Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多。
tmp_table_size = 256M
max_connections = 768
#指定MySQL允许的最大连接进程数。如果在访问论坛时经常出现Too Many Connections的错误提 示,则需要增大该参数值。
max_connect_errors = 1000
wait_timeout = 10
#指定一个请求的最大连接时间,对于4GB左右内存的服务器可以设置为5-10。
thread_concurrency = 8
#该参数取值为服务器逻辑CPU数量*2,在本例中,服务器有2颗物理CPU,而每颗物理CPU又支持H.T超线程,所以实际取值为4*2=8;这个目前也是双四核主流服务器配置。
skip-networking
#开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项!否则将无法正常连接!
table_cache=1024
#物理内存越大,设置就越大。默认为2402,调到512-1024最佳
innodb_additional_mem_pool_size=4M
#默认为2M
innodb_flush_log_at_trx_commit=1
#设置为0就是等到innodb_log_buffer_size列队满后再统一储存,默认为1
innodb_log_buffer_size=2M
#默认为1M
innodb_thread_concurrency=8
#你的服务器CPU有几个就设置为几,建议用默认一般为8
key_buffer_size=256M
#默认为218,调到128最佳
tmp_table_size=64M
#默认为16M,调到64-256最挂
read_buffer_size=4M
#默认为64K
read_rnd_buffer_size=16M
#默认为256K
sort_buffer_size=32M
#默认为256K
thread_cache_size=120
#默认为60
query_cache_size=32M
※值得注意的是:
很多情况需要具体情况具体分析
一、如果Key_reads太大,则应该把my.cnf中Key_buffer_size变大,保持Key_reads/Key_read_requests至少1/100以上,越小越好。
二、如果Qcache_lowmem_prunes很大,就要增加Query_cache_size的值。
很多时候我们发现,通过参数设置进行性能优化所带来的性能提升,可能并不如许多人想象的那样产生质的飞跃,除非是之前的设置存在严重不合理的情况。我们 不能将性能调优完全依托于通过DBA在数据库上线后进行的参数调整,而应该在系统设计和开发阶段就尽可能减少性能问题。
【51CTO独家特稿】如果单MySQL的优化始终还是顶不住压力时,这个时候我们就必须考虑MySQL的高可用架构(很多同学也爱说成是MySQL集群)了,目前可行的方案有:
一、MySQL Cluster
优势:可用性非常高,性能非常好。每份数据至少可在不同主机存一份拷贝,且冗余数据拷贝实时同步。但它的维护非常复杂,存在部分Bug,目前还不适合比较核心的线上系统,所以这个我不推荐。
二、DRBD磁盘网络镜像方案
优势:软件功能强大,数据可在底层快设备级别跨物理主机镜像,且可根据性能和可靠性要求配置不同级别的同步。IO操作保持顺序,可满足数据库对数据一致 性的苛刻要求。但非分布式文件系统环境无法支持镜像数据同时可见,性能和可靠性两者相互矛盾,无法适用于性能和可靠性要求都比较苛刻的环境,维护成本高于 MySQL Replication。另外,DRBD也是官方推荐的可用于MySQL高可用方案之一,所以这个大家可根据实际环境来考虑是否部署。
三、MySQL Replication
在实际应用场景中,MySQL Replication是使用最为广泛的一种提高系统扩展性的设计手段。众多的MySQL使用者通过Replication功能提升系统的扩展性后,通过 简单的增加价格低廉的硬件设备成倍 甚至成数量级地提高了原有系统的性能,是广大MySQL中低端使用者非常喜欢的功能之一,也是许多MySQL使用者选择MySQL最为重要的原因。
比较常规的MySQL Replication架构也有好几种,这里分别简单说明下
MySQL Replication架构一:常规复制架构--Master-slaves,是由一个Master复制到一个或多个Salve的架构模式,主要用于读压力大的应用数据库端廉价扩展解决方案,读写分离,Master主要负责写方面的压力。
MySQL Replication架构二:级联复制架构,即Master-Slaves-Slaves,这个也是为了防止Slaves的读压力过大,而配置一层二级 Slaves,很容易解决Master端因为附属slave太多而成为瓶劲的风险。
MySQL Replication架构三:Dual Master与级联复制结合架构,即Master-Master-Slaves,最大的好处是既可以避免主Master的写操作受到Slave集群的复制带来的影响,而且保证了主Master的单点故障。
以上就是比较常见的MySQL replication架构方案,大家可根据自己公司的具体环境来设计 ,Mysql 负载均衡可考虑用LVS或Haproxy来做,高可用HA软件我推荐Heartbeat。
MySQL Replication的不足:如果Master主机硬件故障无法恢复,则可能造成部分未传送到slave端的数据丢失。所以大家应该根据自己目前的网络 规划,选择自己合理的Mysql架构方案,跟自己的MySQL DBA和程序员多沟涌,多备份(备份我至少会做到本地和异地双备份),多测试,数据的事是最大的事,出不得半点差错,切记切记。
F. HTTP 之 HTTPD介绍
1 概述
httpd是Apache 超文本传输协议 (HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。20世纪90年代初,国家超级计算机应用中心NCSA开发,1995年开源社区发布apache(a patchy server)
2 httpd特性:
.高度模块化:core + moles
.DSO: Dynamic Shared Object动态加/卸载
.MPM:multi-processing
mole多路处理模块
3 httpd功能特性
.虚拟主机:基于IP、Port、FQDN来创建虚拟主机,可以在一台物理服务器上搭建多个网站
.CGI:Common
Gateway Interface,通用网关接口
网关解决了不同的网络或者不同的协议之间的通信,相当于是翻译的作用,这里是一个通用的概念
正向代理:为客户端访问外部网络提供服务,主要是提供了缓存,同时也可以进行用户行为控制
反向代理:起到了调度的作用,同时也可以做行为控制,nginx可以作为反向代理服务器,haproxy是专业的反向代理服务器
.负载均衡:根据用户的访问量来控制将请求分发到哪一台服务器上
.路径别名
.丰富的用户认证机制:如打开页面后弹出用户名和密码,一般不用web提供的,都是公司自己定制实现
basic
digest
.支持第三方模块
4 Httpd安装
.版本
CentOS6: 2.2
CentOS7: 2.4
.安装方式:
rpm:centos发行版,稳定,建议使用
编译:定制或特殊需求,如软件版本有漏洞,要通过源码编译安装实现,或者定制自己的特定需求功能
.CentOS 6程序环境:httpd-2.2
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
/etc/httpd/conf/httpd.conf配置了Include
conf.d/*.conf这句话,表示模块可以单独写在/etc/httpd/conf.d/这个路径下,写出独立的配置文件,也可以加载出模块这里也可以看出,如果要额外添加配置,增加功能,可以直接写在/etc/httpd/conf.d/这个路径下的模块,这样要删除也比较好删。当主配置文件和子配置文件都有相同的配置是,如果同一字段的配置有冲突,默认是以主配置文件生效的,原因是在主配置文件中include的子配置文件这句配置在配置DocmentRoot"/app/website"之前,默认是后面的配置生效,所以DocmentRoot"/app/website"这行配置比子配置优先,覆盖了前面的配置
检查配置语法:
httpd –t
service httpd configtest
5 httpd自带的工具程序
.httpd自带的工具程序
htpasswd:basic认证基于文件实现时,用到的账号密码文件生成工具
apachectl:httpd自带的服务控制脚本,支持start和stop
这个工具类似dns的rndc这个工具
apachectl这是一个脚本
apxs:httpd-devel包提供,扩展httpd使用第三方模块工具
rotatelogs:日志滚动工具
access.log -->access.log,access.1.log -->access.log, acccess.1.log, access.2.log依次增加log,最新的log放在文件access.log里,旧的log会依次备份
suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户身份运行
6 httpd的压力测试工具
.httpd的压力测试工具.ab来自httpd-tools服务包
.ab, webbench, http_load, seige
.Jmeter开源
.Loadrunner商业,有相关认证
.tcp:网易,复制生产环境中的真实请求,并将之保存
.ab [OPTIONS] URL
来自httpd-tools包
ab测试的是最大性能,所以实际情况下,可能不是最大性能在处理http请求
-n:总请求数
-c:模拟的并行数
-k:以持久连接模式测试
ulimit –n #调整能打开的并发文件数,例子ulimit -n 2048 调整为2048.ulimit -a可以查看所有参数
7 CentOS 6 httpd程序环境
.服务脚本:/etc/rc.d/init.d/httpd
脚本配置文件:/etc/sysconfig/httpd
.服务控制和启动:
chkconfighttpdon|off
service{start|stop|restart|status|configtest|reload}httpd
端口号默认是80
.站点网页文档根目录:
/var/www/html
.模块文件路径:其中/etc/httpd下的moles是软链接的关系
moles ->../../usr/lib/httpd/moles
/etc/httpd/moles
/usr/lib64/httpd/moles
CentOS 6 httpd程序环境
.主程序文件:
/usr/sbin/httpd,默认用的是httpd
/usr/sbin/httpd.worker
/usr/sbin/httpd.event
.主进程文件:
/etc/httpd/run/httpd.pid
这个是服务启动的时候才会生成,服务器停止的时候就删掉,如果已经存在同名文件,启动时候就会覆盖掉这个进程
.日志文件目录:
/var/log/httpd
access_log:访问日志
error_log:错误日志
.帮助文档包:
httpd-额外的文档包,建议要安装,否则要到官网上才能看到
yum install httpd-manual,然后要重启服务或者重新加载配置才能使用
service httpd reload然后在自己搭建的apache就可以直接访问,如 http://172.18.50.75/manual/
G. 五大常见的MySQL高可用方案(最全)
1. 概述
我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面:
如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断。
用作备份、只读副本等功能的非主节点的数据应该和主节点的数据实时或者最终保持一致。
当业务发生数据库切换时,切换前后的数据库内容应当一致,不会因为数据缺失或者数据不一致而影响业务。
关于对高可用的分级在这里我们不做详细的讨论,这里只讨论常用高可用方案的优缺点以及高可用方案的选型。
2. 高可用方案
2.1. 主从或主主半同步复制
使用双节点数据库,搭建单向或者双向的半同步复制。在5.7以后的版本中,由于lossless replication、logical多线程复制等一些列新特性的引入,使得MySQL原生半同步复制更加可靠。
常见架构如下:
通常会和proxy、keepalived等第三方软件同时使用,即可以用来监控数据库的 健康 ,又可以执行一系列管理命令。如果主库发生故障,切换到备库后仍然可以继续使用数据库。
优点:
架构比较简单,使用原生半同步复制作为数据同步的依据;
双节点,没有主机宕机后的选主问题,直接切换即可;
双节点,需求资源少,部署简单;
缺点:
完全依赖于半同步复制,如果半同步复制退化为异步复制,数据一致性无法得到保证;
需要额外考虑haproxy、keepalived的高可用机制。
2.2. 半同步复制优化
半同步复制机制是可靠的。如果半同步复制一直是生效的,那么便可以认为数据是一致的。但是由于网络波动等一些客观原因,导致半同步复制发生超时而切换为异步复制,那么这时便不能保证数据的一致性。所以尽可能的保证半同步复制,便可提高数据的一致性。
该方案同样使用双节点架构,但是在原有半同复制的基础上做了功能上的优化,使半同步复制的机制变得更加可靠。
可参考的优化方案如下:
2.2.1. 双通道复制
半同步复制由于发生超时后,复制断开,当再次建立起复制时,同时建立两条通道,其中一条半同步复制通道从当前位置开始复制,保证从机知道当前主机执行的进度。另外一条异步复制通道开始追补从机落后的数据。当异步复制通道追赶到半同步复制的起始位置时,恢复半同步复制。
2.2.2. binlog文件服务器
搭建两条半同步复制通道,其中连接文件服务器的半同步通道正常情况下不启用,当主从的半同步复制发生网络问题退化后,启动与文件服务器的半同步复制通道。当主从半同步复制恢复后,关闭与文件服务器的半同步复制通道。
优点:
双节点,需求资源少,部署简单;
架构简单,没有选主的问题,直接切换即可;
相比于原生复制,优化后的半同步复制更能保证数据的一致性。
缺点:
需要修改内核源码或者使用mysql通信协议。需要对源码有一定的了解,并能做一定程度的二次开发。
依旧依赖于半同步复制,没有从根本上解决数据一致性问题。
2.3. 高可用架构优化
将双节点数据库扩展到多节点数据库,或者多节点数据库集群。可以根据自己的需要选择一主两从、一主多从或者多主多从的集群。
由于半同步复制,存在接收到一个从机的成功应答即认为半同步复制成功的特性,所以多从半同步复制的可靠性要优于单从半同步复制的可靠性。并且多节点同时宕机的几率也要小于单节点宕机的几率,所以多节点架构在一定程度上可以认为高可用性是好于双节点架构。
但是由于数据库数量较多,所以需要数据库管理软件来保证数据库的可维护性。可以选择MMM、MHA或者各个版本的proxy等等。常见方案如下:
2.3.1. MHA+多节点集群
MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master,整个故障转移过程对应用程序完全透明。
MHA Node运行在每台MySQL服务器上,主要作用是切换时处理二进制日志,确保切换尽量少丢数据。
MHA也可以扩展到如下的多节点集群:
优点:
可以进行故障的自动检测和转移;
可扩展性较好,可以根据需要扩展MySQL的节点数量和结构;
相比于双节点的MySQL复制,三节点/多节点的MySQL发生不可用的概率更低
缺点:
至少需要三节点,相对于双节点需要更多的资源;
逻辑较为复杂,发生故障后排查问题,定位问题更加困难;
数据一致性仍然靠原生半同步复制保证,仍然存在数据不一致的风险;
可能因为网络分区发生脑裂现象;
2.3.2. zookeeper+proxy
Zookeeper使用分布式算法保证集群数据的一致性,使用zookeeper可以有效的保证proxy的高可用性,可以较好的避免网络分区现象的产生。
优点:
较好的保证了整个系统的高可用性,包括proxy、MySQL;
扩展性较好,可以扩展为大规模集群;
缺点:
数据一致性仍然依赖于原生的mysql半同步复制;
引入zk,整个系统的逻辑变得更加复杂;
2.4. 共享存储
共享存储实现了数据库服务器和存储设备的解耦,不同数据库之间的数据同步不再依赖于MySQL的原生复制功能,而是通过磁盘数据同步的手段,来保证数据的一致性。
2.4.1. SAN共享储存
SAN的概念是允许存储设备和处理器(服务器)之间建立直接的高速网络(与LAN相比)连接,通过这种连接实现数据的集中式存储。常用架构如下:
使用共享存储时,MySQL服务器能够正常挂载文件系统并操作,如果主库发生宕机,备库可以挂载相同的文件系统,保证主库和备库使用相同的数据。
优点:
两节点即可,部署简单,切换逻辑简单;
很好的保证数据的强一致性;
不会因为MySQL的逻辑错误发生数据不一致的情况;
缺点:
需要考虑共享存储的高可用;
价格昂贵;
2.4.2. DRBD磁盘复制
DRBD是一种基于软件、基于网络的块复制存储解决方案,主要用于对服务器之间的磁盘、分区、逻辑卷等进行数据镜像,当用户将数据写入本地磁盘时,还会将数据发送到网络中另一台主机的磁盘上,这样的本地主机(主节点)与远程主机(备节点)的数据就可以保证实时同步。常用架构如下:
当本地主机出现问题,远程主机上还保留着一份相同的数据,可以继续使用,保证了数据的安全。
DRBD是linux内核模块实现的快级别的同步复制技术,可以与SAN达到相同的共享存储效果。
优点:
两节点即可,部署简单,切换逻辑简单;
相比于SAN储存网络,价格低廉;
保证数据的强一致性;
缺点:
对io性能影响较大;
从库不提供读操作;
2.5. 分布式协议
分布式协议可以很好解决数据一致性问题。比较常见的方案如下:
2.5.1. MySQL cluster
MySQL cluster是官方集群的部署方案,通过使用NDB存储引擎实时备份冗余数据,实现数据库的高可用性和数据一致性。
优点:
全部使用官方组件,不依赖于第三方软件;
可以实现数据的强一致性;
缺点:
国内使用的较少;
配置较复杂,需要使用NDB储存引擎,与MySQL常规引擎存在一定差异;
至少三节点;
2.5.2. Galera
基于Galera的MySQL高可用集群, 是多主数据同步的MySQL集群解决方案,使用简单,没有单点故障,可用性高。常见架构如下:
优点:
多主写入,无延迟复制,能保证数据强一致性;
有成熟的社区,有互联网公司在大规模的使用;
自动故障转移,自动添加、剔除节点;
缺点:
需要为原生MySQL节点打wsrep补丁
只支持innodb储存引擎
至少三节点;
2.5.3. POAXS
Paxos 算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。这个算法被认为是同类算法中最有效的。Paxos与MySQL相结合可以实现在分布式的MySQL数据的强一致性。常见架构如下:
优点:
多主写入,无延迟复制,能保证数据强一致性;
有成熟理论基础;
自动故障转移,自动添加、剔除节点;
缺点:
只支持innodb储存引擎
至少三节点;
3. 总结
随着人们对数据一致性的要求不断的提高,越来越多的方法被尝试用来解决分布式数据一致性的问题,如MySQL自身的优化、MySQL集群架构的优化、Paxos、Raft、2PC算法的引入等等。
而使用分布式算法用来解决MySQL数据库数据一致性的问题的方法,也越来越被人们所接受,一系列成熟的产品如PhxSQL、MariaDB Galera Cluster、Percona XtraDB Cluster等越来越多的被大规模使用。
随着官方MySQL Group Replication的GA,使用分布式协议来解决数据一致性问题已经成为了主流的方向。期望越来越多优秀的解决方案被提出,MySQL高可用问题可以被更好的解决。