day-49 高可用冗余服务(keepalived)

00.课程介绍部分
    1.高可用服务概念介绍
    2.高可用服务部署过程
    3.高可用服务常见问题
    4.高可用服务安全配置
    5.高可用服务双主配置
01.课程知识回顾
    1.负载均衡的两个模块
        upstream 模块  实现负载均衡
            第一种:根据能力进行分配  ip后加weight=x;  按比例进行权重分配资源
            第二种:根据后端节点健康状态分配
                max_fails=3;      问题节点发送请求次数
                fail_timeout=5s;  再次发送时间
            第三种:热备节点  backup  (所有节点都坏了才行)
            第四种:根据节点连接数进行分配 添加 least_conn (连接数少的多分配)
            第五种:源IP地址哈希值分配  ip_hash  

        proxy  模块  实现反向代理

            功能一:解决访问网站时看到不同的页面
                    proxy_set_header Host $host;
            功能二:web节点中显示真实用户IP地址
                    proxy_set_heade X-Forwarded-For $remote_addr;
            功能三:根据页面显示信息进行健康检查
                    proxy_next_upstream error timeout http_403 http_404;
                  配置之后一定显示正确页面
    2.利用负载均衡实现动静分离
        写三个upstream
         三个location
    3.根据客户端显示不同页面的信息
        location中加if 判断语句
02.高可用冗余服务介绍
    作用说明:避免单点故障
        哪里会出现单点故障?
        01.负载均衡服务
        02.数据库服务   高可用(MHA)
        03.存储服务器   NFS如何实现高可用 keepalived实现高可用(脚本)  heartbeat+drbd(同步数据)
        04.备份服务器   再加一台备份服务器  数据同步
    
    实现方式:利用keepalived服务软件
        keepalived软件介绍:
        01.利用keepalived软件实现管lvs服务
        02.利用keepalived软件实现后端节点健康检查功能
        03.利用keepalived软件可以实现冗余功能 **

    利用keepalived如何实现了高可用(原理)
    利用了vrrp协议:
03. 高可用服务部署过程:
    架构环境准备:
        lb01   10.0.0.5   nginx keepalived 
        lb02   10.0.0.6   nginx keepalived 
        web01  10.0.0.7   nginx 
        web02  10.0.0.8   nginx 
        web03  10.0.0.9   nginx 

    第一步:web服务器环境
    web-www.conf 
        server {
           listen            80;
           server_name       www.oldboy.com www.jd.com;
           root              /html/www;
           index             index.html;
        }
     web01:
        # cat /html/www/oldboy.html 
         web01 
     web02:
        # cat /html/www/oldboy.html 
        web02 
     web03:
        # cat /html/www/oldboy.html 
        web03 

      测试后端节点:
        curl -H host:www.oldboy.com 10.0.0.7/oldboy.html
        curl -H host:www.oldboy.com 10.0.0.8/oldboy.html
        curl -H host:www.oldboy.com 10.0.0.9/oldboy.html    
        

    第二步:安装负载均衡服务并进行配置
    编写nginx配置文件
        upstream oldboy {
          server 10.0.0.7:80;
          server 10.0.0.8:80;
          server 10.0.0.9:80;
        }   
        server {
          listen        80;
          server_name   localhost;
          location / {
             proxy_pass  http://oldboy;
             proxy_set_header Host $host;
             proxy_set_header X-Forwarded-For $remote_addr;   
          }
        }

    第三步:安装keepalived服务 lb01 lb02
            yum install -y keepalived


    第四步:编写lb01中 keepalived配置文件   lb01和lb02配置文件需更改
        # cat /etc/keepalived/keepalived.conf
        ! Configuration File for keepalived

        global_defs {                  ---全局配置
           notification_email {        ---设置通知邮箱地址信息
             [email protected]
             [email protected]
             [email protected]
           }
           notification_email_from [email protected]
           smtp_server 192.168.200.1
           smtp_connect_timeout 30
需要改    router_id LVS_DEVEL          ---标识每个主机身份名称
           
        }
需一致 vrrp_instance VI_1 {            ---设置一个家族
需要改     state MASTER                ---设置一个主机为主服务器
            interface eth0              ---设置指定网卡上生成VIP地址
需一致     virtual_router_id 51        ---设置主备一致,数值需要相同
需要改     priority 100                ---优先级越高,越有可能成为主
            advert_int 1                ---组播包发送间隔(接收与发送也需要相同)
            authentication {            ---设置组播通讯认证进制
                auth_type PASS          
                auth_pass 1111
            }
            virtual_ipaddress {
需要改         10.0.0.3                ---设置vip地址数值信息
            }
        }

        systemctl restart keepalived.service
04.keepalived高可用服务常见问题
    1.高可用脑裂问题(高可用集群中,多台主机都有vip地址了)
        出现原因:主服务器还活着,备服务器收不到组播报
        01.防火墙服务开启了,阻止组播报通讯
        02.主备服务器之间心跳线出现问题
        03.仲裁服务器出现服务器

    如何监控发现出现了脑裂问题:
        lb02编写监控脚本 --- 监控备服务器有没有出现vip地址
        备服务器出现vip原因
        1.正常主备切换
        2.出现了脑裂问题

        #!/bin/bash
        ip a|grep 10.0.03 &>/dev/null
        if [ $? -eq 0 ]
        then
           echo "master and backup change"|mail -s "check keepalived server 971115"@163.com
        fi

    2.keepalived存在价值
        nginx负载均衡服务停止  keepalived服务也应该停止运行
        第一步:编写监控nginx服务状态脚本
            方法一:监控nginx服务进程状态
            ps -ef|grep nginx    
            方法二:监控nginx服务端口状态
            netstat -lntup|grep 80

                #!/bin/bash
                port_info=$(netstat -lntup|grep -w 80|wc l)

                if [ port_info -eq 0 ]
                then
                   systemctl stop keepalived
                fi

        第二步:将脚本信息调用到keepalived配置文件中
        在配置文件中添加
            vrrp_script check_web {                         ---定义需要监控脚本文件信息
                script "/server/scripts/check_web.sh"       ---绝对路径定义脚本文件所在位置/执行权限
                interval 2                                  ---脚本执行间隔周期           
                weight 2                                    ---值 分为正值和负值                       
            }
        在配置文件中的vrrp下添加
            track_script {                         --- 定期运行监控脚本
                 check_web
            }

            curl www.oldboy.com  --> 不等于200
            如何取出状态码信息
            curl-I www.oldboy.com -s |awk 'NR==1{print $2}'
            curl -I www.oldboy.com -o /dev/null -s -w "%{http_code}\n"
05.企业中服务网络安全访问配置
    目的:尽可能不暴露企业服务器IP地址信息给客户

    第一步:修改lb负载均衡配置文件    (监听改成只监听10.0.0.3)
            upstream oldboy {
              server 10.0.0.7:80;
              server 10.0.0.8:80;
              server 10.0.0.9:80;
            }   
            server {
              listen        10.0.0.3:80;
              server_name   localhost;
              location / {
                 proxy_pass  http://oldboy;
                 proxy_set_header Host $host;
                 proxy_set_header X-Forwarded-For $remote_addr;   
              }
            }
    注意项:
        01.nginx程序涉及到IP地址修改  必须重启nginx 
        02.监听的地址必须是本地网卡上有的地址
    如何监听网卡上没有的网址?
        echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
        立即加载配置文件
        sysctl -p
06.课程知识总结说明
    1.keepalived服务配置过程(配置文件如何修改)
        查看日志:tail -f /var/log/messages
    2.keepalived服务配置常见问题
        1.脑裂问题
        2.keepalived服务存储价值(nginx关闭keepalived也需要关闭)
    3.实现将网站物理IP不暴露给用户
        nginx地址监听功能:监听 vip
07.作业:
    研究keepalive配置文件中weight参数作用
    
    假定weight值为W,初始的优先级为P
    当weight值小于0时:

            如果检测脚本返回值=0,则节点最终优先级不改变;

            如果检测脚本返回值≠0,则节点最终优先级=P-W,优先级会减小。

    当weight值大于0时:

            如果检测脚本返回值=0,则节点最终优先级=P+W,优先级会增加;

            如果检测脚本返回值≠0,则节点最终优先级不改变。    


编写监控网站页面是否正常的脚本:
    #!/bin/bash
    code_info="$(curl -I -s -o /dev/null -w "%{http_code}\n" -H hosts:www.oldboy.com 10.0.0.3)"

    if [ $code_info -eq 200 ] 
    then 
        exit 0
    else
        exit 1
    fi
    权重数值为负值
问题解决: 数据库备份恢复后, root用户密码失效了
        mysql数据库:
           备份数据库: 所有数据信息 -转换-> 命令信息(SQL)
           恢复数据库: 执行SQL语句  创建库 创建表 添加没有信息
           mysql.user: 用户信息记录表 
           grant  授权操作 ---> 立即生效
           insert 插入操作 ---> 不会立即生效 ---> flush privileges(刷新权限)
           
           恢复完数据之后 ---> flush privileges(刷新权限) --> 识别到root用户的密码信息
           
        第一步: 在web01服务器上备份数据
        第二步: 将备份数据传输到52数据库服务器
        第三步: 在52数据库服务器中安装mariadb服务, 恢复数据 
        第四步: 空密码直接进入数据库,刷新权限 
        第五步: 重新登录数据
           mysql -uroot -poldboy123

你可能感兴趣的:(day-49 高可用冗余服务(keepalived))