MYSQL主主复制HA

captains 2021-07-20 PM 1326℃ 0条

20210720153334.jpg

1. 数据库安装

1.1 mysql安装

1.1.1 安装mysqld

PS :分别在docloud008和docloud012上按照以下步骤安装mysqld

  • 配置mysql yum源并安装

     yum install http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm -y
  • 安装mysql

    yum install mysql-community-server -y
  • 启动mysql

    systemctl start mysqld && systemctl enable mysqld
  • 修改mysql密码

    #获取默认密码
    sudo grep 'temporary password' /var/log/mysqld.log
    # 登陆mysql
    mysql -uroot -p 
    #修改mysql密码
    set password for 'root'@'localhost'=password('MyNewPass4!');
    # 修改远程登录密码
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root用户的密码' WITH GRANT OPTION;
    # 刷新
    flush privileges;
  • 配置mysql的配置文件

    #停止mysql服务
    systemctl stop mysqld
    # 修改配置文件
    vim /etc/my.cnf
    [mysqld]
    port=3308
    #设置UTF-8编码
    character_set_server=utf8
    init_connect='SET NAMES utf8'
    #datadir=/var/lib/mysql
    #修改数据存储目录
    datadir=/hdata/mysql_data/mysql
    socket=/var/lib/mysql/mysql.sock
    # Disabling symbolic-links is recommended to prevent assorted #security risks
    symbolic-links=0
    #修改日志存储目录
    log-error=/hdata/mysql_data/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    #开启binlog
    #binlog日志,即binary log,是二进制日志文件。它有两个作用,一是增量备份,#即只备份新增的内容;二是用于主从复制等,即主节点维护了一个binlog日志文#件,从节点从binlog中同步数据。
    #当数据被误操作删除时,我们可以通过binlog日志恢复数据。
    server-id=1   # 注意,集群没唯一id,master01为1,master02为2
    log-bin=/hdata/mysql_data/binlog/bin-log
    #修改最大写入包
    max_allowed_packet=10485760
    #最大连接数
    max_connections=1000
    #设置默认时区
    default-time-zone = '+08:00'
  • 将/var/lib/mysql拷贝到/hdata/mysql_data

    cd /var/lib
    sudo cp -r mysql  /hdata/mysql_data/
  • 创建存储目录

    mkdir -pv /hdata/mysql_data/{log,binlog}
  • 修改mysql数据目录和日志目录文件夹属性

    sudo chown -R mysql:mysql /hdata/mysql_data
  • 重启mysql

    systemctl start mysqld

1.1.2 创建mysql主主复制

  • 在master01上增加以下配置

    [root@docloud008 ~]# vim /etc/my.cnf
    # 主主复制配置
    binlog_format = mixed
    relay-log = relay-bin
    relay-log-index = slave-relay-bin.index
    auto-increment-increment = 2
    auto-increment-offset = 1
  • 在master02上增加以下配置

    [root@docloud012 ~]# vim /etc/my.cnf
    # 主主复制配置
    binlog_format = mixed
    relay-log = relay-bin
    relay-log-index = slave-relay-bin.index
    auto-increment-increment = 2
    auto-increment-offset = 2
  • 分别重启master01和master02的mysqld服务

    # master01
    [root@docloud006 ~]# systemctl restart mysqld
    # master02
    [root@docloud012 ~]# systemctl restart mysqld
  • 在master01上创建同步账户

    mysql> GRANT REPLICATION SLAVE ON *.* TO 'rep'@'172.20.0.44' IDENTIFIED BY '1qaz@WSX';
  • 在master01上查看binlog状态信息

    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 |      154 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
  • 在master02上将master01设置为主服务器并开启slave

    mysql> CHANGE MASTER TO
        -> MASTER_HOST='172.20.0.44',
        -> MASTER_USER='rep',
        -> MASTER_PASSWORD='1qaz@WSX',
        -> MASTER_PORT=3306,
        -> MASTER_LOG_FILE='mysql-bin.000001',
        -> MASTER_LOG_POS=154;
    Query OK, 0 rows affected, 2 warnings (0.00 sec)
    
    mysql> start slave;
    Query OK, 0 rows affected (0.00 sec)
  • 查看同步状态,都为yes为成功

请输入图片描述

Slave_IO_Running和Slave_SQL_Running这两个值必须为Yes,代表从服务器能正常连接服务器

  • 在master02上创建授权账户

    mysql> GRANT REPLICATION SLAVE ON *.* TO 'rep'@'172.20.0.41' IDENTIFIED BY '1qaz@WSX'
  • 在master02上查看binlog状态

    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 |      154 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
  • 在master01上设置master02为主服务器并开启slave

    mysql> CHANGE MASTER TO
        -> MASTER_HOST='172.20.0.41',
        -> MASTER_USER='rep',
        -> MASTER_PASSWORD='1qaz@WSX',
        -> MASTER_PORT=3306,
        -> MASTER_LOG_FILE='mysql-bin.000001',
        -> MASTER_LOG_POS=154;
    Query OK, 0 rows affected, 2 warnings (0.00 sec)
    mysql> start slave;
    Query OK, 0 rows affected (0.00 sec)
  • 查看同步状态

image-20210413172310450

1.1.3 安装keepalived

  • 在master01上安装

    $ yum install keepalived -y
    # 修改配置文件
    $ vim /etc/keepalived/keepalived.conf
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
    #   vrrp_strict                         # 关闭组播
       vrrp_garp_interval 0
       vrrp_gna_interval 0
       }
      vrrp_instance VI_2 {
          state BACKUP                      # 服务状态;MASTER(工作状态)BACKUP(备用状态)
          interface eth0                  # VIP绑定网卡
          virtual_router_id 52              # 虚拟路由ID,主、备节点必须一致
          mcast_src_ip 172.20.0.41      # 本机IP
          priority 100                      # 优先级;取值范围:0~254;MASTER > BACKUP
          advert_int 1                      # 组播信息发送间隔,主、备节点必须一致,默认1s
          nopreempt                         # 开启非抢占模式
          unicast_src_ip 172.20.0.41     # 单播源地址
          unicast_peer {
            172.20.0.44                     # 单播目的地址
          }
          authentication {                  # 验证信息;主、备节点必须一致
              auth_type PASS              # VRRP验证类型,PASS、AH两种
              auth_pass 1111              # VRRP验证密码,在同一个vrrp_instance下,主、从必须使用相同的密码才能正常通信
          }
          virtual_ipaddress {             # 虚拟IP池,主、备节点必须一致,可以定义多个VIP
              172.20.0.102             # 虚拟IP
          }
      }
    
  • 在master02上安装keepalived

    $ yum install keepalived -y
    # 修改配置文件
    $ vim /etc/keepalived/keepalived.conf
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
    #   vrrp_strict                         # 关闭组播
       vrrp_garp_interval 0
       vrrp_gna_interval 0
       }
      vrrp_instance VI_2 {
          state BACKUP                      # 服务状态;MASTER(工作状态)BACKUP(备用状态)
          interface eth0                  # VIP绑定网卡
          virtual_router_id 52              # 虚拟路由ID,主、备节点必须一致
          mcast_src_ip 172.20.0.44      # 本机IP
          priority 100                      # 优先级;取值范围:0~254;MASTER > BACKUP
          advert_int 1                      # 组播信息发送间隔,主、备节点必须一致,默认1s
          nopreempt                         # 开启非抢占模式
          unicast_src_ip 172.20.0.44     # 单播源地址
          unicast_peer {
            172.20.0.41                 # 单播目的地址
          }
          authentication {                  # 验证信息;主、备节点必须一致
              auth_type PASS              # VRRP验证类型,PASS、AH两种
              auth_pass 1111              # VRRP验证密码,在同一个vrrp_instance下,主、从必须使用相同的密码才能正常通信
          }
          virtual_ipaddress {             # 虚拟IP池,主、备节点必须一致,可以定义多个VIP
              172.20.0.102             # 虚拟IP
          }
      }
  • 分别重启master01和master02的keepalived

    systemctl restart keepalived
    # 查看ip,会显示172.20.0.102的ip地址
    ip a
标签: MYSQL

非特殊说明,本博所有文章均为博主原创。

评论啦~