@WillireamAngel
2018-08-06T23:56:41.000000Z
字数 19419
阅读 1123
运维
一、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 repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=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: 3
server accepts handled requests
20 20 52
Reading: 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、if
regex:\ ^ $ *(>=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_execpt
passwdfile格式:
#
安装软件:httpd(htpsswd)
(10)常见QA
403产生原因: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-fpm
PHP动态语言服务端可启动多个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 epoll
freebsd kqueue
windows icop
events{
use epoll;
}
(4)调整Nginx单个进程允许的客户端最大连接数
events{
worker_connections 1024;
}
(5)配置Nginx worker进程最大打开文件数
main
worker_rlimit_nofie 65535;
vi /etc/security/limits.conf
ulimit -HSn
(6)优化服务器域名散列表的大小
【确切名】>通配符结尾>通配符开头
ngx_core_module
http: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,location
keepalive_timeout 65;保持会话请求
tcp_nodelay on; 数据发送等待,提高I/O性能,少字节场景首先
client_header_timeout 15;读取客户端请求头数据超时408
client_body_timeout 60;读取客户端请求主体的超时时间408
send_timeout 60;响应客户端的超时时间(超时,客户端无响应,关闭连接)
(9)上传文件大小的限制
http,server,location
client_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,文件644
web动态集群,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并发连接数
限制单IP
ngx_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:10m
limit_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 Apache
1. 集群
高性能、价格有效性、可伸缩性、高可用性、透明性、可管理性、可编程性
分类:负载均衡集群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、maxconn
ip_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_size
proxy_connect_timeout
proxy_send_timeout
proxy_read_timeout
proxy_buffer_size
proxy_buffers
proxy_busy_buffers_size
proxy_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 server
smtp_connect_timeout 30 #超时事件
router_id LVS_DEVEL #路由标识
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
VRRP实例定义区块:
vrrp_instance VI_1 { #主备节点实例相同
state MASTER #实例角色MASTER和BACKUP
interface eth160 #网络通信接口
virtual_router_id 51 #虚拟路由ID标识,唯一数字标识,主备一致
priority 100 #优先级,数字越大,实例优先级越高,MASTER>BACKUP+50(建议)
advert_int 1 #同步通知间隔1s
authentication { #权限认证
auth_type PASS #PASS和AH两种认证类型,推荐PASS,建议4位数字,主备一致
auth_pass 1111
}
virtual_ipaddress { #虚拟IP
192.168.200.16
192.168.200.17
192.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.conf
sysctl -p
高可用虚拟服务只针对物理服务器:
脚本检测服务是否正常运行,异常则停掉本地keepalived服务
配置keepalived:
vrrp_script chk_nginx_proxy{
script "/server/chk_nginx_proxy"
interval 2 #间隔2s
weight 2
}
多组Keepalived局域网冲突
global_defs{
router_id LVS
vrrp_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: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
show processlist\G;
生产场景部署MySQL主从复制:
mysqldump -x --master-data=1
change master to...
(1)主从冲突,临时关闭同步开关,调整同步指针:
stop slave;
set global sql_slave_skip_counter =n;#忽略n个执行更新
slave-skip-errors=1032,1062,1007
start 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 = mysql
replicate-ignore-db = mysql
MySQL HA
分类:Mysql复制和Mysql集群
数据复制。
集群和虚拟化系统。
无共享,地理复制的群集。
复制方法:
(1)ZFS
zfs 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 8192
pkill、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 11211
printf "get key1\r\n"|nc 127.0.0.1 11211
printf "delete key1\r\n"|nc 127.0.0.1 11211
操作命令语法:
<command name> <key> <flags> <exptime> <bytes>\r\n
<datablock>\r\n
<status>\r\n
command:set\add\replace\append\prepend\cas
key 小于250个字符
flags 数据格式标识
exptime 存活时间s,0为永远, 小于30天 60x60x24x30 大于30天unixtime
<bytes> 长度截取存取的字符串
memcached运行状态:
printf "stats \r\n"|nc 127.0.0.1 11212
PHP监控工具: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、Git
NFS: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虚拟化