美文网首页
初级运维必备知识

初级运维必备知识

作者: 塞外务农 | 来源:发表于2018-01-15 13:50 被阅读0次

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

    相关文章

      网友评论

          本文标题:初级运维必备知识

          本文链接:https://www.haomeiwen.com/subject/bforoxtx.html