zoukankan      html  css  js  c++  java
  • CentOS7 以下安装Mysql MMM

    參考文档
    參考1
    參考2
    * 一. 规划

    server IP 作用
    monitor 192.168.1.210 监控server
    master-001 192.168.1.211 读写主机001
    master-002 192.168.1.212 读写主机002
    slave-001 192.168.1.213 仅仅读主机001
    slave-001 192.168.1.214 仅仅读主机002

    虚拟IP分配

    server 虚拟IP mysql读写状态
    192.168.1.220 writer
    192.168.1.221 reader
    192.168.1.222 reader
    192.168.1.223 reader

    • 二. 安装操作系统

      最小化安装CentOS7(64位)

    • 三. 配置操作系统

      • 1.关闭 selinux

        cat /etc/selinux/config    
        SELINUX=disabled  
      • 2.关闭防火墙

        systemctl stop firewalld
        systemctl disable firewalld
      • 3.配置NTP ,同步时间

      yum -y install ntp
      vi /etc/ntp.conf
      添加3个时间server
      server s2d.time.edu.cn iburst #西南地区网络中心
      server s2e.time.edu.cn iburst #西北地区网络中心
      server s2f.time.edu.cn iburst #东北地区网络中心
      
      启动ntp服务 
      systemctl start ntpd 
      systemctl enable ntpd 
      
      查看状态
      ntpq -p
    • 四. 安装MySQL 5.6 (不是MariaDB)

      • 1.安裝 MySQL Repository

        rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
      • 2.安裝 MySQL Server, MySQL client

        yum install mysql-community-server
      • 3.开机自己主动启动 MySQL

        systemctl enable mysqld
      • 4.启动MySQL

        systemctl start mysqld
      • 5.MySQL 预设为空密码, 執行以下指令改动

        mysql_secure_installation
        mysql -u root -p 
        
        #进入mysql 控制台。添加root用户远程登录的权限
        
        GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY 'GDkyUDJM6gr2Dx' WITH GRANT OPTION;
        flush privileges;
      • 6.改动mysql的存储文件夹

        • a. 停止mysql

          systemctl stop mysql
        • b. 迁移数据库存储文件夹

          mkdir /opt/mysql
          chown mysql:mysql /opt/mysql
          mv /var/lib/mysql /opt/mysql
          cd /opt/mysql
          mv mysql data
        • c. 改动配置文件

          vim /etc/my.cnf
          
          #改动datadir和socket指向
          
          datadir=/opt/mysql/data
          socket=/opt/mysql/mysql.sock
          
          #同一时候添加以下的代码。这个是为了让mysql client能够连上mysql。避免Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock错误!
          
          
          [mysql]
          socket=/opt/mysql/mysql.sock
        • d. 启动mysql

          systemctl start mysql
      • 7.配置MySQL Relication

        • a. 要将加入的内容放在配置文件/etc/my.cnf的[mysqld]部分
          主要内容例如以下:
          [mysqld]
          datadir=/opt/mysql/data
          socket=/opt/mysql/mysql.sock
          user=mysql
          
          #以下为新加入的内容
          
          read_only=1
          
          default-storage-engine=innodb
          
          replicate-ignore-db=mysql,information_schema #不同步的数据库。多个写多行
          replicate-do-db=meerkat        #同步的数据库,多个写多行
          
          binlog-ignore-db=mysql,information_schema  #不须要记录二进制日志的数据库,多个用逗号隔开
          binlog-do-db=meerkat           #须要记录二进制日志的数据库。多个用逗号隔开
          
          
          # 以下这三个參数一定要同一时候在my.cnf中配置。

          否则在mysql.err中会出现报错 gtid_mode= on log_slave_updates=1 #当一个主故障,另一个马上接管 enforce_gtid_consistency= 1 # 三个參数设置结束 sync-binlog=1 #每条自己主动更新,安全性高,默认是0 server-id = 1 #server-id在每台server上的值都是不一样,在这里依次为1、2、3、4。

          #这里的日志文件命名也每台机器不一样。比方(mysql-master-001-bin.log,mysql-master-002-bin.log,mysql-slave-001-bin.log,mysql-slave-002-bin.log) log-bin = /opt/mysql/log/mysql-master-001-bin.log log_bin_index = /opt/mysql/log/mysql-master-001-bin.log.index relay_log = /opt/mysql/log/mysql-master-001-bin.relay relay_log_index = /opt/mysql/log/mysql-master-001-bin.relay.index # 日志文件指定结束 expire_logs_days = 10 max_binlog_size = 100M log_slave_updates = 1

        更加具体的用于生产环境的配置 见这篇文章
        生产环境的mysql 5.6 和 5.7 的配置文件my.cnf

        • b. 在/opt/mysql下添加log文件夹

          cd /opt/mysql
          mkdir log
          chown mysql:mysql log
        • d. 又一次启动mysql

          systemctl restart mysql
        • e. 检查配置是否成功
          1)登录mysql,执行show master status,看是否有例如以下输出
          +——————+———-+————–+——————+——————-+
          | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
          +——————+———-+————–+——————+——————-+
          | mysql-master-001-bin.000001 | 120 | | mysql | |
          +——————+———-+————–+——————+——————-+
          2)到/var/log/mysql文件夹下。看是否产生了相似mysql-master-001-bin.000001和mysql-master-001-bin.log.index的文件。

        • f. 在4个mysql的server上都改动一下。注意日志命名每台机器都不一样

    • 五. 新建同步数据库须要的用户
      使用mysql-mmm时一共须要三个用户: replication、mmm_agent和mmm_monitor(管理server上用来监控cluster状态的用户,所以能够限定仅仅能从管理server登录)。使用以下三条命令新建这三个用户并分配对应的权限
      全部的mysql server都执行一遍

    GRANT REPLICATION CLIENT                 ON *.* TO 'mmm_monitor'@'192.168.1.%' IDENTIFIED BY 'monitor';
    GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.1.%'   IDENTIFIED BY 'agent';
    GRANT REPLICATION SLAVE                  ON *.* TO 'replication'@'192.168.1.%' IDENTIFIED BY 'replication';
    
    flush privileges;
    • 六.设置复制机制(从master-001拷贝到master-002,从master-002拷贝到slave-001,slave-002)

      • 1.配置master-001作为主,拷贝到master-002

        • a.配置master-001
          因为这里是配置master-001做为源数据。所以不须要设置change master 和 启动slave进程
        • b.配置master-002(指定 change master 为 master-001,表示从master-001 拷贝到 master-002)
          
          #ssh到 master-002 server
          
          mysql -u root -p 
          
          #在mysql控制台录入
          
          
          #这个是在my.cnf中没有使用GTID(MySQL5.6新特性)下的命令
          
          
          #CHANGE MASTER TO MASTER_HOST='192.168.1.211',MASTER_USER='replication',MASTER_PASSWORD='replication',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-master-002-bin.000001', MASTER_LOG_POS=260,MASTER_CONNECT_RETRY=10;
          
          
          # 这个是在my.cnf中使用GTID(MySQL5.6新特性)下的命令
          
          CHANGE MASTER TO MASTER_HOST='192.168.1.211',MASTER_USER='replication',MASTER_PASSWORD='replication',MASTER_PORT=3306,MASTER_AUTO_POSITION = 1;
          
          
          #重置reset
          
          reset slave;
          
          #启动slave
          
          start slave;
          
          #查看slave状态
          
          show slave statusG
          
          #结果例如以下
          
          mysql> show slave statusG
          *************************** 1. row ***************************
                 Slave_IO_State: Waiting for master to send event
                    Master_Host: 192.168.1.212
                    Master_User: replication
                    Master_Port: 3306
                  Connect_Retry: 10
                Master_Log_File: mysql-master-002-bin.000001
            Read_Master_Log_Pos: 120
                 Relay_Log_File: mysql-master-001-bin.000004
                  Relay_Log_Pos: 294
          Relay_Master_Log_File: mysql-master-002-bin.000001
               Slave_IO_Running: Yes
              Slave_SQL_Running: Yes
                Replicate_Do_DB:
            Replicate_Ignore_DB: mysql
             Replicate_Do_Table:
          Replicate_Ignore_Table:
          Replicate_Wild_Do_Table:
          Replicate_Wild_Ignore_Table:
                     Last_Errno: 0
                     Last_Error:
                   Skip_Counter: 0
            Exec_Master_Log_Pos: 120
                Relay_Log_Space: 472
                Until_Condition: None
                 Until_Log_File:
                  Until_Log_Pos: 0
             Master_SSL_Allowed: No
             Master_SSL_CA_File:
             Master_SSL_CA_Path:
                Master_SSL_Cert:
              Master_SSL_Cipher:
                 Master_SSL_Key:
          Seconds_Behind_Master: 0
          Master_SSL_Verify_Server_Cert: No
                  Last_IO_Errno: 0
                  Last_IO_Error:
                 Last_SQL_Errno: 0
                 Last_SQL_Error:
          Replicate_Ignore_Server_Ids:
               Master_Server_Id: 2
                    Master_UUID: 3d3b9f4f-f74f-11e5-9a30-005056b324c4
               Master_Info_File: /opt/mysql/data/master.info
                      SQL_Delay: 0
            SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
             Master_Retry_Count: 86400
                    Master_Bind:
          Last_IO_Error_Timestamp:
          Last_SQL_Error_Timestamp:
                 Master_SSL_Crl:
             Master_SSL_Crlpath:
             Retrieved_Gtid_Set:
              Executed_Gtid_Set:
                  Auto_Position: 0
          1 row in set (0.00 sec)

        注意:
        Slave_IO_Running: Yes
        Slave_SQL_Running: Yes

        • b.配置slave-001:(指定 change master 为 master-002,表示从master-002 拷贝到 slave-001)

          
          #ssh到 slave-001 server         
          
          mysql -u root -p 
          
          #在mysql控制台录入
          
          
          #这个是在my.cnf中没有使用GTID(MySQL5.6新特性)下的命令
          
          
          #CHANGE MASTER TO MASTER_HOST='192.168.1.212',MASTER_USER='replication',MASTER_PASSWORD='replication',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-slave-001-bin.000001', MASTER_LOG_POS=260,MASTER_CONNECT_RETRY=10;
          
          
          # 这个是在my.cnf中使用GTID(MySQL5.6新特性)下的命令
          
          CHANGE MASTER TO MASTER_HOST='192.168.1.212',MASTER_USER='replication',MASTER_PASSWORD='replication',MASTER_PORT=3306,MASTER_AUTO_POSITION = 1;
          
          
          #重置reset
          
          reset slave;
          
          #启动slave
          
          start slave;
          
          #查看slave状态
          
          show slave statusG
          
          #结果例如以下
          
          mysql> show slave statusG
        • c.配置slave-002(指定 change master 为 master-002,表示从master-002 拷贝到 slave-002)

          
          #ssh到 slave-002 server         
          
          mysql -u root -p 
          
          #在mysql控制台录入
          
          
          #这个是在my.cnf中没有使用GTID(MySQL5.6新特性)下的命令
          
          
          #CHANGE MASTER TO MASTER_HOST='192.168.1.212',MASTER_USER='replication',MASTER_PASSWORD='replication',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-slave-002-bin.000001', MASTER_LOG_POS=260,MASTER_CONNECT_RETRY=10;
          
          
          # 这个是在my.cnf中使用GTID(MySQL5.6新特性)下的命令
          
          CHANGE MASTER TO MASTER_HOST='192.168.1.212',MASTER_USER='replication',MASTER_PASSWORD='replication',MASTER_PORT=3306,MASTER_AUTO_POSITION = 1;
          
          
          #重置reset
          
          reset slave;
          
          #启动slave
          
          start slave;
          
          #查看slave状态
          
          show slave statusG
          
          #结果例如以下
          
          mysql> show slave statusG      
        • d.測试复制机制
          在master-001 上,增删改 表空间,表。字段。内容 能够同步到 master-002,slave-001,slave-002
      • 2.配置master-002作为主,拷贝到master-001

        • a.配置master-001(指定 change master 为 master-002。表示从master-002中拷贝到master-001)
          
          #ssh到 master-001 server
          
          mysql -u root -p 
          
          #在mysql控制台录入
          
          
          #这个是在my.cnf中没有使用GTID(MySQL5.6新特性)下的命令
          
          
          #CHANGE MASTER TO MASTER_HOST='192.168.1.212',MASTER_USER='replication',MASTER_PASSWORD='replication',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-master-001-bin.000001', MASTER_LOG_POS=260,MASTER_CONNECT_RETRY=10;
          
          
          # 这个是在my.cnf中使用GTID(MySQL5.6新特性)下的命令
          
          CHANGE MASTER TO MASTER_HOST='192.168.1.212',MASTER_USER='replication',MASTER_PASSWORD='replication',MASTER_PORT=3306,MASTER_AUTO_POSITION = 1;
          
          
          #重置reset
          
          reset slave;
          
          #启动slave
          
          start slave;
          
          #查看slave状态
          
          show slave statusG
          
          #结果例如以下
          
          mysql> show slave statusG

        这样就完毕了master-001 和 master-002的相互复制,而且从master-002拷贝到slave-001 和 slave-002.

      • 2.測试复制机制是否成功。


        • a.在master-001中建立database ,确认master-002,slave-001 和 slave-002中都同步复制。
        • b.在master-002中建立database ,确认master-001,slave-001 和 slave-002中都同步复制。

      • 3.MySQL5.6 GTID新特性实践
      • 4.mysql主从复制-CHANGE MASTER TO 语法具体解释
    • 七.安装MMM(http://mysql-mmm.org/

      • 1.安装epel扩展包
        CentOS软件仓库默认是不含这些软件的,必须要有epel这个包的支持。故我们必须先安装epel

        wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
        rpm -ivh epel-release-7-5.noarch.rpm
        yum install mysql-mmm-monitor
        yum install mysql-mmm-agent
        
        #用yum安装的 mysql-mmm组件启动的时候会出错。
        
        所以用以下的tar.gz文件来安装
        yum erase mysql-mmm-monitor 
        yum erase mysql-mmm-agent
      • 2.在monitor(192.168.1.210) 上安装监控程序

        cd /tmp
        wget http://pkgs.fedoraproject.org/repo/pkgs/mysql-mmm/mysql-mmm-2.2.1.tar.gz/f5f8b48bdf89251d3183328f0249461e/mysql-mmm-2.2.1.tar.gz
        tar -xzvf mysql-mmm-2.2.1.tar.gz
        cd mysql-mmm-2.2.1.tar.gz
        make install
      • 3.在数据库server(192.168.1.211-214)上安装代理

        cd /tmp
        wget http://pkgs.fedoraproject.org/repo/pkgs/mysql-mmm/mysql-mmm-2.2.1.tar.gz/f5f8b48bdf89251d3183328f0249461e/mysql-mmm-2.2.1.tar.gz
        tar -xzvf mysql-mmm-2.2.1.tar.gz
        cd mysql-mmm-2.2.1.tar.gz
        make install
      • 4.配置MMM

        • a.编辑/etc/mysql-mmm/mmm_common.conf
          完毕安装后,全部的配置文件都放到了/etc/mysql-mmm/以下。管理server和数据库server上都要包括一个共同的文件mmm_common.conf,内容例如以下:

          active_master_role writer
          <host default>
              cluster_interface  eno16777984  #网卡设备
              pid_path     /var/run/mmm_agentd.pid
              bin_path     /usr/lib/mysql-mmm/ #这里要确认是否以下有agent,monitor,tools的文件夹。

          否则无法生成vip replication_user replication replication_password replication agent_user mmm_agent agent_password agent </host> <host db1> ip 192.168.1.211 mode master peer db2 </host> <host db2> ip 192.168.1.212 mode master peer db1 </host> <host db3> ip 192.168.1.213 mode slave </host> <host db4> ip 192.168.1.214 mode slave </host> <role writer> hosts db1, db2 ips 192.168.1.220 mode exclusive </role> <role reader> hosts db2, db3, db4 ips 192.168.1.221, 192.168.1.222, 192.168.1.223 mode balanced </role>

          通过scp命令分别拷贝到monitor-001、master-001、master-002、slave-001和slave-002共五台机器上。

        • b. 编辑 4台mysql节点机上的/etc/mysql-mmm/mmm_agent.conf
          在数据库server上。另一个mmm_agent.conf须要改动,其内容是:

          include mmm_common.conf
          
          
          # The 'this' variable refers to this server.  Proper operation requires
          
          
          # that 'this' server (db1 by default), as well as all other servers, have the
          
          
          # proper IP addresses set in mmm_common.conf.
          
          this db1

          最后一行的db1,在不同的数据库server上要分别改为db2、db3和db4,否则代理就会无法启动。

        • c. 编辑 monitor主机上的/etc/mysql-mmm/mmm_mon.conf
          在monitor-001上配置mmm_mon.conf

          include mmm_common.conf
          
          <monitor>
              ip                  127.0.0.1   #为了安全性。设置仅仅在本机监听。mmm_mond 默认监听9988  
              pid_path            /var/run/mmm_mond.pid
              bin_path            /usr/lib/mysql-mmm/
              status_path         /var/lib/misc/mmm_mond.status
              ping_ips            192.168.1.211, 192.168.1.212, 192.168.1.213, 192.168.1.214       #用于測试网络可用性 IP 地址列表,仅仅要当中有一个地址 ping 通,就代表网络正常,这里不要写入本机地址  
              #flap_duration      3600 #抖动的时间范围,单位秒,这两个參数考虑情况加入  
              # flap_count         3 #在抖动的时间范围内,最大的抖动次数  
              auto_set_online      60#是否设置自己主动上线。假设该值大于0,抖动的主机在抖动的时间范围过后,则设置自己主动上线
          
              # The kill_host_bin does not exist by default, though the monitor will
              # throw a warning about it missing.  See the section 5.10 "Kill Host
          </monitor>
          
          <check default>
              check_period    5
              trap_period     10
              timeout         2
              #restart_after     10000
              max_backlog     86400
          </check>
          
          <host default>
              monitor_user        mmm_monitor
              monitor_password    monitor
          </host>
      • 5.自己主动启动agent 和 monitor

        • a. 在monitor上启动monitor

          systemctl enable mysql-mmm-monitor
          systemctl start mysql-mmm-monitor
        • b. 在4个数据库server上启动agent

           systemctl enable mysql-mmm-agent
           systemctl start mysql-mmm-agent

          假设出现Configuration file /etc/mysql-mmm/mmm_common.conf is world readable!这样的错误,须要查看/etc/mysql-mmm/mmm_common.conf文件的权限,应该是 chmod 640 /etc/mysql-mmm/mmm_common.conf
          集群中全部配置文件的权限最好都设置为640。否则启动 MMM 服务的时候可能出错

    • 八. MMM启动顺序:先启动monitor,再启动 agent

    • 九. 问题和解决的方法

      • 1.在monitor主机上使用 systemctl start mysql-mmm-monitor 无法分配vip。

        而通过/etc/init.d/mysql-mmm-monitor start则能够分配vip

      • 2.vip漂移后,无法ping通192.168.1.200

        • 问题描写叙述:
          当master-001发生问题,导致DB不可用时,VIP会自己主动漂移到master-002上,以实现高可用。但出现了一个问题,因为ARP老化时间过长。导致漂移过去的VIP不可用,也无法ping通。也就是说。MySQL-MMM没有考虑到ARP老化时间过长的情况而採取强刷ARP的方式。

        • a.解决的方法1

          • 同一时候改动master-001 和 master-002上的代码(这个没測试成功)
            改动文件
            /usr/share/perl5/vendor_perl/MMM/Agent/Helpers/Actions.pm

          vim /usr/share/perl5/vendor_perl/MMM/Agent/Helpers/Actions.pm

          在sub configure_ip($$)代码段里面的_exit_ok();前面加入以下代码

        
        #这里是解决vip偏移后。无法ping通。原因是arp 老化时间过长。这里强制刷新arp
        
        my $getway = `/sbin/route | awk 'default/ (print $2)'`
        `/sbin/arping -I $if -c 3 -s $ip $getway `;
        
        #配置结束
        

        如图

        • b.解决的方法2
          在vip漂移到的主机上手工重置arping

          arping -I eno16777984 -c 3 -s 192.168.1.220 192.168.1.1

        • c.解决的方法3
          在master-001 和 master-002 上使用shell脚本来刷新(这种方法正常执行)

          vim /root/refresh_vip.sh
          
          #添加例如以下内容:
          
          
          #!/bin/sh               
          
          PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
          MMM_COMM_CONF="/etc/mysql-mmm/mmm_common.conf"
          ETH_NAME=`awk '/cluster_interface/{print $2}' ${MMM_COMM_CONF}`
          VIP_ADDR=`grep -A 2 '<role writer>' ${MMM_COMM_CONF} | awk '/ips/{print $2}'`
          GETWAY_ADDR=`/sbin/route | awk '/default/ {print $2}'`
          
          if [[ -n `/sbin/ip addr show ${ETH_NAME} | grep ${VIP_ADDR}` ]]; then
              /sbin/arping -I ${ETH_NAME} -c 3 -s ${VIP_ADDR} ${GETWAY_ADDR} >/dev/null 2>&1
          fi

          放入crontab中执行

          crontab -e
          * * * * * sleep 10; /root/refresh_vip.sh >/dev/null 2>&1
          * * * * * sleep 20; /root/refresh_vip.sh >/dev/null 2>&1
          * * * * * sleep 30; /root/refresh_vip.sh >/dev/null 2>&1
          * * * * * sleep 40; /root/refresh_vip.sh >/dev/null 2>&1
          * * * * * sleep 50; /root/refresh_vip.sh >/dev/null 2>&1
  • 相关阅读:
    Roce ofed 环境搭建与测试
    Ubuntu 1804 搭建NFS服务器
    Redhat 8.0.0 安装与网络配置
    Centos 8.1 安装与网络配置
    SUSE 15.1 系统安装
    VSpare ESXi 7.0 基本使用(模板、iso、SRIOV)
    VSpare ESXi 7.0 服务器安装
    open SUSE leap 15.1 安装图解
    KVM虚拟机网卡连接网桥
    GitHub Action一键部署配置,值得拥有
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7275683.html
Copyright © 2011-2022 走看看