zoukankan      html  css  js  c++  java
  • 马哥博客作业第十四周

    #### 1 MariaDB主从复制原理

    1.主节点的更新事件写入binlog;

    2.主节点创建一个binlog dump线程,把binlog的内容发送到从节点;

    3.从接点连接主节点以后,创建一个I/O线程,读取主节点传过来的binlog内容并写入到relay log;

    4.从节点创建一个SQL线程,读取relay log里面的更新事件并解析成SQL语句,然后执行这些SQL语句,将更新内容写入到从节点。

    #### 2 MariaDB一主一从架构构建

    准备两台纯新的CentOS7.6服务器,其中主机称为node1的服务器地址为192.168.130.132,主机称为node2的服务器地址为192.168.130.133

    主节点(node1):

    [root@node1 ~]# cat /etc/my.cnf.d/mariadb-server.cnf

    [mysqld]

    server-id=132

    log-bin

    [root@node1 ~]# service mysqld restart

    [root@node1 ~]# mysql -uroot -p123456

    MariaDB [(none)]> grant replication slave on *.* to repluser@'192.168.130.%' identified by 'centos';

    MariaDB [(none)]> show master logs;

    +--------------------+-----------+
    | Log_name         | File_size |
    +--------------------+-----------+
    | mariadb-bin.000001 | 401 |
    +--------------------+-----------+

    从节点(node2):

    [root@node2 ~]# cat /etc/my.cnf.d/mariadb-server.cnf

    [mysqld]

    server-id=133

    [root@node2 ~]# service mysqld restart

    [root@node2 ~]# mysql -uroot -p123456

    MariaDB [(none)]> CHANGE MASTER TO

    MASTER_HOST='192.168.130.132', #连接master IP地址

    MASTER_USER='repluser',

    MASTER_PASSWORD='centos',

    MASTER_PORT=3306,

    MASTER_LOG_FILE='mariadb-bin.000001',

    MASTER_LOG_POS=401;

    start slave;

    show slave statusG

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

    #### 3 MariaDB级联复制

    上一节中我们完成了一主一从的MariaDB的主从复制架构,但是有的时候,我们期望有一个后备的MariaDB的节点,用只

    动词}备份存储数据,不需要对外提供服务。为了实现该功能,我们可以在之前的一主一从架构上进行调整,即将从节点的二进

    制文件打开,然后给他配置一个远程同步数据用户,接着使用一台新的服务器做为从服务器的从属同步从服务器数据的即柯林斯,下面我们在原来的架构上添加一台新的CentOS7.6,作为节点3,IP地址为192.168.132.134

    node1:

    [root@node1 ~]# cat /etc/my.cnf.d/mariadb-server.cnf

    [mysqld]

    server-id=132

    log-bin

    [root@node1 ~]# service mysqld restart

    [root@node1 ~]# mysql -uroot -p123456

    MariaDB [(none)]> grant replication slave on *.* to repluser@'192.168.130.%' identified by 'centos';

    node2:
    [root@node2 ~]# cat /etc/my.cnf.d/mariadb-server.cnf

    [mysqld]

    server-id=133

    log-bin

    read-only

    log_slave_updates

    [root@node2 ~]# mysql -uroot -p123456

    MariaDB [(none)]> show master logs; #记录二进制位置,给第三节点使用

    +--------------------+----------------+
    | Log_name            | File_size |
    +--------------------+----------------+
    | mariadb-bin.000001 | 245 |
    +--------------------+----------------+

    node3:

    [root@node3 ~]# cat /etc/my.cnf.d/mariadb-server.cnf

    [mysqld]

    server-id=134

    read-only

    [root@node3 ~]# mysql -uroot -p123456

    MariaDB [(none)]>CHANGE MASTER TO

    MASTER_HOST='192.168.130.133', #连接中间节点 IP地址

    MASTER_USER='repluser',

    MASTER_PASSWORD='centos',

    MASTER_PORT=3306,

    MASTER_LOG_FILE='mariadb-bin.000001',

    MASTER_LOG_POS=245;

    检查状态

    start slave;

    show slave statusG

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

    #### 4 MariaDB半同步复制

    yum安装的mariadb-10并且配置好主从同步

    主节点:

    [root@sz-gl-centos8 ~]# vim /etc/my.cnf.d/mariadb-server.cnf

    [mysqld]

    server-id=100

    log-bin

    plugin-load-add=semisync_master

    rpl_semi_sync_master_enabled=ON

    rpl_semi_sync_master_timeout=3000

    [root@sz-kx-centos8 ~]# systemctl restart mariadb

    [root@sz-kx-centos8 ~]# mysql -uroot -p123456

    MariaDB [(none)]> show global variables like '%semi%';

    MariaDB [(none)]> show global status like '%semi%';

    从节点:

    [root@sz-kx-centos8 ~]# vim /etc/my.cnf.d/mariadb-server.cnf

    [mysqld]

    server-id=108

    plugin_load_add=semisync_slave

    rpl_semi_sync_slave_enabled=ON

    [root@sz-kx-centos8 ~]# systemctl restart mariadb

    [root@sz-kx-centos8 ~]# mysql -uroot -p123456

    MariaDB [(none)]> show global variables like '%semi%';

    MariaDB [(none)]> show global status like '%semi%';

    MariaDB [(none)]> START SLAVE IO_THREAD;

    主节点:

    MariaDB [(none)]> show global status like '%semi%';

    +--------------------------------------------+----------------------+
    | Variable_name                                               | Value |
    +--------------------------------------------+----------------------+
    | Rpl_semi_sync_master_clients                           | 1 |
    | Rpl_semi_sync_master_get_ack                        | 0 |
    | Rpl_semi_sync_master_net_avg_wait_time      | 0 |
    | Rpl_semi_sync_master_net_wait_time              | 0 |
    | Rpl_semi_sync_master_net_waits                     | 0 |
    | Rpl_semi_sync_master_no_times                      | 1 |
    | Rpl_semi_sync_master_no_tx                            | 1 |
    | Rpl_semi_sync_master_request_ack                 | 1 |
    | Rpl_semi_sync_master_status                        | ON |

    测试:

    在主节点创建数据库,立即成功

    MariaDB [(none)]> create database db1;

    Query OK, 1 row affected (0.001 sec)

    在从节点实现,停止复制线程

    MariaDB [(none)]> stop slave;

    在主节点创建数据库,需要等待3s才成功

    MariaDB [(none)]> create database db2;

    Query OK, 1 row affected (3.001 sec)

    在从节点恢复线程

    MariaDB [(none)]> start slave;

    Query OK, 0 rows affected (0.001 sec)

    在主节点创建数据库,立即成功

    MariaDB [(none)]> create database db3;

    Query OK, 1 row affected (0.004 sec)

    yum安装mariadb-5.5.6实现半同步复制

    主节点:

    #安装master插件,无须重启

    MariaDB [(none)]> INSTALL SONAME 'semisync_master';

    #开启master_sync

    MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_enabled=ON;

    #设置超时时长为1s

    MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_timeout = 1000;

    #查看相关全局变量

    MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%semi%';

    #查看当前状态信息

    MariaDB [(none)]> SHOW GLOBAL STATUS LIKE '%semi%';

    +--------------------------------------------+-------------+
    | Variable_name                                     | Value |
    +--------------------------------------------+--------------+
    | Rpl_semi_sync_master_clients             | 0 |

    从节点:

    #安装从插件

    MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

    #启动从插件

    MariaDB [(none)]> SET GLOBAL rpl_semi_sync_slave_enabled=1;

    MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%semi%';

    #此时发现slave是关闭的

    MariaDB [(none)]> SHOW GLOBAL STATUS LIKE '%semi%';

    +----------------------------+-------------------+
    | Variable_name                        | Value |
    +----------------------------+-------------------+
    | Rpl_semi_sync_slave_status | OFF |
    +----------------------------+-------------------+

    #重启线程

    MariaDB [(none)]> STOP SLAVE IO_THREAD;

    MariaDB [(none)]> START SLAVE IO_THREAD;

    #插件开启

    MariaDB [(none)]> SHOW GLOBAL STATUS LIKE '%semi%';

    +----------------------------+------------------+
    | Variable_name                      | Value |
    +----------------------------+------------------+
    | Rpl_semi_sync_slave_status | ON |
    +----------------------------+-------------------+

    主节点:

    MariaDB [(none)]> SHOW GLOBAL STATUS LIKE '%semi%';

    +--------------------------------------------+-------+
    | Variable_name                            | Value |
    +--------------------------------------------+-------+
    | Rpl_semi_sync_master_clients        | 2 |

    #### 5 MariaDB高可用方案MHA

    准备三台新安装的CentOS7.6服务器,并使用yum安装MariaDB10.2.23,主机名分别为node1,node2,node3,IP地址分别为192.168.130.132-134

    node1/2/3安装mariadb

    [root@node1 ~]# vim /etc/yum.repos.d/mariadb.repo

    [mariadb]

    name=MariaDB

    baseurl=http://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos7-amd64/

    gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB

    gpgcheck=1

    [root@node1 ~]# yum -y install mariadb-server

    node1配置

    [root@node1 ~]# vim /etc/my.cnf.d/server.cnf

    [mysqld]

    server-id=132

    log-bin

    skip_name_resolve=1

    general_log

    [root@node1 ~]# systemctl enable mariadb.service

    [root@node1 ~]# systemctl start mariadb.service

    [root@node1 ~]# mysql_secure_installation

    [root@node1 ~]# mysql -uroot -p

    MariaDB [(none)]> show master status;

    找个文本记住下面的信息,一会需要到

    File:mha-manager-bin.000001和Position:364

    MariaDB [(none)]> grant replication slave on *.* to repluser@'192.168.130.%' identified by 'centos';

    MariaDB [(none)]> grant all on *.* to mhauser@'192.168.130.%' identified by 'mhacentos';

    [root@node1 ~]# ifconfig eth0:1 192.168.130.200/24

    [root@node1 ~]# yum -y install mha4mysql-manager-0.57-0.el7.noarch.rpm mha4mysql-node-0.57-0.el7.noarch.rpm

    [root@node1 ~]# ssh-keygen

    [root@node1 ~]# ssh-copy-id 192.168.130.132

    [root@node1 ~]# rsync -a .ssh 192.168.130.133:/root/

    [root@node1 ~]# rsync -a .ssh 192.168.130.134:/root/

    [root@node1 ~]# scp mha4mysql-node-0.57-0.el7.noarch.rpm root@192.168.130.133:/root/

    [root@node1 ~]# scp mha4mysql-node-0.57-0.el7.noarch.rpm root@192.168.130.134:/root/

    [root@node1 ~]# mkdir -p /data/mha/app1

    [root@node1 ~]# mkdir /etc/mha

    注意:app1.cnf 配置文件有的脚本,需要提前准备好

    [root@node1 ~]# vim /etc/mha/app1.cnf

    [server default]

    user=mhauser

    password=mhcentos

    manager_workdir=/data/mha/app1/

    manager_log=/data/mha/app1/manager.log

    remote_workdir=/data/mha/app1/

    ssh_user=root

    repl_user=repluser

    repl_password=centos

    ping_interval=1

    master_ip_failover_script=/usr/local/bin/master_ip_failover

    #master_ip_online_change_script=/usr/local/bin/master_ip_online_change

    report_script=/usr/local/bin/sendmail.sh

    check_repl_delay=0

    [server1]

    hostname=192.168.130.132

    [server2]

    hostname=192.168.130.133

    candidate_master=1

    [server3]

    hostname=192.168.130.134

    node2配置

    [root@node1 ~]# yum -y install mha4mysql-node-0.57-0.el7.noarch.rpm

    node2修改mariadb配置文件

    [root@node1 ~]# vim /etc/my.cnf.d/server.cnf

    [mysqld]

    server-id=133

    log-bin

    read_only

    skip_name_resolve=1

    relay_log_purge=0

    [root@node1 ~]# systemctl enable mariadb.service

    [root@node1 ~]# systemctl start mariadb.service

    [root@node1 ~]# mysql_secure_installation

    [root@node1 ~]# mysql -uroot -p

    MariaDB [(none)]> change master to

    master_host='192.168.130.132',

    master_user='repluser',

    master_password='centos',

    master_port=3306,

    master_log_file='mha-manager-bin.000001',

    master_log_pos=364;

    MariaDB [(none)]> start slave;

    MariaDB [(none)]> show slave statusG

    node3配置

    [root@node1 ~]# yum -y install mha4mysql-node-0.57-0.el7.noarch.rpm

    node3修改mariadb配置文件

    [root@node1 ~]# vim /etc/my.cnf.d/server.cnf

    [mysqld]

    server-id=134

    log-bin

    read_only

    skip_name_resolve=1

    relay_log_purge=0

    [root@node1 ~]# systemctl enable mariadb.service

    [root@node1 ~]# systemctl start mariadb.service

    [root@node1 ~]# mysql_secure_installation

    [root@node1 ~]# mysql -uroot -p

    MariaDB [(none)]> change master to

    master_host='192.168.130.132',

    master_user='repluser',

    master_password='centos',

    master_port=3306,

    master_log_file='mha-manager-bin.000001',

    master_log_pos=364;

    MariaDB [(none)]> start slave;

    MariaDB [(none)]> show slave statusG

    mha-manager配置

    node1检查SSH连接

    [root@node1 ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf

    node1检查复制

    [root@node1 ~]# vim /usr/local/bin/master_ip_failover

    my $vip设置mha-manager虚拟IP

    my $gateway设置默认网关IP

    my $interface设置网卡名称

    授权

    [root@node1 ~]# chmod +x /usr/local/bin/master_ip_failover

    [root@node1 ~]# chmod +x /usr/local/bin/sendmail.sh

    [root@node1 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf

    node1启动mha manager
    [root@node1 ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf &

    [root@node1 ~]# masterha_check_status --conf=/etc/mha/app1.cnf

    测试master自动切换

    node1执行

    [root@node1 ~]# systemctl stop mariadb.service

    node1停止mariadb服务后,master自动切换到node2,虚拟IP也切换到node2上

    注意事项:

    master自动切换后masterha_manager会退出,node1重新启动mariadb服务后需要连接到新的主节点,操作过程如下:

    新的master执行

    MariaDB [(none)]> show master status;

    记住File和Position的值,当前为slave1-bin.000001,1771

    node1连接master节点

    MariaDB [(none)]> change master to

    master_host='192.168.130.133',

    master_user='repluser',

    master_password='centos',

    master_port=3306,

    master_log_file='slave1-bin.000001',

    master_log_pos=1771;

    MariaDB [(none)]> start slave;

    再次启动masterha_manager

    [root@node1 ~]# rm -rf /data/mha/app1/app1.failover.complete

    [root@node1 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf

    [root@node1 ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf &

    [root@node1 ~]# masterha_check_status --conf=/etc/mha/app1.cnf

  • 相关阅读:
    crontab 启动supervisor爬虫
    frida初体验
    Protobuf 的数据反解析
    adb
    突破SSL Pinning抓app的数据包
    Charles下载与配置
    替换小技巧
    docker 使用
    pandas读取excel
    docker 安装
  • 原文地址:https://www.cnblogs.com/xuanlv-0413/p/13629333.html
Copyright © 2011-2022 走看看