MHA、MMM高可用方案及故障切换

news2024/11/16 5:09:34

目录

一、MHA高可用方案

1、MHA的组成

2、MHA的工作原理

3、部署MHA架构

第一部分:一主两从数据库架构部署

1、全部更改主机名、初始化操作、开启mysql服务、设置主机名管理、时间同步

2、MySQL服务器做主从复制

3、测试主从效果

第二部分:MHA架构部署

1、安装依赖包

2、安装node组件

3、安装manager组件

4、在所有服务器上配置无密码认证

5、manager节点配置MHA

6、创建MHA软件目录并拷贝配置文件.

8、检查mha运行状态

9、在manager节点上启动MHA

第三部分:模拟故障

 二、MMM高可用方案

第一部分:部署主主复制和主从复制

 1、全部更改主机名、初始化操作、开启mysql服务、设置主机名管理、时间同步

2、修改master01配置文件并同步给其他数据库

3、配置主主复制,两台主服务器相互复制

4、配置主从复制,在两台从服务器上做

​5、测试主主、主从 同步情况

第二部分:部署MMM

1、所有服务器上安装 MySQL-MMM

2、 master01 上对 MySQL-MMM 进行配置

3、修改所有数据库代理配置文件

​4、在 monitor 监控服务器上修改监控配置文件 mmm_mon.conf

5、所有数据库为代理进程和监控进程授权,启动代理进程

6、monitor 服务器上启动数据库监控进程

第三部分:monitor 服务器上模拟故障 测试群集


        传统的mysql主从架构可能会出现单点故障的问题,所以我们需要学习一些高可用方案。

        常见的MySQL高可用方案有 keepalived主备、MHA、MMM、MySQL Ccluster(此方法需要至少6台主机,少有人用)、PXC。如果使用keepalived实现主从复制架构中的主库的高可用,还需要另外考虑到从库对接到备用主库的步骤。今天主要介绍MHA和MMM的高可用方案。

一、MHA高可用方案

        MHA是采用perl语言编写的脚本管理工具,目前主要支持一主多从架构,要搭建MHA要求一个复制群集至少有3台数据库服务器,一主二从。

1、MHA的组成

mha_manage节点:可以单独部署在任何从库上。

mha_node节点,要求部署在每个MySQL节点。给manage提供健康反馈,实际做切换的组件。

2、MHA的工作原理

        mha_manage节点服务器会定期通过心跳消息对主库做健康检查判断其有没有故障,如果故障则mha_manage会自动找到具有最新数据的从库节点,升级该从库为新的主库,同时VIP地址也会自动漂移到新的主库,其他从库也会自动对接新的主库做主从复制。

3、部署MHA架构

我的服务器IP说明
master数据库192.168.170.200安装mysql5.7、MHA node 组件
slave1数据库192.168.170.101安装mysql5.7、MHA node 组件
slave2数据库192.168.170.120安装mysql5.7、MHA node 组件
manager节点192.168.170.20安装MHA node 和 manager 组件,并作为数据库服务器的本地始终源

部署步骤

1)在所有MySQL服务器都做主从复制授权,还要给 MHA manager 访问数据库的授权
2)做时间同步和主从复制配置,并设置从服务器为只读模式
3)所有MySQL服务器和 manager 服务器都安装 mha node 组件,manager 服务器还要安装 mha manager 组件
4)所有MySQL服务器都要相互设置SSH免交互登录
5)在 manager 服务器准备好 VIP故障切换脚本 和 MHA 配置文件
6)在 master主库 服务器上创建 VIP
7)在 manager 服务器用 masterha_check_ssh 和 masterha_check_repl 做 MHA 启动前检测,再使用 masterha_manager 启动 MHA 进程
8)做master故障转移测试(VIP会漂移到新master节点上,其它的从库会自动指向新的主库做主从复制,故障转移完成后MHA进程也会自动退出,MHA配置文件会自动删除原master的配置信息)

第一部分:一主两从数据库架构部署

1、全部更改主机名、初始化操作、开启mysql服务、设置主机名管理、时间同步

所有服务器

更改主机名、刷新生效
hostname master/slave
bash

初始化设置 
setenforce 0
systemctl disable --now firewalld

manager服务器

chrony同步阿里云时间
安装开启chrony程序
yum install -y chrony
systemctl start chronyd
修改chrony配置文件
vim /etc/chrony.conf
====================================================================================
  3 #server 0.centos.pool.ntp.org iburst
  4 #server 1.centos.pool.ntp.org iburst
  5 #server 2.centos.pool.ntp.org iburst
  6 #server 3.centos.pool.ntp.org iburst
  7 server ntp.aliyun.com iburst
====================================================================================
重启检查是否同步成功,210 Number of sources = 1表示同步成功
systemctl restart chronyd
chronyc sources

所有数据库服务器

mysql安装部分
yum remove -y mariadb-libs.x86_64 
到opt目录中并解压,解压后的包重命名并移动到/usr/local目录中
cd /opt/
rm -rf *
rz -E
tar xf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz 
mv mysql-5.7.39-linux-glibc2.12-x86_64 /usr/local/mysql

创建程序用户管理并修改mysql目录和配置文件的权限
useradd -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql
修改配置文件
vim /etc/my.cnf
======================================================================================
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock
 
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
======================================================================================
chown mysql:mysql /etc/my.cnf
设置环境变量,申明/宣告mysql命令便于系统识别并初始化数据库
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
cd /usr/local/mysql/bin
./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

设置系统识别,进行操作:
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
systemctl daemon-reload
systemctl restart mysqld
初始化数据库密码:
mysqladmin -u root -p password "123456"

登录数据库
mysql -u root -p123456
创建用户并设置密码:
CREATE USER 'root'@'%' IDENTIFIED BY '123456';
赋予远程连接的权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
刷新生效
flush privileges;
修改加密方式,可以进行远程连接
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
chrony同步manager节点时间
systemctl start chronyd
修改chrony配置文件
vim /etc/chrony.conf
====================================================================================
  3 #server 0.centos.pool.ntp.org iburst
  4 #server 1.centos.pool.ntp.org iburst
  5 #server 2.centos.pool.ntp.org iburst
  6 #server 3.centos.pool.ntp.org iburst
  7 server 192.168.170.20 iburst
====================================================================================
systemctl restart chronyd
chronyc sources
检查是否同步
timedatectl

在hosts配置文件里添加四个主机名和IP
vim /etc/hosts
192.168.170.200 master
192.168.170.101 slave1
192.168.170.120 slave2
192.168.170.20 manager

如果mysql的root密码忘了不要慌

停止mysql服务,修改配置文件/etc/my.cnf中的[mysqld]中添加skip-grant-tables,重启mysql直接使用mysql登录数据库,然后使用update更新密码,重启mysql。最后不要忘记把配置还原哦

update mysql.user set authentication_string=password('123456') where user='root';'root' and host='localhost';
flush privileges;

2、MySQL服务器做主从复制

所有数据库服务器

修改配置文件,id不能相同
vim /etc/my.cnf
[mysqld]
server-id = 1                  #id唯一,注意区别开
log_bin = mysql-bin            #开启二进制日志
binlog_format = mixed          #二进制日志格式
log-slave-updates = 1          #主从复制数据也写到二进制日志里
relay-log = relay-log-bin      #开启中继日志
relay-log-index = slave-relay-bin.index  
                            
重启mysqld服务
systemctl restart mysqld

创建两个软链接
ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

4、配置 mysql 一主两从
(1)登录数据库
mysql -uroot -p密码
(2)所有数据库节点进行 mysql 授权
create user 'myslave'@'192.168.170.%' identified by 'myslave123';
grant replication slave on *.* to 'myslave'@'192.168.170.%' identified by 'myslave123';
(3)所有节点创建manager节点用户并授权
create user 'manager'@'192.168.170.%' identified by 'manager123';
grant all on *.* to 'manager'@'192.168.170.%' identified by 'manager123';
(4)刷新
flush privileges;

 

主库master配置

在 Master 节点查看二进制文件和同步点
show master status;

从库slave配置

从库配置同步主库,注意 master_log_file 和 master_log_pos 的值要与主库上查询的一致
change master to master_host='192.168.170.200',master_port=3306,master_user='myslave',master_password='myslave123',master_log_file='mysql-bin.000003',master_log_pos=1419;
开启同步
start slave;
show slave status\G
两个从库设置成只读模式
set global read_only=1;

3、测试主从效果

第二部分:MHA架构部署

1、安装依赖包

manager服务器

vim /etc/yum.conf
----
cachedir=/opt/yumcache
keepcache=1
----
cd /opt
mkdir /opt/yumcache
cd /etc/yum.repos.d
mv repo.bak/* ./
mv local.repo repo.bak
cd /opt/yumcache
yum install -y epel-release

----安装依赖包
yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN
----打包依赖包发送给其他服务器
mkdir mha
find ./ -name "*.rpm" -exec mv {} ./mha/ \;    #将依赖包挪入该目录
scp -r mha/ 192.168.170.200:/opt    #将包复制到主服务器
scp -r mha/ 192.168.170.101:/opt    #将包复制到从服务器
scp -r mha/ 192.168.170.120:/opt    #将包复制到从服务器

所有数据库服务器

cd /opt
createrepo mha/   #自动生成yum数据库依赖关系
cd mha
----修改目录
vim /etc/yum.repos.d/local.repo
baseurl=file:///opt/mha
-----
----本地源安装依赖包
yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN
----

补充,这里我按上面操作主库成功安装依赖包,两个从库无法安装,又把local.repo配置改回去了之后才安装上依赖包。重做的时候可以验证一下

2、安装node组件

所有服务器

cd /opt
rz -E
#mha4mysql-node-0.57.tar.gz
tar xf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57/
perl Makefile.PL
make && make install

3、安装manager组件

manager服务器

cd /opt
rz -E
#mha4mysql-manager-0.57.tar.gz
tar xf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57
perl Makefile.PL
make && make install

4、在所有服务器上配置无密码认证

manager服务器

在 manager 节点上配置到所有数据库节点的无密码认证
ssh-keygen -t rsa 				#一路按回车键
ssh-copy-id 192.168.170.200
ssh-copy-id 192.168.170.101
ssh-copy-id 192.168.170.120

主库master配置

在 master 上配置到数据库节点 slave1 和 slave2 的无密码认证
ssh-keygen -t rsa   #一路回车
ssh-copy-id 192.168.170.101
ssh-copy-id 192.168.170.120

 

从库slave配置

在 slave1 上配置到数据库节点 master 和 slave2 的无密码认证
ssh-keygen -t rsa   #一路回车
ssh-copy-id 192.168.170.200
ssh-copy-id 192.168.170.120

在 slave2 上配置到数据库节点 master 和 slave1 的无密码认证
ssh-keygen -t rsa   #一路回车
ssh-copy-id 192.168.170.200
ssh-copy-id 192.168.170.101

5、manager节点配置MHA

manager服务器

cd /opt/mha4mysql-manager-0.57/samples
cp -a scripts/ /usr/local/bin
cd /usr/local/bin
cp scripts/master_ip_failover /usr/local/bin
echo '' > master_ip_failover
vim master_ip_failover

 

注意:Windows的脚本不能直接用到Linux里,脚本内容要通过复制创建新的脚本。

清空原先master_ip_failover的内容添加以下配置:

#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
 
use Getopt::Long;
 
my (
    $command, $orig_master_host, $orig_master_ip,$ssh_user,
    $orig_master_port, $new_master_host, $new_master_ip,$new_master_port,
    $orig_master_ssh_port,$new_master_ssh_port,$new_master_user,$new_master_password
);
 
# 这里定义的虚拟IP配置要注意,这个ip必须要与你自己的集群在同一个网段,否则无效
my $vip = '192.168.170.111/24';
my $key = '1';
# 这里的网卡名称 “ens33” 需要根据你机器的网卡名称进行修改
# 如果多台机器直接的网卡名称不统一,有两种方式,一个是改脚本,二是把网卡名称修改成统一
# 我这边实际情况是修改成统一的网卡名称
my $ssh_start_vip = "sudo /sbin/ifconfig ens33:$key $vip";
my $ssh_stop_vip = "sudo /sbin/ifconfig ens33:$key down";
my $ssh_Bcast_arp= "sudo /sbin/arping -I ens33 -c 3 -A $vip";
 
GetOptions(
    'command=s'          => \$command,
    'ssh_user=s'         => \$ssh_user,
    'orig_master_host=s' => \$orig_master_host,
    'orig_master_ip=s'   => \$orig_master_ip,
    'orig_master_port=i' => \$orig_master_port,
    'orig_master_ssh_port=i' => \$orig_master_ssh_port,
    'new_master_host=s'  => \$new_master_host,
    'new_master_ip=s'    => \$new_master_ip,
    'new_master_port=i'  => \$new_master_port,
    'new_master_ssh_port' => \$new_master_ssh_port,
    'new_master_user' => \$new_master_user,
    'new_master_password' => \$new_master_password
 
);
 
exit &main();
 
sub main {
    $ssh_user = defined $ssh_user ? $ssh_user : 'root';
    print "\n\nIN SCRIPT TEST====$ssh_user|$ssh_stop_vip==$ssh_user|$ssh_start_vip===\n\n";
 
    if ( $command eq "stop" || $command eq "stopssh" ) {
 
        my $exit_code = 1;
        eval {
            print "Disabling the VIP on old master: $orig_master_host \n";
            &stop_vip();
            $exit_code = 0;
        };
        if ($@) {
            warn "Got Error: $@\n";
            exit $exit_code;
        }
        exit $exit_code;
    }
    elsif ( $command eq "start" ) {
 
        my $exit_code = 10;
        eval {
            print "Enabling the VIP - $vip on the new master - $new_master_host \n";
            &start_vip();
        &start_arp();
            $exit_code = 0;
        };
        if ($@) {
            warn $@;
            exit $exit_code;
        }
        exit $exit_code;
    }
    elsif ( $command eq "status" ) {
        print "Checking the Status of the script.. OK \n";
        exit 0;
    }
    else {
        &usage();
        exit 1;
    }
}
 
sub start_vip() {
    `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
sub stop_vip() {
    `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}
 
sub start_arp() {
    `ssh $ssh_user\@$new_master_host \" $ssh_Bcast_arp \"`;
}
sub usage {
    print
    "Usage: master_ip_failover --command=start|stop|stopssh|status --ssh_user=user --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}

6、创建MHA软件目录并拷贝配置文件.

manager节点添加故障切换脚本以及VIP故障切换脚本

manager服务器

cd /usr/local/bin/scripts
cp master_ip_online_change power_manager /usr/local/bin/
cd /usr/local/bin/
chmod +x master_ip_failover

cd /opt
mkdir /opt/mysql-mha
cd mysql-mha
mkdir mha-manager
mkdir mha-node

vim /opt/mysql-mha/mysql_mha.cnf
[server default]
manager_log=/opt/mysql-mha/manager.log
manager_workdir=/opt/mysql-mha/mha-manager
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
user=manager
password=manager123
port=3306
ping_interval=1
remote_workdir=/opt/mysql-mha/mha-node
repl_user=myslave
repl_password=myslave123
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.170.101 -s 192.168.170.120
shutdown_script=""
ssh_user=root

[server1]
hostname=192.168.170.200
port=3306

[server2]
hostname=192.168.170.101
port=3306

[server3]
hostname=192.168.170.120
port=3306

主库master配置

第一次配置需要在 Master 节点上手动开启虚拟IP

ifconfig ens33:1 192.168.170.111/24

8、检查mha运行状态

manager服务器

masterha_check_ssh -conf=/opt/mysql-mha/mysql_mha.cnf
masterha_check_repl -conf=/opt/mysql-mha/mysql_mha.cnf   #测试mysql主从连接情况

9、在manager节点上启动MHA
启动mha
nohup masterha_manager \
--conf=/opt/mysql-mha/mysql_mha.cnf \
--remove_dead_master_conf \
--ignore_last_failover < /dev/null > /var/log/mha_manager.log 2>&1 &

查看mha运行状态
masterha_check_status -conf=/opt/mysql-mha/mysql_mha.cnf

remove_dead_master_conf:该参数代表当发生主从切换后,老的主库的 ip 将会从配置文件中移除。
--ignore_last_failover:在缺省情况下,如果 MHA 检测到连续发生宕机,且两次宕机间隔不足 8 小时的话,则不会进行 Failover, 之所以这样限制是为了避免 ping-pong 效应。该参数代表忽略上次 MHA 触发切换产生的文件,默认情况下,MHA 发生切换后会在 app1.failover.complete 日志文件中记录,下次再次切换的时候如果发现该目录下存在该文件将不允许触发切换, 除非在第一次切换后删除该文件,为了方便,这里设置为--ignore_last_failover。
●使用&后台运行程序:结果会输出到终端;使用Ctrl+C发送SIGINT信号,程序免疫;关闭session发送SIGHUP信号,程序关闭。
●使用nohup运行程序:结果默认会输出到nohup.out;使用Ctrl+C发送SIGINT信号,程序关闭;关闭session发送SIGHUP信号,程序免疫。
●使用nohup和&配合来启动程序nohup ./test &:同时免疫SIGINT和SIGHUP信号。

第三部分:模拟故障

主库宕机了,追踪manager节点服务器mha目录中的日志能够看到主库由了原来的从库接替,且VIP也漂移到了新的主库上。

 从库也实现自动对接到新的主库上

mha在故障切换后会自动退出进程,且配置文件中原本的server1的配置也被自动删除了

当原主库服务器恢复后,怎么让其再次成为主库接着对外提供服务呢?

systemctl restart mysql

mysql -u root -p123456
change master to master_host='192.168.170.101',master_port=3306,master_user='myslave',master_password='myslave123',master_log_file='mysql-bin.000001',master_log_pos=2065;
start slave;
show slave status\G

manager服务器

修改mha配置文件
vim mysql_mha.cnf
启动
nohup masterha_manager --conf=/opt/mysql-mha/mysql_mha.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha_manager.log 2>&1 &
查看状态
masterha_check_status -conf=/opt/mysql-mha/mysql_mha.cnf

 二、MMM高可用方案

        MMM是双主,只有一个主对外提供工作。主主复制时两个主之间互相做主从复制实现主主复制,从节点也会对接主的master。monitor节点会检测master的状态,当发现主挂了就会vip切换到备的msater上,从库节点会重现找新的master做对接。

我的服务器IP地址说明
master1192.168.170.200安装 mysql5.7、mysql-mmm
master2192.168.170.100安装 mysql5.7、mysql-mmm
slave1192.168.170.101安装 mysql5.7、mysql-mmm
slave2192.168.170.120安装 mysql5.7、mysql-mmm
monitor节点服务器192.168.170.20安装 mysql-mmm

第一部分:部署主主复制和主从复制

 1、全部更改主机名、初始化操作、开启mysql服务、设置主机名管理、时间同步

所有服务器

更改主机名、刷新生效
hostname 主机名
bash

初始化设置 
setenforce 0
systemctl disable --now firewalld
vim /etc/seliux/cnf

manager服务器

chrony同步阿里云时间
安装开启chrony程序
yum install -y chrony
systemctl start chronyd
修改chrony配置文件
vim /etc/chrony.conf
====================================================================================
  3 #server 0.centos.pool.ntp.org iburst
  4 #server 1.centos.pool.ntp.org iburst
  5 #server 2.centos.pool.ntp.org iburst
  6 #server 3.centos.pool.ntp.org iburst
  7 server ntp.aliyun.com iburst
====================================================================================
重启检查是否同步成功,210 Number of sources = 1表示同步成功
systemctl restart chronyd
chronyc sources

2、修改master01配置文件并同步给其他数据库

vim /etc/my.cnf
......
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1                                               #每台 Mysql 主机的 server-id 不能相同
log-error=/usr/local/mysql/data/mysql_error.log             #错误日志
general_log=ON                                              #通用查询日志
general_log_file=/usr/local/mysql/data/mysql_general.log
slow_query_log=ON                                           #慢查询日志
slow_query_log_file=mysql_slow_query.log
long_query_time=5
binlog-ignore-db=mysql,information_schema        #不需要同步的库名
log_bin=mysql_bin                                #开启二进制日志用于主从数据复制
log_slave_updates=true                           #允许slave从master复制数据时可以写入到自己的二进制日志
sync_binlog=1                            #"双1设置",MySQL 在每写一次二进制日志时都会同步到磁盘中去    
innodb_flush_log_at_trx_commit=1         #"双1设置",每次事务提交时MySQL都会把缓存的数据写入日志文件,并且刷到磁盘中去
auto_increment_increment=2               #自增字段一次递增多少
auto_increment_offset=1                  #自增字段的起始值

把配置文件复制到其它 3 台数据库服务器上并启动服务器,注意:配置文件中的 server_id 要修改
scp /etc/my.cnf root@192.168.170.100:/etc/
scp /etc/my.cnf root@192.168.170.101:/etc/
scp /etc/my.cnf root@192.168.170.120:/etc/

其他数据库需要修改id,重启服务
vim /etc/my.cnf
systemctl restart mysqld

3、配置主主复制两台主服务器相互复制

master1和master2

登录数据库
mysql -u root -p123456
#在两台主服务器上都执行授予从的权限,从服务器上不需要执行
grant replication slave on *.* to 'replication'@'192.168.170.%' identified by '123456';
#在两台主服务器上查看,记录日志文件名称和同步点
show master status;

  master1 上配置同步

change master to master_host='192.168.170.100',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=461;

start slave;
show slave status\G

 master2 上配置同步(根据实际情况填写,我这里文件名和位置都是一样的)

change master to master_host='192.168.170.100',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=461;

start slave;
show slave status\G


 

4、配置主从复制,在两台从服务器上做

mysql -uroot -p123456
create user 'myslave'@'192.168.170.%' identified by 'myslave123';
grant replication slave on *.* to 'myslave'@'192.168.170.%' identified by 'myslave123';
flush privileges;
change master to master_host='192.168.170.200',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=461;
start slave;
show slave status\G


5、测试主主、主从 同步情况

第二部分:部署MMM

1、所有服务器上安装 MySQL-MMM

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release
yum -y install mysql-mmm*

2、 master01 上对 MySQL-MMM 进行配置

cd /etc/mysql-mmm/
vim mmm_common.conf
---------------------------------------------------------------------
……
<host default>
    cluster_interface       ens33
    ……
    replication_user        replication
    replication_password    123456
    agent_user              mmm_agent
    agent_password          123456

<host db1>
    ip      192.168.170.200
    mode    master
    peer    db2
</host>

<host db2>
    ip      192.168.170.100
    mode    master
    peer    db1
</host>

<host db3>
    ip      192.168.170.101
    mode    slave
</host>

<host db4>
    ip      192.168.170.102
    mode    slave
</host>

<role writer>
    hosts   db1, db2
    ips     192.168.80.188
    mode    exclusive           #只有一个 host 可以进行写操作模式
</role>

<role reader>
    hosts   db3, db4
    ips     192.168.80.198, 192.168.80.199
    mode    balanced            #多个 slave 主机可以进行读操作模式
</role>
---------------------------------------------------------------------
把配置文件复制到其它 4 台主机,所有主机该配置文件内容都是一样的
scp mmm_common.conf root@192.168.170.100:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.170.101:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.170.120:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.170.20:/etc/mysql-mmm/

3、修改所有数据库代理配置文件

vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db1                #根据不同的主机分别修改为 db1,db2,db3,db4


4、在 monitor 监控服务器上修改监控配置文件 mmm_mon.conf

vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>
.....
    ping_ips            192.168.170.200,192.168.170.100,192.168.170.101,192.168.170.120    #指定所有数据库服务器的 IP
    auto_set_online        10           #指定自动上线时间
</monitor>

<host default>
    monitor_user        mmm_monitor     #指定 mmm_monitor 的用户名
    monitor_password    123456          #指定 mmm_monitor 的密码
</host>


5、所有数据库为代理进程和监控进程授权,启动代理进程

在所有数据库上为 mmm_agent(代理进程)授权
grant super, replication client, process on *.* to 'mmm_agent'@'192.168.170.%' identified by '123456';
//在所有数据库上为 mmm_moniter(监控进程)授权
grant replication client on *.* to 'mmm_monitor'@'192.168.170.%' identified by '123456';

flush privileges;

在所有数据库服务器上启动代理进程
systemctl start mysql-mmm-agent.service
systemctl enable mysql-mmm-agent.service

6、monitor 服务器上启动数据库监控进程

systemctl start mysql-mmm-monitor.service   

第三部分:monitor 服务器上模拟故障 测试群集

#查看各节点的情况
mmm_control show
  db1(192.168.80.20) master/ONLINE. Roles: writer(192.168.170.188)
  db2(192.168.80.30) master/ONLINE. Roles: 
  db3(192.168.80.13) slave/ONLINE. Roles: reader(192.168.170.198)
  db4(192.168.80.14) slave/ONLINE. Roles: reader(192.168.170.199)

#检测监控功能是否都完善,需要各种OK
mmm_control checks all

#指定绑定 VIP 的主机
mmm_control move_role writer db2 

#故障测试前还原绑定 VIP 的主机
mmm_control move_role writer db1

故障测试

#停止master1后,在monitor服务器上确认VIP是否移动到master2上。注意:master1 主服务器恢复服务后,不会抢占。
mmm_control show

#从服务器随便停一台后,在monitor服务器上查看,另一台将接管两个虚拟IP,以保证业务不停止
mmm_control show

#在 master01 服务器上为 monitor 服务器地址授权登录(同网段主机授权后都可以使用 vip登录)
grant all on *.* to 'testdba'@'192.168.170.20' identified by '123456';
flush privileges;

#在 monitor 服务器上使用 VIP 登录
yum install -y mariadb-server mariadb
systemctl start mariadb.service
mysql -utestdba -p -h 192.168.170.200

#创建数据,测试同步情况
create database testdba;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1868236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql岗位实习----教务系统管理

教务管理系统 一、DDL CREATE TABLE users (user_id int(11) NOT NULL AUTO_INCREMENT COMMENT 用户ID,username varchar(50) NOT NULL COMMENT 用户名,password varchar(255) NOT NULL COMMENT 密码,gender enum(男,女) NOT NULL COMMENT 性别,email varchar(100) DEFAULT N…

Flutter 小技巧之为什么推荐 Widget 使用 const

今天收到这个问题&#xff0c;本来想着简单回复下&#xff0c;但是感觉这个话题又可以稍微展开讲讲&#xff0c;干脆就整理成一篇简单的科普&#xff0c;这样也能更方便清晰地回答这个问题。 聊这个问题之前&#xff0c;我们需要把一个“老生常谈”的概念拿出来说&#xff0c;那…

推荐一个AI导航网站和一篇文章:精益开发

第49期 AI 驿站 一个超级全面AI、的导航网站 https://www.51mskd.com/ “精益开发”的精益是什么&#xff1f; 最流行的软件开发模式&#xff0c;现在是“敏捷开发”&#xff08;agile development&#xff09;。 但是&#xff0c;很多人不知道&#xff0c;敏捷只是一种价值…

企业数据治理的下一步是数据资产管理?

随着信息技术的飞速发展和数字化转型的深入推进&#xff0c;企业数据已成为驱动业务增长和创新的核心要素。当企业数据治理工作取得显著成效后&#xff0c;如何进一步发挥数据的价值&#xff0c;实现数据资产的有效管理&#xff0c;成为企业面临的重要课题。 数据治理的基石作用…

倒计时日期 桌面倒数日 重要日期倒计时提醒

在工作、学习、生活中&#xff0c;我们往往会有很多重要的日子需要我们去标记。在工作中的季度考核、学习中的关键时间点、生活中的各种纪念日……等等&#xff0c;都需要我们去对未来这些重要的时间节点做一个倒计时提醒。 日期倒计时让我们对未来的时间&#xff0c;有一个非…

Kafka入门到精通(一)-安装Scala

Scala 简介 Scala 是 Scalable Language 的简写&#xff0c;意味着这种语言设计上支持大规模软件开发&#xff0c;是一门多范式的编程语言&#xff0c;Scala 语言是由 Martin Odersky 等人在 2003 年开发的&#xff0c;并于 2004 年首次发布。Scala 运行于 Java 平台&#xff0…

应用案例 | Panorama SCADA:开创性的铁路电气控制系统

案例概况 客户&#xff1a;英国铁路网运营商Network Rail 合作伙伴&#xff1a;Telent Technology Services Ltd 应用&#xff1a;实现对铁路牵引电网的高效管理与精准控制 应用产品&#xff1a;宏集Panorama E2 SCADA系统 一、应用背景 英国铁路网运营商Network Rail计划…

QT中子工程的创建,以及如何在含有库的子工程项目中引用主项目中的qt资源

1、背景 在qt中创建多项目类型,如下: CustomDll表示其中的一个动态库子项目; CustomLib表示其中的一个静态库子项目; MyWidget表示主项目窗口(main函数所在项目); 2、qrc资源的共享 如何在CustomDll和CustomLib等子项目中也同样使用 MyWidget项目中的qrc资源呢??? 直…

基于STM32的简易智能家居设计

一、项目功能概述 1、OLED显示温湿度、空气质量&#xff0c;并可以设置报警阈值 2、设置4个继电器开关&#xff0c;分别控制灯、空调、开关、风扇 3、设计一个离线语音识别系统&#xff0c;可以语音控制打开指定开关、并且可以显示识别命令词到OLED屏上 4、OLED实时显示&#…

【02-02】SpringMVC基于注解的应用

一、请求处理 1、常用注解 RequestMapping 作用&#xff1a;用来匹配客户端发送的请求&#xff08;用来处理URL映射&#xff0c;将请求映射到处理方法中&#xff09;&#xff0c;可以在类或者方法上使用。 用在类上&#xff0c;可以将请求模块化&#xff0c;避免请求方法中的…

机器学习 中数据是如何处理的?

数据处理是将数据从给定形式转换为更可用和更理想的形式的任务&#xff0c;即使其更有意义、信息更丰富。使用机器学习算法、数学建模和统计知识&#xff0c;整个过程可以自动化。这个完整过程的输出可以是任何所需的形式&#xff0c;如图形、视频、图表、表格、图像等等&#…

vscode python pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

在vscode中控制台运行python文件出现&#xff1a;无法将"pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 使用vscode开发python&#xff0c;需要安装python开发扩展&#xff1a; 本文已经安装&#xff0c;我们需要找的是python安装所在目录&#xff0c;本文…

css持续学习

一、样式层叠 当一个css样式发生冲突时&#xff0c;比如多处给一个字体设置了不同的颜色&#xff0c;这个时候就需要样式层叠了&#xff0c;它会进行三种比较 比较重要性 重要性从高到低&#xff1a; 1.带有 important 的作者样式&#xff08;作者样式就是开发者写的样式&…

【渗透工具】Nuclei POC—整合全网Nuclei的漏洞POC

1. 免责申明 本公众号的技术文章仅供参考&#xff0c;此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信…

创纪录!沃飞长空完成新一轮融资,实力获资方认可

作为全球竞逐的战略性新兴产业&#xff0c;今年首次写入政府工作报告的“低空经济”热度正持续提升&#xff0c;在政策、产业等多个层面均有重大突破。行业的飞速发展也吸引了投资界的目光&#xff0c;越来越多资本正投向低空经济。 近期&#xff0c;国内领先的低空出行企业吉…

CSS Grid网格布局

一、前言 二、Grid布局 1、基本介绍 2、核心概念 &#xff08;1&#xff09;网格容器 &#xff08;2&#xff09;网格元素 &#xff08;3&#xff09;网格列 &#xff08;4&#xff09;网格行 &#xff08;5&#xff09;网格间距 &#xff08;6&#xff09;网格线 三…

UE4_材质_水涟漪、水深制作_Ben教程

学习笔记&#xff0c;不喜勿喷&#xff01;侵权立删&#xff0c;祝愿生活越来越好&#xff01; 效果图如下&#xff1a; 创建水材质的教程&#xff0c;首先需要外出收集一些参考&#xff0c;看一看你将要做的事情很重要&#xff0c;确定将要模仿物体的关键属性&#xff0c;从这…

基于Java中的SSM框架实现后台资金管理系统项目【项目源码+论文说明】

基于Java中的SSM框架实现后台资金管理系统演示 摘要 互联系统的技术在如今的社会中&#xff0c;应用的越来越广泛&#xff0c;通过互联系统我们可以更方便地进行办公&#xff0c;也能够在系统上就能处理很多日常的事务。通过互联系统的发展和使用&#xff0c;让更多的人&#…

Python将Word文档转换为图片(JPG、PNG、SVG等格式)

将Word文档以图片形式导出&#xff0c;既能方便信息的分享&#xff0c;也能保护数据安全&#xff0c;避免被二次编辑。文本将介绍如何使用 Spire.Doc for Python 库在Python程序中实现Word到图片的批量转换。 目录 Python 将Word文档转换为JPG、JPEG、PNG、BMP等图片格式 Py…

Maven高级的聚合和继承

聚合和继承 我们的项目已经从以前的单模块&#xff0c;变成了现在的多模块开发。项目一旦变成了多模块开发以后&#xff0c;就会引发一些问题&#xff0c;在这一节中我们主要会学习两个内容聚合和继承&#xff0c;用这两个知识来解决下分模块后的一些问题。 3.1 聚合 分模块开…