初级运维必备知识

通过命令查看服务器上一共开了多少的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



-----------------------------------------------------------------------------------------------------------------------------------------------
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348