• ADADADADAD

    配置MySQL高可用集群MHA[ mysql数据库 ]

    mysql数据库 时间:2024-12-03 10:30:09

    作者:文/会员上传

    简介:

    配置MySQL高可用集群+++++++++++++++++++主机角色 :客户端 client50数据库服务器 mysql51 到 mysql55管理主机 mgm56VIP地址192.168.4.100拓扑结构:client50| mysql51主 |||||

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    配置MySQL高可用集群+++++++++++++++++++
    主机角色 :
    客户端 client50
    数据库服务器 mysql51 到 mysql55
    管理主机 mgm56
    VIP地址192.168.4.100
    拓扑结构:

    client50| mysql51主 |

    |||| |
    mysql52mysql53mysql54mysql55mgm56
    从从 从从 管理集群
    备用主 备用主
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    配置MySQL主从同步结构:一主多从
    配置主库51
    配置备用从库52
    配置备用从库53
    配置纯从库54
    配置纯从库55

    51-55都要进行
    安装mysql【yum -y installmysql-community-*】
    mysql-5.7.17.tartar -xf
    mysql-community-client-5.7.17-1.el7.x86_64.rpm
    mysql-community-common-5.7.17-1.el7.x86_64.rpm
    mysql-community-devel-5.7.17-1.el7.x86_64.rpm
    mysql-community-embedded-5.7.17-1.el7.x86_64.rpm
    mysql-community-embedded-compat-5.7.17-1.el7.x86_64.rpm
    mysql-community-embedded-devel-5.7.17-1.el7.x86_64.rpm
    mysql-community-libs-5.7.17-1.el7.x86_64.rpm
    mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm
    mysql-community-minimal-debuginfo-5.7.17-1.el7.x86_64.rpm
    mysql-community-server-5.7.17-1.el7.x86_64.rpm
    mysql-community-test-5.7.17-1.el7.x86_64.rpm
    在所有服务器51-56上安装mha_node软件[mha4mysql-node-0.56-0.el6.noarch.rpm]
    ]#yum -yinstall perl-DBD-mysql
    ]#rpm -ivhmha4mysql-node-0.56-0.el6.noarch.rpm
    一、配置所有数据库主机之间可以互相以ssh密钥对方式认证登陆[免密码]

    二、配置manager56主机 无密码ssh登录 所有数据库主机【免密码】

    三、配置主从同步,要求如下:
    51 主库开半同步复制
    52 从库(备用主库)开半同步复制
    53 从库(备用主库)开半同步复制
    54 从库 不做备用主库所以不用开半同步复制
    55 从库 不做备用主库所以不用开半同步复制
    配置半同步复制模式

    查看当前的数据库服务是否支持动态加载模块
    mysql>showvariableslike'have_dynamic_loading';

    +----------------------+-------+
    | Variable_name| Value |
    +----------------------+-------+
    | have_dynamic_loading | YES |
    +----------------------+-------+

    使用命令安装模块
    mysql>
    mysql> INSTALL PLUGIN rpl_semi_sync_master
    -> SONAME 'semisync_master.so';

    mysql> INSTALL PLUGIN rpl_semi_sync_slave
    ->SONAME'semisync_slave.so';

    查看模块状态
    mysql>
    SELECTPLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS
    WHERE PLUGIN_NAME LIKE '%semi%';
    +----------------------+---------------+
    | PLUGIN_NAME| PLUGIN_STATUS |
    +----------------------+---------------+
    | rpl_semi_sync_master | ACTIVE|
    | rpl_semi_sync_slave| ACTIVE|
    +----------------------+---------------+
    启用半同步复制
    mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
    mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;

    查看是否启用成功
    mysql>showvariableslike'rpl_semisync%_enabled';
    +------------------------------+-------+
    | Variable_name| Value |
    +------------------------------+-------+
    | rpl_semi_sync_master_enabled | ON|
    | rpl_semi_sync_slave_enabled| ON|
    +------------------------------+-------+
    把配置写进配置文件,使其永久生效

    3.1、master51配置:
    vim/etc/my.cnf
    [mysqld]
    #开启插件加载半同步复制
    plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
    rpl-semi-sync-master-enabled = 1
    rpl-semi-sync-slave-enabled = 1

    relay_log_purge=off; //不允许自动删除中继日志文件【mysql> set global relay_log_purge=off;】

    server_id=51
    log-bin=master51
    binlog-format="mixed"
    :wq
    #systemctl restart mysqld
    #mysql -uroot -p123abcxyz
    mysql> grantreplication slaveon.to repluser@"%"identified by "123abcxyz";
    mysql> show master status;
    注意:备用52-53上也要有repluser用户
    3.2、备用master52的配置
    vim /etc/my.cnf
    [mysqld]
    plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
    rpl-semi-sync-master-enabled = 1
    rpl-semi-sync-slave-enabled = 1

    relay_log_purge=off; //不允许自动删除中继日志文件【mysql> set global relay_log_purge=off;】

    server_id=52
    log-bin=master52
    binlog-format="mixed"
    :wq
    #systemctl restart mysqld
    ]# ls /var/lib/mysql/master52.*
    /var/lib/mysql/master52.000001/var/lib/mysql/master52.index

    #mysql -uroot -p123abcxyz
    mysql> change master to
    -> master_host="192.168.4.51",
    -> master_user="repluser",
    -> master_password="123abcxyz",
    -> master_log_file="master51.000001",
    -> master_log_pos=441;
    Query OK, 0 rows affected, 2 warnings (0.04 sec)
    mysql> start slave;
    Query OK, 0 rows affected (0.01 sec)
    mysql> show slave status\G;
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

    3.3、备用master53的配置
    ]#vim /etc/my.cnf
    [mysqld]
    plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
    rpl-semi-sync-master-enabled = 1
    rpl-semi-sync-slave-enabled = 1

    relay_log_purge=off; //不允许自动删除中继日志文件【mysql> set global relay_log_purge=off;】

    server_id=53
    log-bin=master53
    binlog-format="mixed"
    :wq

    ]# systemctlrestart mysqld
    ]# ls /var/lib/mysql/master53.*

    ]# mysql -uroot -p123abcxyz
    mysql> change masterto master_host="192.168.4.51",master_user="repluser",master_password="123abcxyz",master_log_file="master51.000001",master_log_pos=441;
    Query OK, 0 rows affected, 2 warnings (0.05 sec)

    mysql> start slave;
    Query OK, 0 rows affected (0.00 sec)
    mysql> showslave status\G;
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

    3.4、配置从服务器54

    ]# vim /etc/my.cnf
    [mysqld]
    server_id=54
    :wq

    ]# systemctlrestart mysqld
    ]# mysql -uroot -p123abcxyz
    mysql> change masterto master_host="192.168.4.51",master_user="repluser",master_password="123abcxyz",master_log_file="master51.000001",master_log_pos=441;
    Query OK, 0 rows affected, 2 warnings (0.09 sec)

    mysql> start slave;
    Query OK, 0 rows affected (0.00 sec)

    mysql> showslave status\G;
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

    3.5、配置从服务器55
    ]# vim /etc/my.cnf
    [mysqld]
    server_id=55
    :wq
    ]# systemctlrestart mysqld

    ]# mysql -uroot -p123abcxyz
    mysql> change masterto master_host="192.168.4.51",master_user="repluser",master_password="123abcxyz",master_log_file="master51.000001",master_log_pos=441;
    Query OK, 0 rows affected, 2 warnings (0.09 sec)

    mysql> start slave;
    Query OK, 0 rows affected (0.00 sec)

    mysql> showslave status\G;
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    [配置51-55主从同步完成]
    阿保存在所有数据库服务器51-55上授权监控用户
    mysql>
    grant allon . to root@'%'identifiedby'123abcxyz';
    ++++++++++++++++++++++++++++++++++
    准备集群环境:
    1 在所有主机上安装共享目录里的perl软件包 (51-56)
    公共配置:在所有主机上安装软件软件包
    perl-Config-Tiny-2.14-7.el7.noarch.rpm
    perl-Mail-Sender-0.8.23-1.el7.noarch.rpm
    perl-MIME-Types-1.38-2.el7.noarch.rpm
    perl-Email-Date-Format-1.002-15.el7.noarch.rpm
    perl-Mail-Sendmail-0.79-21.el7.art.noarch.rpm
    perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
    perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm
    perl-MIME-Lite-3.030-1.el7.noarch.rpm

    ]# yum -yinstallperl-.rpm
    2 在所有服务器51-56上安装mha_node软件包
    ]#cd mha-soft-student/
    ]#yum -yinstall perl-DBD-mysql
    ]#rpm -ivhmha4mysql-node-0.56-0.el6.noarch.rpm
    4 在管理主机56上安装mha_manager软件包
    ]# yum -yinstall perl-ExtUtils-
    perl-CPAN-*

    ]# tar -zxfmha4mysql-manager-0.56.tar.gz

    ]# cdmha4mysql-manager-0.56

    ]# perlMakefile.pl //[需要的依赖包可通过yum list | grep-i关键字获取yum -yinstall perl-ExtUtils- perl-CPAN-]

    ]# make

    ]# makeinstall

    配置MHA:
    在管理主机56上创建管理命令
    ]# mkdir /root/bin
    ]#cd mha4mysql-manager-0.56/bin
    ]#cp */root/bin/
    创建主配置 并编辑
    ]# mkdir /etc/mha
    ]#cpmha4mysql-manager-0.56/samples/conf/app1.cnf/etc/mha/
    ]#vim /etc/mha/app1.cnf
    [server default] #服务默认配置
    manager_workdir=/etc/mha #工作目录
    manager_log=/etc/mha/manager.log #日志文件

    master_ip_failover_script=/etc/mha/master_ip_failover#故障切换脚本

    #ssh服务用户名及端口
    ssh_user=root
    ssh_port=22

    #主从复制时,从库连接主库的用户名及密码
    repl_user=repluser
    repl_password=123abcxyz

    #监控数据库时,连接服务器的用户及密码
    user=root
    password=123abcxyz

    #指定数据库服务器ip及角色
    [server1]
    hostname=192.168.4.51
    candidate_master=1
    port=3306
    [server2]
    hostname=192.168.4.52
    candidate_master=1
    port=3306
    [server3]
    hostname=192.168.4.53
    candidate_master=1
    port=3306
    [server4]
    hostname=192.168.4.54
    no_master=1
    port=3306
    [server5]
    hostname=192.168.4.55
    no_master=1
    port=3306
    :wq

    创建故障切换脚本并编辑[正常在mha4mysql-manager-0.56目录下]
    ]# cd mha-soft-student
    ]# cp master_ip_failover /etc/mha/
    ]# chmod+x /etc/mha/master_ip_failover

    ]# vim /etc/mha/master_ip_failover
    35 my $vip = '192.168.4.100/24';# Virtual IP
    36 my $key = "1";
    37 my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
    38 my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
    :wq

    把脚本中指定的ip地址手动部署在当前主库51 上。
    mysql51]#ifconfigeth0:1192.168.4.100/24
    mysql51]#ifconfigeth0:1

    启动服务
    1 检查ssh连接
    mgm56]# masterha_check_ssh --conf=/etc/mha/app1.cnf

    2检查主从同步配置
    mgm56]# masterha_check_repl --conf=/etc/mha/app1.cnf
    3 启动管理服务
    mgm56]#
    masterha_manager --conf=/etc/mha/app1.cnf\
    --remove_dead_master_conf --ignore_last_failover
    4查看状态
    ]# masterha_check_status --conf=/etc/mha/app1.cnf
    app1 (pid:9541) is running(0:PING_OK), master:192.168.4.51

    测试配置
    在客户端50主机上连接vip 192.168.4.100 访问数据库服务
    1主库做用户授权
    mysql51>create database db3;create table db3.a(id int);
    mysql51>grant select,insertondb3. to test@"%" identified
    by"123abcxyz";
    2客户端使用授权用户连接
    client50]# mysql -h292.168.4.100-utest -p123abcxyzdb3
    mysql>
    mysql> insertinto db3.a values(100);
    Query OK, 1 row affected (0.07 sec)
    mysql> select
    from db3.a;

    测试高可用配置
    把主库51的数据库服务停止
    客户端仍然可以连接VIP地址192.168.4.100 访问数据库服务
    mysql51]# systemctl stop mysqld

    client50]# ping-c 2192.168.4.100

    client50]# mysql -h292.168.4.100-uplj-p123abcxyzdb3
    mysql> select@@hostname;
    mysql> select * fromdb3.a;
    mysql> insert into db3.a values(101);

    在/etc/mha/app1.cnf文件没有了主库51的配置
    数据库53 - 55把 主库地址指向 新选举出的主库ip地址

    把坏掉的数据库服务器51 再添加到集群里。
    MySQL51]# systemctlstart mysqld
    MySQL51]# mysql -uroot-p123abcxyz

    mysql> change master tomaster_host="192.168.4.52",
    -> master_user="repluser",
    -> master_password="123abcxyz",
    -> master_log_file="master52.000002", 当前主库日志
    -> master_log_pos=1237; 对应的pos点
    mysql> start slave;
    mysql> showslave status\G;IO 和SQL 进程都是Yes 主机ip 52

    mgm56]# vim /etc/mha/app1.cnf
    [server1]
    candidate_master=1
    hostname=192.168.4.51
    :wq

    mgm56]#
    masterha_manager --conf=/etc/mha/app1.cnf\
    --remove_dead_master_conf --ignore_last_failover

    查看状态
    mgm56]# masterha_check_status --conf=/etc/mha/app1.cnf
    app1 (pid:9541) is running(0:PING_OK), master:192.168.4.52
    把主库52的数据库服务停止后,客户端仍然可以连接
    vip地址192.168.4.100 访问MySQL数据库服务.
    在/etc/mha/app1.cnf文件没有了主库52的配置
    数据库53 - 55把 主库地址指向 新选举出的主库ip地址[日志最新的51/53]

    配置MySQL高可用集群MHA.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: mysqlmha