@WillireamAngel
2018-08-06T23:56:41.000000Z
字数 19419
阅读 1248
运维
一、Web服务基础:
1. HTTP资源
MIME:多用途因特网邮件扩展(文件类型支持)
URL(统一资源定位)/URI(统一资源标识):Protocol://Host/location
静态网页:无后台数据库、不含程序、交互性差、无需过多解析的网页(固定不变)(适用于高性能和效率要求比较高的)
动态网页:数据库技术,动态程序解析,伪静态搜索引擎推广
(动态转静态提供高并发网站服务,提升用户体验)
伪静态网页:以静态页面形式呈现的动态页面,rewrite重写(仅仅改变了网页地址路径)后方便抓取,理论上降低了网站的性能。
网站流量度量术语
IP:独立IP数
PV:page view页面浏览量/点击量(网页请求次数)
UV:unique visitor一天内独立访客数,Cookie统计
并发连接:网站服务器在单位时间内能够处理的最大连接数。
并发数=每秒请求数(吞吐量)+并发浏览连接数+平均用户思考时间
QPS:每秒查询率
IOPS:每秒读写次数,衡量随机访问性能(一次T/O,多次访问存储:发送请求、写入数据、收到确认)
WWW常用软件
Apache
Nginx
Lighttpd
Tomcat
php
二、Nginx
特性:
支持高并发:可支持几w并发数,最高并发数5w? max_clients = worker_processes * worker_connections/4
资源消耗少:3w并发连接下,开启10个Nginx线程内存消耗不到200MB
HTTP反向代理及加速缓存,负载均衡,RS节点健康检查,相当于Haproxy或LVS
具备squid等专业缓存软件的缓存功能
支持异步I/O事件模型epoll
应用:
web服务软件
反向代理或负载均衡
前端业务数据缓存
nginx vs apache:
epoll vs select
http://blog.51cto.com/oldboy/1855201
1. 安装
pcre pcre-devel
rpm -qa查看软件安装状况
vi /etc/yum.repos.d/nginx.repo[nginx]name=nginx repobaseurl=http://nginx.org/packages/centos/7/$basearch/gpgcheck=0enabled=1
运行
nginx -t 检查配置文件语法
ping/telnet/wget/curl -I
nginx -s reload 重载配置
模块
(1)核心功能模块
(2)http功能模块
ngx_http_core_module 核心http参数配置
ngx_http_access_module 访问控制模块,限制/允许某些 IP
ngx_http_gzip_module 数据压缩,性能优化gzip
ngx_http_fastcgi_module FastCGI模块,和动态应用相关
ngx_http_proxy_module proxy代理模块
ngx_http_upstream_module 负载均衡模块
ngx_http_rewrite_module URL重写模块
ngx_http_limit_conn_module 限制用户并发连接数及请求数模块
ngx_http_limit_req_module 限制单个 IP 请求处理率
ngx_http_log_module 格式化日志,访问日志模块
ngx_http_auth_basic_module 用户认证 当时访问某目录设置账号和密码访问
ngx_http_memcached_module memcache模块
ngx_http_ssl_module ssl模块。用于加密的http连接
ngx_http_autoindex_module 显示目录
ngx_http_browser_module 根据 User-Agent 设置变量
ngx_http_headers_module 自定义 header 头信息
ngx_http_status_module 对各种状态信息的访问
ngx_http_stub_status_module 该模块可以提供 Nginx 基本状态信息
ngx_http_split_clients_module 适合于A/B测试(也叫做分离测试)的变量。或者当做负载均衡来使用。
配置
Main区,核心功能模块
events区,Nginx核心模块
HTTP区,http核心模块
server区块
TLS server区块
(1)虚拟主机配置:
虚拟主机类型:基于域名的虚拟主机(修改server区的server_name,注意default_server的配置),基于端口的虚拟主机(修改listen端口),基于IP的虚拟主机(listen改成ip:port)
虚拟主机IP的配置:
ip addr add 192.168.152.139/24 dev ens33
(2)规范优化nginx配置文件
#导入子配置文件include file | mask;
对于多虚拟主机服务器配置,推荐使用导入配置文件与主文件分离
(3)nginx虚拟主机别名配置
可用于判断多节点单域名网站主机运行状况
server_name servername othername
(4)状态信息功能
#查看已安装模块nginx -v
server location 配置:
server{listen 80;server_name status.fanfanfan.com;location / {stub_status on;access_log off;}}
状态显示:
server:处理了xx个连接;accepts:创建了了xx次握手;handled requests:总共处理请求数。
Reading:读取客户端Header信息数;Writing:nginx返回客户端的Header信息数;Waiting:已处理完等候下一次请求的驻留连接(开启keep-alive,active-reading-writing)。
Active connections: 3server accepts handled requests20 20 52Reading: 0 Writing: 1 Waiting: 2
(5)增加错误日志(ngx_core_module)
error_log
格式:
error_log file level
level主要包括:debug、info、notice、warn、error、crit、alert、emerg
(6)访问日志
ngx_http_log_module模块,放置在http、server、location、limit_execpt、if in location中。
主配置:
log_format name sting...;'$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';
客户端地址-远程客户端用户名(无用“-”填充)和时间-请求行-http状态码-响应body字节数-请求访问链接-客户端信息-代理服务器web节点记录客户端地址
192.168.152.1 - - [26/Jul/2018:21:43:18 -0400] "GET /poweredby.png HTTP/1.1" 404 571 "http://fanfanfan.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3486.0 Safari/537.36" "-"
access_log path [format [buffer=size [flush=time]] [if=condition];
nginx日志分析工具:rsyslog、awstats、flume、ELK、storm、Ngxtop(7)location根据用户请求URL执行不同的应用
location [ = | ~ | ~* | ^~ ] uri {
...
}
精确匹配>正则匹配>常规匹配>默认匹配(8)rewrite通过PCRE软件,支持perl兼容正则语法。rewrite regex replacement [flag]应用位置:server、location、ifregex:\ ^ $ *(>=0)+(>=1) ?(0/1).(1除\n)(pattern)flag:last(本条匹配后继续向下匹配)、break(本条匹配完成即终止)、redirect(302临时重定向)、permanent(301临时重定向)alias使用last、proxy_pass使用break(9)nginx访问认证
location /{
auth_basic string|off;
auth_basic_user_file filepath;
}
应用位置:http、server、location、limit_execptpasswdfile格式:
#
安装软件:httpd(htpsswd)(10)常见QA403产生原因:index配置异常(autoindex on;),丢失index首页,站点目录nginx用户无访问权限,allow/deny访问控制;三、LNMP/LAMP环境配置mysql:drop user "ftpuser"@localhost;delete from mysql.user where user=" " and host=" ";flush privileges;fastcgi vs CGI:CGI:为HTTP服务器与其他机器上的程序通信交流的一种工具,CGI程序必须运行在网络服务器上。性能较差,动态程序解析重新启动解析器。FastCGI:可伸缩地、高速地在HTTP服务器和动态脚本语言间通信的接口(Linux上为socket),主要优点是把动态语言和HTTP服务分离开来(HTTP服务器和动态脚本服务器)。FastCGI特点:动态语言和HTTP服务服务器通信的接口和工具;把动态语言和HTTP服务分离开来;服务和语言支持;FastCGI接口C/S结构,分为客户端(HTTP)和服务端(动态语言),如Nginx fastcgi_pass和php-fpmPHP动态语言服务端可启动多个FastCGI守护进程(php-fpm)nginx fastcgi:nginx-->socket()--FastCGI-->wrapper-->新线程,调用解释器/外部程序处理脚本来读取返回的数据-->返回的数据逆向传递给Nginx-->nginx返回数据给客户端。php编译
./configure \
--prefix=/usr/local/php \
--with-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-safe-mode \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--with-curlwrappers \
--enable-mbregex \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--enable-short-tags \
--enable-zend-multibyte \
--enable-static \
--with-xsl \
--enable-ftp
四、nginx web服务优化1. 基本安全优化隐藏web软件版本号:server_tokens off;设置在http/server/location更改源码隐藏nginx及版本:/src/core/nginx.h,/src/http/ngx_http_header_filter_module.c,/src/http/ngx_http_header_special_response.c更改nginx的默认账户:2. 参数优化(1)优化worker进程个数:worker_processes 1/auto;worker进程最开始可以等于CPU核数(/proc/cpuinfo),高流量并发为CPU核数*2,与存储、系统负载等有关。top按1显示多核Nginx master 管理nginx worker进程(2)绑定不同的nginx进程到不同的CPU上worker_cpu_affinity 01 10;umask压力测试:webbench(3)Nginx事件处理模型linux epollfreebsd kqueuewindows icop
events{
use epoll;
}
(4)调整Nginx单个进程允许的客户端最大连接数
events{
worker_connections 1024;
}
(5)配置Nginx worker进程最大打开文件数mainworker_rlimit_nofie 65535;vi /etc/security/limits.conf
ulimit -HSn
(6)优化服务器域名散列表的大小【确切名】>通配符结尾>通配符开头ngx_core_modulehttp:server_names_hash_max_size 512 域名最大散列表大小http:server_names_hash_bucket_size 128 最大散列表的存储桶大小(7)开启高效文件传输模式sendfile on;(内核中文件描述符数据拷贝)tcp_nopush on;(header和文件头防置一起发布,减少网络报文段数目)tcp_nodelay on; I/O性能文件高效传输,防止网络及磁盘I/O阻塞(8)优化Nginx连接参数,调整连接超时时间http,server,locationkeepalive_timeout 65;保持会话请求tcp_nodelay on; 数据发送等待,提高I/O性能,少字节场景首先client_header_timeout 15;读取客户端请求头数据超时408client_body_timeout 60;读取客户端请求主体的超时时间408send_timeout 60;响应客户端的超时时间(超时,客户端无响应,关闭连接)(9)上传文件大小的限制http,server,locationclient_max_body_size 8m;上传文件大小(Content-Length检测,413错误)(10)FastCGI相关参数调优fastcgi_index index.php用户读取cache缓冲区:fastcgi_cache cachename;fastcgi_cache_valid 200 1d;服务器写入buffer缓冲区:fastcgi_read_timeout 240;fastcgi_buffer_size 64k;fastcgi_buffers 4 64k;fastcgi_busy_buffers_size 128k;(11)配置gzip压缩实现性能优化提升用户体验,节约网站带宽成本压缩原则:纯文本内容压缩比很高;被压缩纯文本必须大于1KB;图片、视频等文件尽量不压缩。过程:浏览器---请求----> 声明可以接受 gzip压缩 或 deflate压缩 或compress 或 sdch压缩从http协议的角度看--请求头 声明 acceopt-encoding: gzip deflate sdch (是指压缩算法,其中sdch是google倡导的一种压缩方式,目前支持的服务器尚不多)服务器-->回应---把内容用gzip方式压缩---->发给浏览器浏览<-----解码gzip-----接收gzip压缩内容----ngx_http_gzip_module模块
gzip on|off; #是否开启gzip
gzip_buffers 32 4K| 16 8K #缓冲(压缩在内存中缓冲几块? 每块多大?)
gzip_comp_level [1-9] #推荐6 压缩级别(级别越高,压的越小,越浪费CPU计算资源)
gzip_disable #正则匹配UA 什么样的Uri不进行gzip
gzip_min_length 200 # 开始压缩的最小长度(再小就不要压缩了,意义不在)
gzip_http_version 1.0|1.1 # 开始压缩的http协议版本(可以不设置,目前几乎全是1.1协议)
gzip_proxied # 设置请求者代理服务器,该如何缓存内容
gzip_types text/plain application/xml # 对哪些类型的文件用压缩 如txt,xml,html ,css
gzip_vary on|off # 是否传输gzip压缩标志
(12)配置expires缓存实现性能优化网站内容过期时间,控制HTTP“Expires”和“Cache-Control”响应头部“max-age”内容location /{expires 30d;}经常变更的图片文件等缩短对象缓存时间,网站改版缓存对象改名3. 日志相关优化(1)access日志轮询日志切割(2)不记录不需要的访问日志。access_log off;(3)访问日志的权限设置不需要给nginx用户读写权限。4. 站点目录/URL访问控制(1)根据扩展名限制程序和文件访问deny all;返回状态码:location /admin/ {return 404;}(2)禁止访问指定目录下的所有文件和目录(3)限制网站来源IP访问allow IP;deny IP;deny all;if ( $remote_addr = IP ){return 403;}限制条件从上到下(4)配置Nginx,禁止非法域名解析访问企业网站rewrite Rge URL permanent;```if ($host !~ ^www/.baidu/.com$){rewrite ^(.*) http://www.baidu.com/$1 permanent;}<div class="md-section-divider"></div>
location ... {valid_referers none blocked server_names ....if ($invalid_referer){rewrite ^/ ....return 403;}}NginxHttpAccessKeyModule防盗链ngx_http_accesskey_module模块6. 错误页面显示(1)生产环境常用的HTTP状态码200 301 403 404 500 502 503 504(2)为什么要配置错误页面优雅显示server{location / {error_page 404 /404.html;}}location / {error_page 404 = @fallback;}location @fallback {proxy_pass http://backend;}7. 站点文件及目录权限优化目录755,文件644web动态集群,static图片集群,upload上传集群8. 防爬虫优化rebots.txt机器人协议$http_user_agent匹配爬虫限制返回9. Nginx限制HTTP请求if ($request_method !~ ^(GET|HEAD|POST)$){return 501;}10. CDN网站加速智能DNS负载均衡,分布式内存缓存集群,加速访问降低源站带宽。架设网站省钱、提升用户访问体验(相同路线,相同地域,内存访问)、可以阻挡大部分流量攻击加速业务,独立域名,静态网站域名加速11. Nginx程序架构优化解耦:业务服务分离网页页面服务、上传服务、下载服务12. 普通用户启动监牢模式降低权限,方便使用user user group;按用户设置站点,责任划分。13. 控制Nginx并发连接数限制单IPngx_http_limit_conn_module限制每个key值连接数设定共享内存区域:limit_conn_zone key zone=name:size;指定key最大连接数:limit_conn name number;(超过503 error)限制虚拟主机总连接数:limit_conn_zone $server_name zone=perserver:10mlimit_conn perserver 2;14. 控制客户端请求Nginx的速率ngx_http_limit_req_module模块限制每个IP访问的请求速率limit_req_zone key zone=name:size rate=rate;limit_req zone=name [burst=number][nodelay];五、Nginx反向代理与负载均衡 vs Apache1. 集群高性能、价格有效性、可伸缩性、高可用性、透明性、可管理性、可编程性分类:负载均衡集群LB、高可用集群HAC、高性能计算集群HPC、网格计算集群软件:Nginx、LVS、Haproxy、Keepalived、Heartbeat硬件:F5、Radware、Netscaler技术选型:Nginx负载均衡高可用:Nginx+Keepalived负载均衡产品:LVS+Keepalived前端四层转发、Nginx/Haproxy七层转发数据库与存储负载均衡:LVS(TCP转发、DR模式)+Heartbeat(drbd)2. Nginx负载均衡集群环境与核心组件负载均衡与反向代理:负载均衡是转发用户请求的数据包,反向代理是接收用户的请求后重新发起请求去请求后面的节点。组件:ngx_http_proxy_module(请求抛给服务器节点或服务器池)、ngx_http_upstream_module(负载均衡,健康检查)<div class="md-section-divider"></div>
http{
...
upstream www_server_pools{
server 10.86.1.202:80 weight=1 max_fails=1 fail_timeout=10s;
server 10.86.1.203:80 weight=1 max_fails=1 fail_timeout=10s backup;
}
server{
listen 80;
server_name www.willireamangel.com;
location / {
proxy_pass http://www_server_pools;
}
}
server标签:weight、check、inter、rise、fall、maxconnip_hash配合down参数静态调度算法:rr轮询,wrr权重轮询(weight=1),ip_hash(pools{ip_hash},不能有weight和backup)动态调度算法:fair(upstream_fair模块,响应时间分配请求、pools{..fair;})、least_conn(后端节点连接数分配请求)、url_hash(hash模块,访问URL的hash分配结果,pools{... hash $request_uri;hash_method crc32;})、一致性hash(后端缓存业务、pools{consistent_hash $request_uri;})组件:http proxy模块proxy_set_header Host $host 保留请求目标地址proxy_set_header X-Forwarded-For $remote_addr;保留原请求地址"$http_x_forwarded_for"proxy_body_buffer_sizeproxy_connect_timeoutproxy_send_timeoutproxy_read_timeoutproxy_buffer_sizeproxy_buffersproxy_busy_buffers_sizeproxy_temp_file_write_size根据url作负载均衡:设置几个pool,根据不同location对应不同proxy池转发根据客户端请求转发:$http_user_agent根据扩展名转发$request_uri ~*3. Nginx负载均衡检测节点状态nginx_upstream_check_module模块<div class="md-section-divider"></div>
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
proxy_next_upstream 请求传递到下一个服务器<div class="md-section-divider"></div>
Syntax: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | non_idempotent | off ...;
Default: proxy_next_upstream error timeout;
Context: http, server, location
七、Keepalived、LVS、HAproxy高可用集群Keepalived(1)简介VRRP虚拟路由冗余协议配置管理健康检查LVS,作为Nginx、Haproxy、MySQL等服务高可用解决方案。主要功能:管理LVS负载均衡软件实现对LVS集群节点健康检查功能healthcheck作为系统网络服务的高可用功能failover:Master--Backup热备Keepalived工作原理:keepalived是以VRRP协议通信为实现基础的。VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。VRRP时通过一种竞选协议机制来将路由任务交给某台VRRP路由器的。VRRP用IP多播的方式(默认244.0.0.18)实现高可用对之间通信。工作时主节点发包,备节点收包,当备节点接收不到主节点数据包的时候,就启动接管程序接管主节点的资源。备节点可以有多个,通过优先级竞选,但一般keepalived系统运维工作中都是一对。VRRP使用了加密协议加密数据,但目前keepalived官方还是推荐用明文的方式配置认证类型和密码。keepalived高可用对之间是通过VRRP通信的,VRRP是通过竞选机制来确定主备的。主优先级高于备,因为工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。在keepalived服务对之间,只有作为主的服务器会一直发送VRRP广播包,告诉备它还活着,此时备不会抢占主。当备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性,接管速度最快可以小于1s。keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。(2)高可用服务搭建配置:man keepalived.conf全局定义部分:global_defs{notification_emial{#报警邮件}notification_email_from #发件人地址smtp_server 192.168.200.1 #发送邮件的smtp serversmtp_connect_timeout 30 #超时事件router_id LVS_DEVEL #路由标识vrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0}VRRP实例定义区块:vrrp_instance VI_1 { #主备节点实例相同state MASTER #实例角色MASTER和BACKUPinterface eth160 #网络通信接口virtual_router_id 51 #虚拟路由ID标识,唯一数字标识,主备一致priority 100 #优先级,数字越大,实例优先级越高,MASTER>BACKUP+50(建议)advert_int 1 #同步通知间隔1sauthentication { #权限认证auth_type PASS #PASS和AH两种认证类型,推荐PASS,建议4位数字,主备一致auth_pass 1111}virtual_ipaddress { #虚拟IP192.168.200.16192.168.200.17192.168.200.18}}主要区别:router_id、state、priority(3)脑裂问题脑裂:两台高可用服务器对在指定时间内,无法检测到对方的心跳消息,各自取得资源及服务的所有权,导致冲突,VIP两机同占,数据不一致,这种的情况脑裂。脑裂原因:心跳线链路故障,无法通信:心跳线断了,网卡/ip/驱动等异常,心跳线间连接交换机故障,仲裁机器故障高可用服务开启防火墙阻挡心跳消息传输。高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败。其它服务配置不当:心跳方式不同,心跳广播冲突,软件Bug,virtual_router_id不一致。解决脑裂:多心跳线路,检测到脑裂强行关闭一个心跳节点(Stonith、fence)、脑裂监控人工仲裁解决keepalived脑裂:冗余心跳线路;开发监测程序/软件;监测脑裂:备节点出现VIP,主节点及对应服务存活,说明脑裂。(4)双实例双主模式listen指定IP监控(5)故障网卡IP故障:net.ipv4.ip_nonlocal_bind = 1 忽略监听的IP是否存在,避免Nginx/Haproxy异常echo .. >> /etc/sysctl.confsysctl -p高可用虚拟服务只针对物理服务器:脚本检测服务是否正常运行,异常则停掉本地keepalived服务配置keepalived:vrrp_script chk_nginx_proxy{script "/server/chk_nginx_proxy"interval 2 #间隔2sweight 2}多组Keepalived局域网冲突global_defs{router_id LVSvrrp_mcast_group4 244.0.0.19 #指定多播地址IGMP}配置指定文件接收服务日志<div class="md-section-divider"></div>
cat /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -d -S 0"
<div class="md-section-divider"></div>
cat /etc/rsyslog.conf
local0.* /var/log/keepalived.log
开发检测脑裂脚本六、Mysql主从复制、Mysql HA多实例:mysqld_muti --config-file=/data/mysql/my_muti.cnf start 1,2启动实例:mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 > /dev/null停止实例:mysqladmin -u root --password= -S /data/3306/mysql.sock shutdown为多实例mysql设置登录密码:mysqladmin -u root -S /data/3306/mysql.sock password 'oldboy123'mysql主从复制:异步复制应用场景:从服务器作为主服务器的实时数据备份,主从服务器读写分离、从服务器负载均衡,多个从服务器根据业务需求拆分访问读写分离方案:程序实现、开源软件实现(MySQL-proxy、Amoeba)、大型门户独立开发DAL层综合软件主从复制原理:SQL线程(Slave端)和I/O线程(Master端)主从复制是异步的逻辑的SQL语句级的复制;复制时,主库有一个I/O线程,从库有两个线程,I/O和SQL线程;实现主从复制的必要条件是主库要开启记录binlog;实现主从复制的所有MySQL节点的server-id不相同;binlog文件只记录对数据库有更改的SQL语句,不记录任何查询。过程【画图】:从库生成两个线程,一个I/O线程,一个SQL线程;i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致。配置:<div class="md-section-divider"></div>
server-id=1
log-bin=mysql-bin
<div class="md-section-divider"></div>
grant replication slave on . to 'hope'@'10.86.1.%' identified by '*hope8848';
flush privileges;
flush table with read lock; unlock tables; 导出数据表时锁表,位置点不变则正常
show master status;
server-id=2<div class="md-section-divider"></div>
mysql -u root -p <
CHANGE MASTER TO
MASTER_HOST='10.86.1.202',
MASTER_PORT=3306,
MASTER_USER='hope',
MASTER_PASSWORD='*hope8848',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=597;
EOF
start slave;show slave status\G;(\g分号,\G纵向显示)Slave_IO_Running: YesSlave_SQL_Running: YesSeconds_Behind_Master: 0show processlist\G;生产场景部署MySQL主从复制:mysqldump -x --master-data=1change master to...(1)主从冲突,临时关闭同步开关,调整同步指针:stop slave;set global sql_slave_skip_counter =n;#忽略n个执行更新slave-skip-errors=1032,1062,1007start slave;(2)mysql从库记录binlog日志log-slave-updates(3)主从复制集群备份策略从库binlog做数据备份stop slave sql_thread(4)MySQL主从复制延迟问题的原因及解决方案从库太多,复制延迟,从库3~5个;从库硬件比主库差;慢SQL语句过多;(查看慢查询日志,show full peocesslist;)主从复制的设计问题;多线程复制主从库网络延迟;主库读写压力大,导致复制延迟;(5)read-only让从库只读访问(6)Mysql主从复制读写分离集群授权REVOKE收回权限忽略授权库同步:binlog-ignore-db = mysqlreplicate-ignore-db = mysqlMySQL HA分类:Mysql复制和Mysql集群数据复制。集群和虚拟化系统。无共享,地理复制的群集。复制方法:(1)ZFSzfs snapshot scratchpool@snap1使用InnoDB表和常规同步计划可降低重大数据丢失的风险。在MyISAM表上,您可能需要运行 REPAIR TABLE,甚至可能丢失了一些信息。(2)Memcached运行原理:通过在事先规划好的系统内存空间中临时缓存数据库中的各种数据,以达到减少前端业务服务对数据库的直接高并发访问,从而提高动态web的速度,提高网站架构的并发能力和可扩展性。常见内存缓存软件:Memcached:纯内存型,缓存网站后端用户重复请求的动态内容;Redis、Memcachedb:可持久化存储(内存+磁盘),缓存后端数据库的查询数据,作为关系数据库的重要补充Squid、Nginx:内存或内存加磁盘缓存,主要缓存web前端的服务内容。主要用于静态内容缓存。应用场景:数据库的查询数据缓存:完整数据缓存(数据预热)、热点数据缓存、集群节点的session会话共享存储特点:高并发、高性能协议简单,支持telnet/nc操作数据服务支持epoll/eqqueue等异步I/O模型,使用libevent作为事件处理通知机制key-value键值存储全内存缓存,效率高可支持分布式集群工作原理:守护进程监听本地的IP、端口、并发访问链接以及分配内存Socket事件处理机制:IP+端口链接memcached服务通信数据存储机制:key/value保存在预分配的内存区中内存管理机制:slab内存分配、LRU对象清除机制、hash机制快速检索item多线程处理机制:./configure--enable-threads 采用pthread线程模式(POSIX),负载过重开启多线程(-t 线程数为内核数)MemCached预热:前端控制流量访问,重启数据预热,数据都预热后逐步放开前端网站入口流量开启网站集群服务器:从后端往前端开,memcached预热Memcached内存管理:malloc:动态内存分配,存在内存碎片Slab Allocation内存管理:chunks slab class<--chunks同一slab class特定大小(内存不释放,重复利用),保留slab空闲chunk列表优点与缺点:优:提前分配大内存Slab 1M,再进行小对象填充chunk;避免大量重复的初始化和清理,减轻内存管理负担;避免频繁malloc/free内存分配导致的碎片缺:chunk存储item浪费空间,预先计算应用存入的数据大小,-f 1.25(控制内存组之间的大小差异);Slab尾部剩余空间,规划slab大小=chunk大小xn整倍数Growth Factor对Slab Allocator内存管理机制调优Memcached检测过期与删除机制:Memcached懒惰检测对象过期机制:不主动检测,在get时检测item对象是否过期memcached懒惰删除对象机制:删除不释放内存空间,删除标记,slot回收插槽,LRU最近最少算法删除(取消LRU,用-M)启动memcached:memcached -m 16m -p 11212 -d -u root -c 8192pkill、killall memacached进程与连接:-d 守护进程启动-u 指定用户-l 指定监听的IP地址-p 监听TCP端口-P 设置PID文件,保存PID到指定文件内存相关:-m 缓存数据的最大内存-M 内存不够时禁止LRU,内存满了会报错命令参数:-n key+value+flags分配的最小内存空间-f chunk size增长因子-L 启用大内存页,可降低内存消耗,改进性能并发连接设置:-c 最大并发连接数-t 线程数NIO-R 每个event最大请求数-C 禁止CAS版本技术,减少开销调试参数:-v 打印较少的errors/warning-vv 打印非常多的调试信息和错误输出到控制台-vvv 打印极多的调试信息和错误输出写入数据:telnet和nc可以直接连接printf "set key1 0 0 6\r\noldboy\r\n"|nc 127.0.0.1 11211printf "get key1\r\n"|nc 127.0.0.1 11211printf "delete key1\r\n"|nc 127.0.0.1 11211操作命令语法:<command name> <key> <flags> <exptime> <bytes>\r\n<datablock>\r\n<status>\r\ncommand:set\add\replace\append\prepend\caskey 小于250个字符flags 数据格式标识exptime 存活时间s,0为永远, 小于30天 60x60x24x30 大于30天unixtime<bytes> 长度截取存取的字符串memcached运行状态:printf "stats \r\n"|nc 127.0.0.1 11212PHP监控工具:memadmin应用优化:提高访问命中率,提高内存利用率(-f,slab整数倍,一致性哈希分布式集群架构)一致性hash最大限度地减少键的重新分布session共享:优:读写快、解决多服务器共享session问题缺:持久化问题(redis、TokyoTyrant)、多台无法同步(高性能高并发cookies解决会话问题)九、Nagios、Zabbix监控监控数据:系统本地资源:负载、CPU、磁盘、内存、I/O、RAID、CPU温度、passwd文件变化、本地文件变更网络服务:端口、web、DB、ping包、进程 、IDC带宽网络其他设备:路由器、交换机(端口、光衰、日志)、打印机、windows业务数据:用后登录次数、输入验证码次数、某个API的流量、网络连接数、IP、PV数、电商网站订单交易数Nginx监控平台<--Linux命令可获取数据程序族:主程序Nagios、插件程序Nagios-plugins和一些附加程序(NRPE/NSClient++/NSCA/NDOUtils)NRPE定时获取信息主动模式(httpd、sshd、mysqld、rsyncd)和被动模式(NRPE,负载、内存、硬盘、虚拟内存、磁盘I/O,温度、风扇等)zabbix主动被动:主动:client请求items,收集相关信息,提交信息被动:sever被动请求检测,agent接收请求并处理http://www.ttlsa.com/zabbix/zabbix-active-and-passive-checks/nagios主动被动:主动:主动模式不需要调用客户端的插件,而是通过自己的插件主动去探测客户端的相关信息。被动:客户端起nrpe进程,服务端通过check_nrpe插件向客户端发送命令,客户端根据服务端的指示来调用相应的插件,插件可以获取到本机的相关信息,并把获取到的结果发送给服务端。因为需要调用客户端的插件去等带客户端返回的信息,所以叫做被动模式。十、DNS、DHCP、SAMBA、NFS、iscsi、Mail、GitNFS:Network File System 网络文件系统RPC协议/服务:rpcbind服务软件:nfs-utils和rpcbind先启动rpcbind再启动nfs启动服务:NFS quotas(rpc.rquotad),NFS daemon(nfsd)管理客户端登录,NFS mounted(rpc.mountd)管理NFS文件系统配置: cat /etc/exports<div class="md-section-divider"></div>
# sample /etc/exports file
/ master(rw) trusty(rw,no_root_squash)
/projects proj*.local.domain(rw)
/usr *.local.domain(ro) @trusted(rw)
/home/joe pc001(rw,all_squash,anonuid=150,anongid=100)
/pub *(ro,insecure,all_squash)
/srv/www -sync,rw server @trusted @external(ro)
/foo 2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)
/build buildhost[0-9].local.domain(rw)
```
rw读写
ro只读
sync同步写入,数据安全,性能差些
async先写到内存缓冲区再写入硬盘
all_squash 所有权限均被压缩成匿名用户
anonuid nfsnobody UID
anongid nfsnobody GID
应用配置:
exportfs -rv
cat /var/lib/nfs/etab
查看挂载
showmount -e localhost
cat /var/lib/nfs/rmtab
多客户端权限:
/etc/exports 开放权限
NFS目录可写权限
客户端与服务端均有UID相同nfsnobody用户
开机自动挂载:
挂载命令写入/etc/rc.local
避免写入/etc/fstab:磁盘优先于网络加载
grep mnt /proc/mounts
10.86.1.201:/data /mnt nfs4 rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.86.1.202,local_lock=none,addr=10.86.1.201 0 0
fg/bg前台、后台运行
soft/hard 一直尝试,异常无法操作hard
intr hard异常后中断
rsize/wsize读写区块大小bytes
proto=udp/tcp
mount -t nfs -o fg,hard...
性能优化:rw、noatime不更新文件inode时间戳、nodiratime不更新文件系统上的inode时间戳、remount重新挂载
安全优化:noexec不允许执行二进制程序,nosuid不允许set-user-identifier or set-group-identifier位生效,dirsync目录更新时同步写入磁盘
内核优化:
/proc/sys/net/core/rmem_default接收套接字缓冲区大小124928
/proc/sys/net/core/rmem_max接收最大值124928
/proc/sys/net/core/wmem_default发送缓冲区大小124928
/proc/sys/net/core/wmem_max发送缓冲区最大值124928
NFS优缺点:
简单、易上手、数据可视、部署维护简单】可靠稳定;
单点故障、NFS效率性能有限、认证基于IP安全性一般、明文传输无验证完整性、多机维护麻烦(耦合度高)
showmount -e(目录列表) -d(共享目录) -a(IP和目录)
exportfs -rv重载配置
rpcinfo -p -b -d
十一、ansible、puppet
十二、shell、python、Git
十三、KVM、Docker、VMware虚拟化