zoukankan      html  css  js  c++  java
  • MHA搭建

    安装MySQL:(RPM包安装)

    系统环境:

        Linux version 2.6.32-642.el6.x86_64
        mysql Ver 14.14 Distrib 5.6.40
        mha-manager-0.56,mha-node-0.56
    

    整体架构:

    + 角色分配:
    


    + 整体架构图:

    安装部分:

    MySQL安装:
    • 先查看系统本身是否存在MySQL或者mariadb,若存在将其卸载(把一切与mysql有关的都删除):
      rpm -qa | grep mysql && yum -y remove mysql
      whereis mysql
      find / -name mysql
    • 将下载好的压缩包解压:

      [root@master mysql5.6]# rpm -ivh MySQL-* #安装
    • 安装完成后,查看MySQL初始密码并进行修改:

      使用此密码登入数据库进行密码修改:
      mysql> set password=password('1234')

      • 配置三个数据节点的主从关系:
        修改 节点master 的数据库配置文件/etc/my.cnf,追加
        server-id=205
        log-bin=mysql-bin
        log_slave_updates,同理修改其他两个节点的配置文件,注意server-id不可相同。保存后重启数据服务。
        [root@master mysql5.6]# /etc/init.d/mysql restart
        登入数据库,进行授权操作:
        mysql> grant replication slave,reload,super on . to slave@'192.168.1.%' identified by '1234';
        mysql> flush privileges;

        对 节点slave1 进行操作,如master节点一样修改相应的参数文件后,重启mysql服务然后登入数据库。配置从属关系。
        mysql > change master to master_host='192.168.1.205',master_port=3306,master_user='slave',master_password='1234',master_log_file='mysql-bin.000001',master_log_pos=423;
        mysql> start slave;
        mysql> show slave statusG;
        Slave_IO_Running: Yes
        Slave_SQL_Running: Yes
        mysql> grant replication slave,reload,super on . to slave@'192.168.1.%' identified by '1234';
        mysql> flush privileges;
        对节点slave2 进行操作,同样修改参数文件后,登入数据库更改从属关系。
        mysql > change master to master_host='192.168.1.205',master_port=3306,master_user='slave',master_password='1234',master_log_file='mysql-bin.000001',master_log_pos=423;
        mysql> start slave;
        mysql> show slave statusG;
        Slave_IO_Running: Yes
        Slave_SQL_Running: Yes
        mysql> grant replication slave,reload,super on . to slave@'192.168.1.%' identified by '1234';
        mysql> flush privileges;
        • 进行测试
          登入master节点,执行 mysql> show slave hosts;看到其他两个从节点即成功。

      执行安装命令:
      yum -y install mysql-server
      等待安装完成后,查看相应的包是否安装成功
      rpm -qa | grep mysql
      启动MySQL:
      systemctl start mysqld
      查看MySQL是否正常启动:
      netstat -antp | grep mysqld
      由于MySQL安装启动后会自动生成临时密码,需要在日志中将此密码过滤出来:
      grep 'temporary password' /var/log/mysqld.log
      登录成功后,进行密码的修改
      此时未修改临时密码需要先进行修改
      mysql> set password='ABCabc123!@#';
      开启远程控制:
      MySQL默认未开启远程控制即只能自己访问别的主机无法访问此数据库,必须添加远程访问的用户。

    MHA安装与配置:
    + 首先配置四台主机之间免密登陆。        
    

    [root@master ~]# echo -e " " |ssh-keygen -t dsa -N ""
    [root@master ~]# ssh-copy-id -i .ssh/id_dsa.pub root@192.168.1.211
    [root@master ~]# ssh-copy-id -i .ssh/id_dsa.pub root@192.168.1.202
    [root@master ~]# ssh-copy-id -i .ssh/id_dsa.pub root@192.168.1.204

    • 安装软件。
      先创建repo,使用ftp给各节点推送安装包(方法有很多)。
      vim ftp-mha.repo
      [mha]
      name=mha
      baseurl=ftp://192.168.1.234/rpm/6mha
      enabled=1
      gpgcheck=0
      给各个非manager节点安装mha4mysql-node。
      并执行:
      mysql> grant super,reload,replication client,select on . to manager@'192.168.1.%' identified by '1234';
      mysql> grant create,insert,update,delete,drop on. to manager@'192.168.1.%';
      mysql> flush privileges;

    在manager节点上编辑配置文件:
    vim /etc/masterha_default.cnf
    [server default]
    manager_workdir=/var/log/masterha/app1
    manager_log=/var/log/masterha/app1/manager.log
    remote_workdir=/var/log/masterha/app
    ssh_user=root
    user=manager
    password=1234
    repl_user=slave
    repl_password=1234
    ping_interval=1
    master_ip_failover_script="/etc/masterha/master_ip_failover"
    master_ip_online_change_script="/etc/masterha/master_ip_online_change"


    mkdir /etc/masterha
    vim /etc/masterha/app1.cnf

    [server default]
    manager_workdir=/var/log/masterha/app1
    manager_log=/var/log/masterha/app1/manager.log
    ssh_user=root
    user=manager
    password=1234
    repl_user=slave
    repl_password=1234
    ping_interval=1
    [server1]
    hostname=192.168.1.211
    candidate_master=1
    master_binlog_dir=/data/mysql/
    [server2]
    hostname=192.168.1.202
    candidate_master=1
    master_binlog_dir=/data/mysql/
    [server3]
    hostname=192.168.1.205
    /candidate_master=1/ 注释
    master_binlog_dir=/data/mysql/


    配置文件具体含义:
    manager_workdir=/var/log/masterha/app1 管理目录
    manager_log=/var/log/masterha/app1/manager.log 日志文件
    remote_workdir=/var/log/masterha/app 远程工作目录
    ssh_user=root 远程连接的用户
    user=manager mysql授权连接用户
    password=12345 密码
    repl_user=slave AB复制用户
    repl_password=123 密码
    ping_interval=1 ping的时间间隔,1秒
    [server1]
    hostname=192.168.1.202 node的IP
    candidate_master=1 当master宕机时,由当前node接替称为master
    当多个[serverX]等设置此参数时,优先级由[serverX]配置的顺序决定。
    master_binlog_dir=/data/mysql/


    secondary_check_script mha强烈建议有两个或多个网络线路检查MySQL主服务器的可用性。
    默认情况下,只有单一的路线 MHA Manager检查:从Manager to Master,但这是不可取的;
    MHA实际上可以有两个或两个以上的检查路线通过调用外部脚本定义二次检查脚本参数。
    master_ip_failover_script 在MySQL从服务器提升为新的主服务器时,调用此脚本,因此可以将vip信息写到此配置文件。
    master_ip_online_change_script 使用masterha_master_switch命令手动切换MySQL主服务器时后会调用此脚本,
    参数和master_ip_failover_script 类似,脚本可以互用 shutdown_script 此脚本(默认samples内的脚本)利用服务器的远程控制IDRAC等,使用ipmitool强制去关机,以避免fence设备重启主服务器,造成脑裂现象。
    report_script 当新主服务器切换完成以后通过此脚本发送邮件报告。
    

    master_ip_failover脚本:9zmp
    https://pan.baidu.com/s/1Sg42PavduMDNzuWax01u5Q
    
    master_ip_online_change脚本:qqqz
    https://pan.baidu.com/s/1QW1WXz_Mw4i0w2KQnS_f9A
    

    测试:
    使用mha工具check检查ssh:
        masterha_check_ssh --conf=/etc/masterha/app1.cnf  测试节点间互信
    

    使用mha工具check检查repl:
        注意:mysql_master 上需要绑定vip,否则工具卡在Checking the Status of the script.. OK。同时将slave节点置于read only
                    设置方法:ifconfig eth1:1 192.168.1.209 netmask 255.255.254.0 up。mysql> set global read_only=1;
        masterha_check_repl --conf=/etc/masterha/app1.cnf 测试节点间主从复制
    

    mha操作命令:
    + 启动manager:
        nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 & 启动并移除已死掉的节点
        tail -0f /var/log/masterha/app1/manager.log 动态查看日志信息
    + 查看状态:
        masterha_check_status --conf=/etc/masterha/app1.cnf
    + 关闭manager:
        masterha_stop --conf=/etc/masterha/app1.cnf
    + master死机切换测试:
        在mysql的master上,执行如下命令:echo c> /proc/sysrq-trigger
    



    相关内容:
    立即重启计算机 echo "b" > /proc/sysrq-trigger
    立即关闭计算机 echo "o" > /proc/sysrq-trigger
    导出内存分配的信息 echo "m" > proc/sysrq-trigger (可以用/var/log/message查看)Outputs memory statistics to the console
    导出当前CPU寄存器信息和标志位的信息 echo "p" > proc/sysrq-trigger (outputs all flags and registers to the console)
    导出线程状态信息 echo "t" > proc/sysrq-trigger (outputs a list of processes to the console)
    故意让系统崩溃 echo "c" > proc/sysrq-trigger (crashes the system without first unmounting file systems or syncing disks attached to the system)
    立即重新挂载所有的文件系统 echo "s" > proc/sysrq-trigger (attempts to sync disks attached to the system)
    立即重新挂载所有的文件系统为只读 echo "u" > proc/sysrq-trigger (attempts to unmount and remount all file systems as read-only)

    修复:

    修复原master:
    修复原master-192.168.1.205
    说明:这时候192.168.1.205因为故障,导致和另两台节点无法进行mysqlAB通信,可能会导致数据不一致;
    为了解决这个问题,最好是在现在的A上加一个读锁,做全库(单库)备份,把备份推送给192.168.1.205;
    192.168.1.205做恢复操作,保证和其他两个节点的数据是一致的;
    具体操作:
        /etc/init.d/mysqld start
         mysql
            mysql> change master to master_host='192.168.1.211',master_port=3306,master_user='slave',master_password='1234',master_log_file='mysql-bin.000005',master_log_pos=120;
            mysql> start slave;
            mysql> show slave statusG;
            mysql> grant replication slave,reload,super on *.* to slave@'192.168.1.%' identified by '1234';
            mysql> flush privileges;
            mysql> set global read_only=1;
        在完成192.168.1.205的B的操作后,A解除读锁。
    
    MHA操作:
    1. 删除上一次失效的日志     # cd /var/log/masterha/app1/    # ls
        app1.failover.complete manager.log
        rm -f app1.failover.complete
    2. 修改配置文件
         vim /etc/masterha/app1.cnf
        [server1]
        hostname=192.168.1.201
        candidate_master=1 <--注释
        master_binlog_dir=/data/mysql
        [server2]
        hostname=192.168.1.202
        candidate_master=1
        master_binlog_dir=/data/mysql/
        [server3]
        hostname=192.168.1.205
        candidate_master=1 <--打开注释
        master_binlog_dir=/data/mysql/
    3. 启动MHA
        masterha_check_repl --conf=/etc/masterha/app1.cnf
        nohup masterha_manager --conf=/etc/masterha/app1.cnf < /dev/null > /var/log/masterha/app1/manager.log &
        masterha_check_status --conf=/etc/masterha/app1.cnf
        现在的架构是:
        192.168.1.201 master
        192.168.1.202 slave
        192.168.1.205 slave
        说明:如果201再出现故障,202会接管,成为master。
    




  • 相关阅读:
    【Android 工具类】经常使用工具类(方法)大全
    driver: Linux设备模型之input子系统具体解释
    ural 1057 Amount of degrees 【数位dp】
    Java8 Lambda表达式教程
    Java线程池
    NodeJS实战——创建基础应用并应用模板引擎
    【网络】代理服务器
    【HTTP】Wireshark过滤规则
    【HTTP】WireShark中获取Content-Encoding: gzip时的响应内容
    【python】判断字符串日期是否有效
  • 原文地址:https://www.cnblogs.com/plutozzl/p/13092877.html
Copyright © 2011-2022 走看看