通过命令查看服务器上一共开了多少的php-fpm进程数
ps -fe |grep "php-fpm"|grep "pool"|wc -l
显示文件的倒数100行
tail -100 /usr/local/php/var/log/php-fpm.log
一、配置网卡
0) 桥接模式
1) vi /etc/sysconfig/network-scripts/ifcfg-eth0 【配置网卡】
===================================================================================================
DEVICE=eth0 (网卡名称)
HWADDR=00:0C:29:99:43:81 (mac地址)
TYPE=Ethernet (以太网)
ONBOOT=yes 手动配置(网卡开机自启动)
BOOTPROTO=static 手动配置(ip获取方式:static静态ip, dhcp动态ip(那就不需要设置ip地址等信息))
IPADDR=192.168.199.111 手动配置(ip地址)
NETMASK=255.255.255.0 手动配置(子网掩码)
GATEWAY=192.168.199.1 手动配置(网关一定要正确,否则无法出网,电脑网关==路由ip地址)
DNS1=114.114.114.114 手动配置(DNS)
===================================================================================================
2) /etc/init.d/network restart 重启网卡
3) ping baidu.com 查看是否联网
只有在eth0网卡上配置了ip地址,才能通过电脑利用ssh2协议远程连接服务器,当然服务器肯定提供了ssh服务,
只有服务器提供了ssh软件服务,我们才能通过xshell等工具去通过ssh2协议访问服务器是22端口,从而连接上服务器
配置临时网关
route -n (查看路由,最后一条即是最重要的一条,生效的一条网关路由)
route del default gw 192.168.199.1
route add default gw 192.168.199.1
第一生效网关文件:grep -i gate /etc/sysconfig/network-scripts/ifcfg-eth0
第二生效网关文件:grep -i gate /etc/sysconfig/network
DNS域名解析
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/resolv.conf
dig www.baidu.com 查看域名解析到哪个地址
nslookup 查看域名解析到哪个地址
网络排错
ping www.baidu.com
跟踪路由
tracert -d www.baidu.com windows
traceroute www.baidu.com linux
telnet
nmap
抓包工具
tcpdump
本地电脑
ssh客户端: xshell、SecureCRT、putty
远程服务器
ssh服务(监听ip对应的22端口,计算机的端口是用来区别一台计算机的不同的软件服务),长期运行, 0 - 65535个端口
远程连接失败的原因:
1. 服务器防火墙iptables (解决方案:可以采用/etc/init.d/iptables stop来停止防火墙)
2. SSH服务有问题,服务没有开启或者端口不对
3. 客户端到服务器的线路有问题 (解决方案:ping 192.168.199.112 看是否可以ping通,不通的话需要我们去解决线路问题)
上传下载文件
最简单方法:xshell -> 设置 -> 文件传输 -> 上传下载目录,然后进入服务器 sz -y 111.txt rz -y (-y覆盖原来的文件)(-y 下载多个文件)
这两条命令包含在包 Dial-up Networking Support安装包中,在自定义安装包的时候需要选择此包,
yum install lrzsz -y、yum groupinstall 'Dial-up Networking Support' -y此两条命令均可安装此包
FTP 、SFTP(WinSCPPortable软件,走的是SSH协议)
vi命令
echo 123 > index.html 覆盖添加
echo 123 >> index.html 追加添加
cat >>index.html<<EOF 将EOF标识中的1 2 3 4都追加如index.html中
1
2
3
4
EOF
命令模式
:wq 保存退出
:wq! 强制保存退出
:q 退出
:q! 强制退出
g+g 文件首行
shift+g 文件末行
shift+^ 行首 home
shift+$ 行末 end shift+a 并且可以从命令模式切换到编辑模式
:set nu 显示行号
u 撤销
d+d 删除一行
/ 字符 向下搜索 /+字符 n向下继续 shift+n向上继续
? 字符 向上搜索
编辑模式
ctrl+u 撤销
自由模式
命令模式下按住v可进入
yy 复制当前一行
p 粘贴
复制
cp 拷贝文件
cp -a 拷贝目录
查看当前命令的全称
man rm、mkdir、touch、mv
删除
rm -f 123.txt 强制删除文件
rm -fr home 强制删除文件、目录
在文件内部查找
grep -v 4 index.html 排除文件中的4,显示其他的
grep 4 index.html 查询文件中的4,显示出来
head -2 index.html 显示文件的头2行,默认10行
tail -2 index.html 显示文件的尾2行,默认10行
创建
mkdir -p /a/b/c/d 递归循环创建
tree a 查看a的目录结构 (yum install tree -y) (LANG=en 临时调整界面的字符集,然后在tree a)
tree -L 1 / 显示根目录下的第一层目录
mkdir /home/test/web -p 递归创建目录
查找命令的位置
which cp 查看cp命令所在位置 结果是/bin/cp 那么我们就可以使用/bin/cp index.html来复制文件了
查找文件
find / -type f -name 'index.html' 在根目录下查找类型为文件,名字为index.html的
find / -type f -name 'index.html' | xargs rm -f 查到后删除
find / -type f -mtime +5 在根目录下查找5天以前改过的文件
比较文件不同:
diff 1.txt 2.txt
vimdiff 1.txt 2.txt
监控一个文件不停的变化:
tail -f /tmp/miao.log
授权755权限
chmod -R 755 /home
修改属主 + 用户组
chown -R root:root /home
仅授权用户组
chown -R :www /home
仅授权用户
chown -R root /home
查看文件大小
du -sh /home
查找文件的倒数几行
tail -n 20 index.sh
二、磁盘管理
磁盘分区有:主分区、扩展分区、逻辑分区,一块硬盘最多有4块分区
ll /dev/sd*
sda / hda 系统第一块SCSI(IDE)接口硬盘的名称
sda1 / hda1 系统第一块SCSI(IDE)接口硬盘的第1分区
sda2 / hda2 系统第一块SCSI(IDE)接口硬盘的第2分区
sda3 / hda3 系统第一块SCSI(IDE)接口硬盘的第3分区
常规分区:
/boot 100M - 200M
swap 物理内存的1.5倍
/ 剩余硬盘大小
灵活分区:
/boot
swap
/
/data 用于存放主要文件,如:DB数据库等,以后重装系统后将此分区直接挂载,数据不会丢失
fdisk -l 显示磁盘信息
fdisk -l /dev/sda 显示sda这块磁盘信息
演示添加磁盘然后分区步骤:
1. VM中新建一个磁盘 (模拟真实添加了一个硬盘)
2. fdisk -l (显示磁盘的信息,可以看到sda + sdb[sdb为新添加的一块硬盘])
3. fdisk /dev/sdb
4. m
5. n
6. p
7. 1
8. enter (回车 选择default 1)
9. +100M (规定100M大小)
10. p (打印分区表,表示第一次已经分完了,开始演示第二次扩展分区过程)
11. n
12. e
13. 2
14. enter
15. enter (回车 剩余全部给它了吧,演示效果)
16. p (打印分区表)
17. w (保存)
18. mkfs.ext4 /dev/sdb1 (分区之后需要格式化)
19. tune2fs -c -1 /dev/sdb1
20. mount /dev/sdb1 /mnt (挂载)
mount /dev/sdb /mnt 挂载新的硬盘到/mnt
mkfs.ext4 /dev/sdb 格式化
mount /dev/sdb /mnt 再次挂载
umount /mnt 卸载挂载
21. cd /mnt (进入挂载的磁盘,可以写文件什么的)
22. df -h (查看磁盘挂载信息)
三、系统管理
查看系统版本 cat /etc/redhat-release
查看内核版本 uname -r
查看系统位数 uname -m
查看全部系统信息 uname -a
查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep "cpu cores"| uniq
查看逻辑CPU的个数 cat /proc/cpuinfo| grep "processor"| wc -l
查看CPU信息(型号) cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
查看内存信息 cat /proc/meminfo
hostname 查看主机名
修改主机名:
1. hostname bigen
2. vi /etc/sysconfig/network
3. vi /etc/hosts 将主机名添加到127.0.0.1第一行后面,否则以后启动ssh等服务会很慢,报错
4. logout
whoami 查看当前用户名
passwd 对root设置密码
useradd bigen 添加用户
passwd bigen 设置密码
su - bigen 切换用户 logout 退出普通用户到root用户下
su - root 切换到eoor
sudo su -
echo jjjjjj | passwd --stdin bigen 明文修改用户密码,方便于批量修改密码(非交互式的输入密码)
history 显示我输出过的命令
history -d 123 删除某一个历史记录行
history -c 删除所有命令
reboot 重启
halt 关机
last 系统登录情况
lastlog
四、系统调优
切换yum源
cd /etc/yum.repos.d
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
cp CentOS6-Base-163.repo CentOS-Base.repo
安装基本软件
yum install tree telnet dos2unix sysstat lrzsz -y
yum grouplist 查看已经安装的软件
关闭SELINUX
方法1:vi /etc/selinux/config => SELINUXTYPE=disabled
方法2:sed -i s#SELINUXTYPE=enforcing#SELINUXTYPE=disabled#g /etc/selinux/config
grep 'disable' /etc/selinux/config
重启之后生效
查看linux启动模式
cat /etc/inittab 默认第三种模式 第五种是桌面启动模式
runlevel
id:3:initdefault: 如果改成5即是桌面启动模式 (init 5改成5模式)
精简系统开机启动项
ntsysv
setup-system service
脚本一键完成
查看所有开机启动项
LANG=en
chkconfig --list | grep "3:on" 查看开机启动项 (视频在: L006-老男孩实效教育-Centos6.5 x86_64 linux系统优化初步讲解-11节)
ctrl + l 清屏
设置ssh远程登录
vi /etc/ssh/ssh_config
Port 22 远程登录端口
Protocol 2 采用ssh2协议
PermitRootLogin no 禁止root用户远程登录
UseDNS no 禁止dns使用
PermitEmptyPasswords no 禁止空密码登录
/etc/init.d/sshd reload 重启配置
/etc/init.d/sshd status
防火墙
/etc/init.d/iptables stop 临时关闭防火墙
查看网络状态lntup 或者 an
netstat -lntup | grep ssh 监听ssh服务
netstat -lntup | grep 22 监听22端口
netstat -an | grep :22 监听22端口连接状态
lsof -i :22 表示此服务处于开启状态
ps -ef | grep ssh
中文字符集
cat /etc/sysconfig/i18n
LANG="zh_CN.GB18030" 修改
echo $LANG 查看
source /etc/sysconfig/i18n 生效
五、linux目录结构
/boot 系统引导目录
/var 系统日志目录 (/var/log/messages 系统运行日志 /var/log/secure 系统安全日志 /var/spool/cron 定时任务配置文件的路径)
/usr 系统存放程序目录 /usr/local(安装程序)
/dev 设备文件目录 比如:声卡、网卡、磁盘...
/bin 系统命令目录 (/bin /sbin)
/etc 二进制安装包(yum,rpm)的配置文件默认路径
/etc/init.d(yum,rpm) 服务启动命令存放目录
/mnt 挂载设备的目录 比如:挂载U盘,新的硬盘等
mount /dev/sdb /mnt 挂载新的硬盘到/mnt
mkfs.ext4 /dev/sdb 格式化
mount /dev/sdb /mnt 再次挂载
umount /mnt 卸载挂载
/proc 显示内核、进程信息的虚拟文件系统,开机启动才挂载
cat /proc/meminfo 内存 free -m (-/+ buffers/cache此处标记为真实的剩余内存)
cat /proc/cpuinfo cpu
cat /proc/loadavg 负载
/tmp 临时文件目录
/etc/sysconfig/network-scripts/ifcfg-eth0 网卡配置文件
/etc/init.d/network restart 重启网卡
ifdown eth0 关闭网卡
ifup eth0 启动网卡
/etc/resolv.conf linux本地客户端DNS文件,DNS实现由域名解析到ip地址的过程
/etc/sysconfig/network 机器名、网卡、网关配置文件
/etc/hosts 本地DNS解析文件
/etc/fstab 开机要挂载的文件系统的配置文件
/etc/rc.local 存放开机自启动程序命令的文件 (chkconfig只能管理yum方式安装的程序)
/etc/intitab 设置系统启动时init进程将把系统设为什么样的runlevel(运行级别)及加载相关启动文件设置
/etc/exports NFS网络文件系统配置文件
/etc/init.d 存放系统或者服务器以system V模式启动的脚本
/etc/profile 系统全局环境变量配置文件
/etc/redhat-release redhat版本号及名称信息
/var/spool 定时任务默认路径,按用户名命名的文件
/var/spool/cron/root
crontab -l
六、crond定时任务
crond默认每分钟去执行
秒级别定时任务:
方法一:自己写守护进程shell循环
vi miao.sh 编辑shell脚本
==================================================================
#!bin/sh
while true
do
echo 123456
sleep 1
done
==================================================================
sh miao.sh 前台运行shell脚本,直接在终端输出了
vi miao.sh 编辑shell脚本
==================================================================
#!bin/sh
while true
do
echo 123456 >> /tmp/miao.log
sleep 1
done
==================================================================
sh miao.sh & 后台运行shell脚本,不会在终端输出了
tail -f /tmp/miao.log 监控此文件不断的变化
ps -ef | grep miao 查看此秒级任务的进程id
kill 1515 杀掉此进程,tail -f /tmp/miao.log文件便不在动了
方法二:crontab -e 添加60记录
* * * * * sleep 1; /bin/......
省略
* * * * * sleep 60; /bin/......
方法三:Quartz实现秒级任务
crond 定时任务守护进程,没有端口号,因为不对外,系统内部使用
crontab 设定定时任务的命令
crontab -l 显示列表
crontab -e 编辑
crontab -r 移除
/var/spool/cron/root root用户登录,即为编辑root文件
/var/log/cron 日志文件
* * * * * cmd 分 时 日 月 周 命令
* 每 00 12 * * * cmd 每天12点执行任务
- 到 00 12-14 * * * cmd 每天12,13,14点执行任务
, 和 00 12,13,14 * * * cmd 每天12,13,14点执行任务 跟 - 符号意思一样
/n 每隔 */10 * * * * cmd 每隔10分钟执行一次任务
/etc/init.d/cron status
/etc/init.d/cron stop
/etc/init.d/cron start
/etc/init.d/cron restart
* * * * * /bin/sh /home/test.sh >/dev/null 2>&1
1. shell脚本在定时任务中的标准写法,把标准错误2、标准输出1都定位到/dev/null中去,让脚本不在屏幕上打印任何东西
2. >/dev/null 2>&1 == 1>/dev/null 2>/dev/null
3. 此处为执行一个脚本文件,可以不让输出,如果是 * * * * * echo 123 >> /home/test.txt后面不能加,因为要输出
4. 调试的时候可以这样 * * * * * /bin/sh /home/test.sh >/tmp/test.log 2>&1
打包输出:
vi /home/tar.sh
=====================================
cd /home
tar zcf /home/tar_$(date +%F-%H).tar.gz ./test (如果直接在crontab中执行时间变量,必须是$(date +\%Y\%m\%d\%H\%M),\来转义)
=====================================
crontab -e
* * * * * /bin/sh /home/tar.sh >/dev/null 2>&1
七、LNMP优化
(1) nginx配置文件基本优化
1. (安全问题)隐藏nginx内版本号信息
第一步:lsof -i :80 监控80端口的nginx服务开启
第二步:curl -I www.baidu.com
第三步:vi nginx.conf,在http标签里面添加 server_tokens off;
第四步:重启nginx,再次测试
2. (安全问题)更改掉nginx的默认用户以及用户组nobody
第一步:grep '#user' /usr/local/nginx/conf/nginx.conf.default 查看默认用户
第二步:user nginx nginx; 修改
3. (优化问题)配置nginx的worker进程个数
第一步:worker_processes 1; 默认1,指定了nginx要开启的进程数,建议指定为等于CPU的数量或者乘以2的进程个数
第二步:设置完毕之后,ps -ef | grep nginx 就可以看到worker process的个数等于设置的数值
第三步:grep "physical id" /proc/cpuinfo 查看cpu核数
4. (优化问题)根据cpu核数进行nginx进程优化
第一步:worker_cpu_affinity 0001 0010 0100 1000
5. (优化问题)调整单个进程允许的客户端最大连接数
第一步:worker_connections 51200; 用于定义nginx每个进程的最大连接数,默认1024
第二步:max_client = worker_processes * worker_connections; 最大客户端连接数由这两者相乘
第三步:进程的最大连接数受Linux系统进程的最大打开文件数限制
6. (优化问题)配置每个进程最大文件打开数
第一步:worker_rlimit_nofile 10240;
7. (优化问题)事件处理模型
第一步:use epoll; 指定nginx的工作模式
8. (优化问题)优化服务器名字的hash表大小
9. (动态应用)上传文件大小限制
第一步:client_max_body_size 10m
10. fastcgi调优 (配合PHP引擎动态服务)
fastcgi_connect_timeout 300
fastcgi_send_timeout 300
fastcgi_read_timeout 300
...
11. 配置nginx的gzip压缩功能
?
12. nginx的expire功能
?
13. nginx的日志轮询
编写脚本cut_nginx_log.sh:
cd /usr/local/nginx/logs &&\
/bin/mv www_access.log www_access_$(date +%F -d -1day).log
/usr/local/nginx/sbin/nginx -s reload
添加到crontab:
00 00 * * * /bin/sh /cut_nginx_log.sh >/dev/null 2>&1
14. 禁止不需要的日志记录
location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$ {
access_log off;
}
15. 访问日志的权限设置
chown -R root.root /usr/local/nginx/logs
chmod -R 700 /usr/local/nginx/logs 不需要在日志目录上给nginx用户读或者写权限
16. 最小化目录、文件权限管理
1. 所有站点目录的用户和组都应该为root
2. 所有目录权限默认为755
3. 所有文件权限默认为644
4. 网站服务的用户不能用root
17. 根据扩展名限制程序、文件访问
#禁止images目录的php程序被解析执行
location ~ ^/images/.*\.(php|php5)$
{
deny all;
}
location ~ ^/static/.*\.(php|php5|.sh)$
{
deny all;
}
这些目录的限制必须放在以下配置的前面:
location ~ .*\.(php|php5)$
{
fastcgi_pass 127.0.0.1:9000;
...
}
18. nginx配置禁止访问*.txt文件,可同样用于防止盗链
location ~* \.(txt|doc|mp4)$
{
if (-f $request_filename) {
root /data/www/www;
#rewrite ... 可以重定向到某个URL
break;
}
}
location ~* \.(txt|doc|mp4)$
{
root /data/www/www;
deny all;
}
19. 禁止访问指定目录下的所有文件、目录
location ~ ^/(css/js/img)/ {
deny all;
}
20. 限制来源IP访问
#禁止某目录让外界访问,但允许某IP访问该目录
location ~ ^/css/ {
allow 192.168.199.112;
deny all;
}
#限制ip访问
location / {
deny 192.168.0.20/80
}
21. nginx错误状态码解析
301 永久跳转,请求的网页已永久跳转到新位置
403 禁止访问,服务器拒绝请求
404 服务器找不到请求页面
500 内部服务器错误,一般配置错误
502 坏的网关,一般是网关服务器请求后端服务时,后端服务没有按照http协议正确返回结果
例子:pkill php-fpm之后,请求就是502,这时候需要我们重启/usr/local/php/sbin/php-fpm
503 服务当前不可用,可能因为超载或者停机维护
504 网关超时,一般是网关服务器请求后端服务时,后端服务没有在指定时间内完成服务
22. 防盗链技术
1. 视频、图片加水印
2. 防火墙控制、ip控制
3. 防盗链(根据referer机制)
23. nginx实现防盗链
方法一:referers
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|mp4)$
{
expires 30d;
valid_referers none blocked www.weiyugame.com;
if ($invalid_referer) {
#rewrite ^/ http://www.jzxue.com/retrun.html;
return 403;
}
}
方法二:Http-Access-Key,据说可以防止迅雷,或者使用阿里云的这个模块
方法三:lighttpd
(2) php配置优化
八、MySQL优化
1) 备份
1. 备份单个数据库
mysqldump -u用户名 -p密码 数据库 > 备份路径
mysqldump -uroot -proot wyapi > /home/w.sql
2. 备份单个数据库的某个表
mysqldump -u用户名 -p密码 数据库 表 > 备份路径
mysqldump -uroot -proot wyapi user > /home/w.sql
3. 备份单个数据库的多个表
mysqldump -u用户名 -p密码 数据库 表1 表2 > 备份路径
mysqldump -uroot -proot wyapi user detail > /home/w.sql
4. 备份表的结构
mysqldump -uroot -proot -d wyapi user > /home/w.sql
5. 备份表的数据
mysqldump -uroot -proot -t wyapi user > /home/w.sql
2. mysql多实例
1) pkill mysqld
2) rm -f /etc/init.d/mysqld
3) chown -R mysql.mysql /data 授权mysql用户管理data文件
4) /etc/rc.d/init.d/mysql start|stop 启动关闭mysql
/etc/init.d/mysql start|stop 启动关闭mysql
netstat -lntup | grep 3306 查看mysql进程
3. 主从同步详细实现原理及步骤
1) 主从同步失败,如果快速恢复
(1) 留出一台从库,专门做数据备份,一旦主库宕机,该库将被提升为主库,并且从宕机的主库中拉取bin-log日志来保证数据同步
(2) 谷歌半同步插件,将异步改成同步
(3) 实行双写,利用两台主库去写
(4) 使用应用程序去写一分钟内存log
2) 主从同步依赖于bin-log实现,必须开启
master
只有一个IO主线程,接收到数据写入磁盘,然后把语句写入到mysql-bin.0000*日志文件中
slave
第一个IO线程不断向master请求bin-log日志,然后将这些信息存入到中继日志(relay-log)中,并且把请求的那个bin-log及pos位置记录到master.info中,然后继续请求
第二个SQL线程监听到IO线程写入了relay-log,就把里面的语句写入到磁盘中去
主从同步必须保证从库在这个同步点之前的数据跟主库一直,不一致可以直接mysqldump出来,然后灌入到slave中去
3.1) 主从同步
-----------------------------------------------------------------------------------------------------------------------------------------------
(1) GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
flush privileges;
service iptables stop;
注释:开启mysql远程连接 + 临时关闭防火墙
(2) vi /etc/my.cnf >>> log-bin >>> server-id=1
/etc/rc.d/init.d/mysql restart
注释:master开启bin-log日志,开启my.cnf中两个配置项
然后重启mysql
查看 egrep 'log-bin|server-id' /etc/my.cnf
查看是否生效 cd /usr/local/mysql/var 里面是否有mysql-bin*
查看是否生效 mysql -uroot -proot -S /tmp/mysql.sock -e "show variables like 'log_bin';"
(3) vi /etc/my.cnf >>> #log-bin >>> server-id=2
/etc/rc.d/init.d/mysql restart
注释:slave开启从库,关闭#log-bin(除非有级联)
然后重启mysql
(4) grant replication slave on *.* to 't430s'@'192.168.199.%' identified by '123456'; 添加账号
flush privileges; 将变化刷新到磁盘
show master status; 查看bin-log的位置状态
注释:在master上添加允许的slave同步的账号
replication slave >> mysql同步的必须权限,此处不要授权all
*.* >> 所有库的所有表,也可以指定dearedu_my.my_config_aisas
't430s'@'192.168.199.%' >> t430s为同步账号名,192.168.199.%为授权主机网段,使用%表示整个192.168.199.0网段以t430s用户访问
show variables like 'server_id'; 显示id是多少
show variables like 'log_bin'; 显示bin-log是否开启
show master logs;
show processlist;
(5) CHANGE MASTER TO MASTER_HOST='192.168.199.112', //master的主机ip [在登录mysql命令行的模式下]
MASTER_PORT=3306, //master的mysql端口号
MASTER_USER='t430s', //刚才设置的同步账号名
MASTER_PASSWORD='123456', //刚才设置的同步账号密码
MASTER_LOG_FILE='mysql-bin.000021', //刚才show master status
MASTER_LOG_POS=342; //刚才show master status
start slave; 开始同步 [在登录mysql命令行的模式下]
show slave status\G; 两个线程都是yes,表示正常状态 [在登录mysql命令行的模式下]
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0 落后主库的秒杀为零秒表示正常
注释:slave开始同步master数据
stop slave; 如果之前设置过主从,需要先关闭,再开启
cat master.info; 查看同步的所有关键信息 [在普通模式下]
cat T430s-relay-bin.index; 记录slave更新到那个relay-log
cat relay-log.info 前两句表示当前SQL线程读到哪个relay-log的哪个位置,
后两句跟master.info中一样记录当前IO线程请求到那个bin-log
-----------------------------------------------------------------------------------------------------------------------------------------------
(3.2) 主从同步生产环境实现的原理及步骤
-----------------------------------------------------------------------------------------------------------------------------------------------
(1) 同上
(2) 同上
(3) 同上
(4) grant replication slave on *.* to 't430s'@'192.168.199.%' identified by '123456'; 添加账号
flush privileges; 将变化刷新到磁盘
flush table with read lock; 锁住所有的表,全库此时只能读
show master status; 查看bin-log的位置状态
(5) mysqldump -uroot -proot -S /tmp/mysql.sock -A -B --events --master-data=2 > /data.sql 然后将这个data.sql数据拷贝到从库的服务器上
(6) unlock tables; 解锁主库
(7) mysql -uroot -proot -S /tmp/mysql.sock < /data.sql 在从库上导入数据
(8) CHANGE MASTER TO MASTER_HOST='192.168.199.112', MASTER_PORT=3306,MASTER_USER='t430s',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000021',MASTER_LOG_POS=342;
在从库上设置
(9) start slave; 在从库上开启,也可以选择stop slave之后再开启
show slave status\G;
-----------------------------------------------------------------------------------------------------------------------------------------------
(3.3) 主从复制中挑选需要的库进行同步
-----------------------------------------------------------------------------------------------------------------------------------------------
vi /etc/my.cnf
replicate-ignore-db = member 允许同步的库
binlog-ignore-db = mysql 忽略同步的库
servier-id = 1
-----------------------------------------------------------------------------------------------------------------------------------------------
(3.4) 主从复制中只让从库有只读权限,其他权限禁用
-----------------------------------------------------------------------------------------------------------------------------------------------
1. vi /etc/my.cnf 在[mysqld]下面加 read-only
2. 重启mysql让参数生效
3. grant select,insert,update,delete on *.* to 'dearedu'@'%' identified by 'power123321'; 对连接数据库的用户不能指定有super或all privileges权限,否则无效
4. flush privileges;
5. navicat或者mysql命令行使用dearedu, power123321登录进去,插入,删除,更新都无效了
-----------------------------------------------------------------------------------------------------------------------------------------------
(3.5) 主从复制中的错误解决办法
-----------------------------------------------------------------------------------------------------------------------------------------------
第一要义:查看mysql错误代码大全
方法一:
忽略错误
1. show slave status\G;
2. stop slave;
3. set global sql_slave_skip_counter = 1; //直接跳过1(或2、3、4)个日志,进入下一个,以后想办法补救这个中间忽略的数据
4. start slave;
方法二:
根据错误号跳过指定的错误
1. vi /etc/my.cnf
2. 加入 slave-skip-errors = 1032, 1062, 1007等你认为可以忽略的错误号
3. restart
4. skip-name-resolve mysql连接很慢的时候可以加上这一句,忽略名字解析
-----------------------------------------------------------------------------------------------------------------------------------------------
(3.6) 主从复制中的从库开启binlog做级联
-----------------------------------------------------------------------------------------------------------------------------------------------
1. vi /etc/my.cnf
2. log-bin 开启
log-slave-updates
expire_logs_days = 10 bin-log.0000*文件的过期时间
-----------------------------------------------------------------------------------------------------------------------------------------------
九、iptables防火墙
关闭两项功能
1. selinux(生产中也是关闭的), ids入侵检测
2. iptables(生产中看情况,内网关闭,外网打开,大并发的情况,不能开iptables,影响性能,硬件防火墙)
iptables是基于包过滤的防火墙工具
/etc/init.d/iptables restart
/etc/init.d/iptables status
setup >> Firewall configuration >> enable 解决无法启动问题
iptables -L -n 查看防火墙规则
iptables -l -n --line-numbers 查看防火墙规则,添加序号,方便删除规则,直接使用这个序号就可以
iptables -F 清除所有规则,不会处理默认的规则
iptables -X 清除用户自定义的链
iptables -Z 清除计时器
防火墙 表名 filter表 添加 流入 协议 tcp 端口号 22 行为 丢弃额
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP (添加阻止22端口访问,添加到最后一条)
iptables -t filter -I INPUT -p tcp --dport 3306 -j ACCEPT (添加允许3306端口访问,插入到第一条)
iptables -t filter -I INPUT -p tcp -s 221.0.0.146 --dport 80 -j DROP (添加阻止ip访问80端口,插入到第一条)
iptables -t filter -A INPUT -i eth0 -s 221.202.146.20 -j DROP (添加阻止ip访问eth0的所有服务的规则)
iptables -t filter -A INPUT -i eth0 ! -s 221.202.146.20 -j DROP (添加阻止除了这个ip外的任何其他ip访问eth0的所有服务)
iptables -t filter -I INPUT 5 -p tcp --dport 3306 -j ACCEPT (添加允许3306端口访问,插入到第5条)
iptables -t filter -D INPUT -p tcp --dport 22 -j DROP (删除 阻止22端口访问的规则)
iptables -t filter -D INPUT 202 (删除 阻止22端口访问的规则,规则的序号是202)
iptables -F (删除 阻止22端口访问的规则)
配置一个企业防火墙:
iptables -F
iptables -X
iptables -Z
iptables -A INPUT -p tcp --dport 52113 -s 10.0.0.0/24 -j ACCEPT 允许指定ip访问端口的sh连接
iptables -A INPUT -i lo -j ACCEPT 设置允许本机lo通信规则的进入被允许
iptables -A OUTPUT -o lo -j ACCEPT 设置允许本机lo通信规则的出去被允许
允许合法的进入:
iptables -A INPUT -s 221.202.106.100/200 -p all -j ACCEPT 允许这个ip段的所有进入,不关心协议
允许关联的状态包通过,ftp协议
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
保存防火墙配置:
/etc/init.d/iptables save 保存操作
vi /etc/sysconfig/iptables 编辑配置文件
/etc/init.d/iptables reload 重启防火墙
十、LVS集群、keepalived高可用
ARP协议:ip地址和mac地址的转换,需要双方在同一个网段
arp -a 查看arp缓存表
arp -d 清除arp缓存表
集群分类:
第一类:负载均衡集群 - LB 两类集群中:优先使用负载均衡
负载均衡主要特点:
. 各大服务器共同一起承担压力
负载均衡集群的意义:
. web服务器集群,mysql主从的从服务器集群
负载均衡集群的作用:
. 分担用户访问请求或数据流量(负载均衡)
. 保持业务连续性7*24小时服务(高可用性)
负载均衡集群的典型开源软件:
. lvs、nginx、haproxy
LVS:负载均衡器调度技术是在Linux内核中实现的
. 实现调度的工具IPVS
. 管理工具ipvsadm
. keepalived实现管理及高可用 推荐使用
虚拟IP地址: VIP VIP为Director用户向客户端计算机提供服务的IP地址
真实IP地址: RIP RIP是在集群下面节点上使用的IP地址,物理IP地址
Director的IP地址 DIP Director用于连接内外网络的IP地址,物理网卡上的IP地址,是负载均衡器上的IP
客户端主机IP地址 CIP 用户IP地址
L089 - 23 1万负载 - nginx使用
未完待续...
第二类:高可用性集群 - HB
高可用性主要特点:
. 一台启用,另一台备用随时准备替换
高可用集群的作用:
. 当一台机器宕机后另一台机器接管,主要接管对象为IP资源、服务资源
高可用性集群的典型开源软件:
. keepalived、heartbeat
LVS搭建步骤:
-----------------------------------------------------------------------------------------------------------------------------------------------
准备三台机器 192.168.199.112 - lvs控制器、192.168.199.113 - web服务器、192.168.199.114 - web服务器
192.168.199.112:
ln -s /usr/src/kernels/2.6.32-696.6.3.el6.x86_64/ /usr/src/linux 因为lvs基于内核,所以ln内核路劲到/usr/src/linux
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz 下载ipvsadm
yum install libnl* popt* -y
tar xf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make
echo $?
make install
lsmod | grep ip_vs 查看是否已经有了ip_vs
modprobe ip_vs 将ip_vs放入内核
lsmod | grep ip_vs 再次查看
域名解析
ifconfig eth0:0 192.168.199.150/24 up 配置ip地址
ipvsadm -C 清空原有已知命令
ipvsadm --set 30 5 60 配置超时时间
ipvsadmin -A -t 192.168.199.150:80 -s rr -p 20 指定一个VIP地址:端口 算法 20秒之内只找这个主机
ipvsadm -a -t 192.168.199.150:80 -r 192.168.199.113 -g -w 1 添加113节点
ipvsadm -a -t 192.168.199.150:80 -r 192.168.199.114 -g -w 1 添加114节点
ipvsadm -L -n 查看状态
ipvsadm -D -t 192.168.199.150:80 删除服务器
ipvsadm -d -t 192.168.199.150:80 -r 192.168.199.113 删除服务器下的113节点
ipvsadm -d -t 192.168.199.150:80 -r 192.168.199.114 删除服务器下的114节点
192.168.199.113:
ifconfig lo:0 192.168.199.150/32 up 绑定VIP到lo接口
route add -host 192.168.199.150 dev lo 添加路由
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore arp抑制
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
192.168.199.114:
ifconfig lo:0 192.168.199.150/32 up 绑定VIP到lo接口
route add -host 192.168.199.150 dev lo 添加路由
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore arp抑制
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
192.168.199.112:
watch ipvsadm -L -n
vi ipvs_server.sh
=========================================================================================================================================
. /etc/init.d/functions
VIP=192.168.199.150
PORT=80
RIP=(
192.168.199.113
192.168.199.114
)
start(){
ifconfig eth0:0 192.168.199.150/24 up
route add -host $VIP dev eth0
ipvsadm -C
ipvsadm --set 30 5 60
ipvsadm -A -t $VIP:$PORT -s rr -p 20
for ((i=0; i<${#RIP[*]}; i++))
do
ipvsadm -a -t $VIP:$PORT -r ${RIP[$i]} -g -w 1
done
}
stop(){
ipvsadm -C
ifconfig eth0:0 down
route del -host $VIP dev eth0
}
case "$1" in
start)
start
echo "ipvs is started"
;;
stop)
stop
echo "ipvs is stopped"
;;
restart)
stop
echo "ipvs is stopped"
start
echo "ipvs is started"
;;
*)
echo "USAGE:$0 {start|stop|restart}"
esac
=========================================================================================================================================
sh ipvs_server.sh stop
ipvsadm -L -n
sh ipvs_server.sh start
ipvsadm -L -n
mv ipvs_server.sh /usr/local/sbin/ipvs 加入系统命令
cd /usr/local/sbin/
chmod +x ipvs
ipvs stop
ipvs start
keepalived高可用集群介绍:
keepalived服务两大用途:healthcheck - 对lvs节点做健康检查、failover - 高可用的失败接管
192.168.199.112
wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
ln -s /usr/src/kernels/2.6.32-696.6.3.el6.x86_64/ /usr/src/linux
tar xf keepalived-1.1.19.tar.gz
cd keepalived-1.1.19
./configure
make
make install
/bin/cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
/bin/cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived -p
/bin/cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
/bin/cp /usr/local/sbin/keepalived /usr/sbin/
/etc/init.d/keepalived start
ps -ef | grep keep
/etc/init.d/keepalived stop
-----------------------------------------------------------------------------------------------------------------------------------------------