zoukankan      html  css  js  c++  java
  • keepalived+双主架构

    简介

    keepalived是基于VRRP协议的,全称 Virtual Redundent Routing Protocal 虚拟路由协议,为解决静态路由单点故障引起的网络失效问题设计的一套主备协议

    两台互为主备的MySQL服务器运行keepalived,master会向backup节点发送广播信号,当backup节点接收不到master发送的VRRP,会认为master宕机,这时会根据VRRP优先级

    选举一个backup来充当master,这个master就会持有vip(对外应用连接IP地址),从而保证线上现有业务的正常运行,高可用完美体现出来

    VRRP优先级用0-255来表示,数字越小优先级越低,0代表master放弃持有vip,255表示master持有最高优先级&vip

    VRRP中还有一个vrid(虚拟路由标识),同组机器内的vrid必须一致

    keepalived服务启动之后有3个进程,watch dog,vrrp,Health-check

    vrrp 切换服务    health-check 检查服务器  watch-dog 监控check,vrrp进程

    集群搭建思路:

    1)2台MySQL服务器互为主从,都可读写 其实就是一台服务器A负责数据的写入,另一台服务器B作为备用

    2)使用yum安装keepalived软件包

    3)整理好keepalived配置文件,理清keepalived 3种状态,+一个MySQL监控脚本,以便检测宕机,从而顺利切换

    4)2台服务器配置keepalived参数种,state都要选择backup + nopreempt这种非抢占模式,避免出现脑裂

    实验部署:

    A: 192.168.139.144

    B: 192.168.139.145

    VIP(虚拟IP):  192.168.139.160  ====> 可以通过该IP访问集群的主mysql

    注意事项:

    1)防火墙必须关闭或者开发数据库端口

    2)2台服务器的MySQL配置中server-id 不能一样,否则会报1593 主从同步错误

    前提:2台服务器搭建MySQL,版本 5.7.22  ;按照步骤略

     步骤一,搭建主主MySQL

    1)创建主从同步账号(A,B都执行,且命令相同)

    mysql>create user 'bak'@'192.168.139.%' identified by '123456';

    mysql>grant replication slave on *.* to 'bak'@'192.168.139.%';

    mysql>flush privileges;

    2)备库配置同步

    mysql>change master to master_host='192.168.139.144',master_user='bak',master_password='123456',master_auto_position=1;

    如果报gtid_mode没有为ON 

    解决办法:

      查看当前状态show variables like "%gtid_mode%"   ,我这边显示为off

       mysql>set global gtid_mode=off_permissive

       mysql>set global gtid_mode=on_permissive

       mysql>set global  ENFORCE_GTID_CONSISTENCY=on

       mysql>set global gtid_mode=on

    打开主从同步开关:

    start slave;

    查看主从状态:

    show slave statusG;

    从库2个线程slave_io_running:yes    slave_sql_running:yes   ====>代表正常

    3)主库配置主从

    mysql>change master to master_host='192.168.139.145',master_user='bak',master_password='123456',master_auto_position=1

    开启主从开关:

    mysql>start slave;

    查看主从状态

    mysql>show slave statusG;

    从库2个线程slave_io_running:yes    slave_sql_running:yes   ====>代表正常

    步骤二,安装keepalived

    两台服务器上都安装keepalived

    yum install -y keepalived

    步骤三,编写MySQL检测脚本

    cd /etc/keepalived/

    vim checkmysql.sh

    内容如下:#!/bin/bash
    mysqlstr=/usr/local/mysql/bin/mysql
    host=192.168.139.145     ====>host A B 使用各自的IP,密码也是
    user=bak
    password=123456
    port=3306
    #####mysql 正常状态为1  否则为0
    mysql_status=1
    ####check mysql status
    $mysqlstr -h $host -u $user -p$password -P $port -e "show status;"  > /dev/null 2>&1
    if [ $? = 0 ];then
    echo "mysql_status=1"
            exit 0
    else
    /etc/init.d/keepalived stop
    fi

    步骤四,配置keepalived

    vim /etc/keepalived/keepalived.conf

    #####################设置一个脚本检测MySQL状态,脚本执行间隔为10s 比较合理

    vrrp_script vs_mysql_100 {  ====>注意格式,这里的 { 必须在这里,否则会报错,且有一个空格  ====》主备的函数名称最好也要有区别

    script "/etc/keepalived/checkmysql.sh"

    interval 10

    }

    #####################

    vrrp_instance VI_100 {  ####集群名称(A,B不一致)####

    state BACKUP               #####指定keepalived角色,master为主,backup为备,这里2台机器都设置为backup,以免脑裂现象

    nopreempt                     #######设置为资源不抢占模式

    interface eth0                 ###VIP 绑定的网卡

    virtual_route_id 100       ##vrid 的值100,2台机器必须一致

    priority 100                     ###优先级,数值越大,优先级越高

    advert_int 5                   #####主备之间同步检查时间间隔,设置为5S

    authentication { 

        auth_type PASS

       auth_pass 1314         #######验证密码,主备保持一致

    }

    track_script {

    vs_mysql_100             ######调用监控函数,执行监控服务 

    }

    virtual_ipaddress {

       192.168.139.160    ####虚拟IP即VIP

    }

    }

    五,启动&检查keepalived

    主服务器上执行: /usr/sbin/keepalived   ====》启动后等待几秒,再查看IP

    查看日志: cat /var/log/message

    检查主服务器上IP信息: ip a ====> 可以看见虚拟IP生成

     从服务器执行:/usr/sbin/keepalived

    六,验证

    其他服务器:

    mysql -u bak -p123456 -h 192.168.139.160   ====》连接不上关闭防火墙

    进行MySQL后执行s

    可以看见连接数据库是通过虚拟IP(192.168.139.160)实现的

    关闭主服务器的MySQL,连接会出现短时间的中断,当VIP漂移至备服务器时,连接恢复

    附:如果日志有报错,检查配置文件是否存在格式不对||拼写错误

  • 相关阅读:
    使用Acctinfo.dll了解更多AD用户帐号信息
    vue elementUI之Form表单 验证
    vue element-ui 表格筛选,点击筛选数据
    使用Bootstrap + Vue.js实现 添加删除数据
    CSS3过渡效果 兼容IE6、IE7、IE8
    使用Ajax、json实现京东购物车结算界面的数据交互
    JavaScript面向对象,闭包内存图,闭包和作用域
    实现一个宽和高都是100像素的div可以用鼠标拖拽移动的效果
    JavaScript鼠标事件,点击鼠标右键,弹出div
    javascript sort排序
  • 原文地址:https://www.cnblogs.com/zy1234567/p/10103817.html
Copyright © 2011-2022 走看看