发布网友 发布时间:2022-04-24 21:01
共2个回答
懂视网 时间:2022-05-03 01:36
介绍1.概念:MHA master high availability,由日本DeNA公司开发,解决mysql故障切换可以做到0-30秒,而且在故障切换过程中,能最大限度保障数据的一致性,实现真正的高可用.
2.组成:管理节点(MHA manager),管理所有数据库服务器,可以部署于一台独立的主机,也可以与某台数据库服务器共用一台主机;数据节点(MHA node),运行在每台存储数据的服务器上.
3.原理:由manager探测集群中的master节点; 当master故障时,manager自动将拥有最新数据的从库提升为新的master.
1.拓扑图
2.部署环境
- 准备3台数据库服务器4.51,4.52,4.53,配置为一主多从结构(4.51为主库,4.52和4.53为从库),并且相互之间可以用root无密码登录.
-实现无密码登录的方式:(3台服务器上都需要重复4.51的动作)
例,在主机4.51上操作:#ssh-keygen -f /root/.ssh_rsa -N ‘’ //生成秘钥
#for i in 51 52 53 //拷贝秘钥到其它主机
do
ssh-copy-id root@192.168.4.$i
done
- 准备2台虚拟机:主机4.57做管理节点manager,主机4.50做客户端client.
- 在主机4.50,4.51,4.52,4.53,4.57上安装系统自带的软件perl-*
- 管理节点4.57可以用root用户无密码登录3台数据库服务器4.51,4.52,4.53.
- 所有主机安装共享的perl软件包(从真机上scp文件夹mha-soft-student->cd进入文件夹->yum安装perl-* )
- rpm -qa|grep perl|wc -l //查看安装的perl软件包数量是否为382个
3.安装管理节点的软件
#cd mha-soft-student/ 进入文件夹
cd mha-soft-student]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm //安装连接服务器节点的软件
# tar -xvf mha4mysql-manager-0.56.tar.gz //解压管理软件包
# cd mha4mysql-manager-0.56 //进入文件夹
mha4mysql-manager-0.56]# perl Makefile.PL //指定目标文件,检查安装环境
mha4mysql-manager-0.56]# make //编译源码
mha4mysql-manager-0.56]# make install //编译并安装
#ls /root/perl5/bin/masterha_* //查看安装的管理集群的命令
4.编写主配置文件app1.cnf
# mkdir /etc/mha //创建新目录,以存储配置文件(不在系统默认配置文件的目录下操作)
#cd mha-soft-student //进入文件夹
mha-soft-student]# cp mha4mysql-manager-0.56/samples/conf/app1.cnf /etc/mha/ //将系统配置文件拷贝到新建目录/etc/mha
mha-soft-student]# 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_user=root //访问ssh服务的用户
ssh_port=22 //ssh服务端口
repl_user=repluser //主库同步到从库的授权用户
repl_password=123qqq...A //主库同步到从库的授权密码
user=root //manager登录数据库服务器使用的用户
password=123qqq...A //manager登录数据库服务器使用的密码
[server1] //指定第1台数据库服务器
hostname=192.168.4.51 //数据库服务器IP地址
port=3306 //服务端口
candidate_master=1 //竞选主机,当主库故障时,其它的从库参入新主库的竞选
[server2] //指定第2台数据库服务器
hostname=192.168.4.52 //数据库服务器IP地址
port=3306 //服务端口
candidate_master=1
[server3] //指定第3台数据库服务器
hostname=192.168.4.53 //数据库服务器IP地址
port=3306 //服务端口
candidate_master=1 //竞选主机,当主库故障时,其它的从库参入新主库的竞选
5.在管理节点4.57上创建故障切换脚本master_ip_failover
#vim/root/mha-soft-student/mha4mysql-manager-0.56/samples/scripts/master_ip_failover
添加如下内容:
my $vip = ‘192.168.4.100/24‘; #定义VIP
my $key = "1"; //定义地址编号
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip"; //绑定VIP地址
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down"; //释放VIP地址
# chmod +x /etc/mha/master_ip_failover //赋予权限
6.在主库4.51上部署vip
# ifconfig eth0:1 192.168.4.100 //设置VIP
# ifconfig eth0:1 //查看VIP,谁是主库,谁就拥有VIP
client ~]# ping -c2 192.168.4.100 //客户端ping一下连接状态
7.在从库4.52,4.53上配置数据节点
[root@db51 mha-soft-student]# for i in 51 52 53 //安装连接节点的软件
> do
>ssh 192.168.4.$i "yum -y install /root/mha-soft-student/mha4mysql-node-0.56-0.el6.noarch.rpm"
> done
mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A"; //在从库4.52,4.53上授权用户repluser及密码
mysql> grant all on *.* to root@"%" identified by "123qqq...A"; //在3台数据库4.57上授权管理节点监控数据库时使用的连接用户及密码
8.主库加载master,slave模块
[mysqld]
log-bin=db51 //启用log-bin日志
server_id=51
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" //加载模块
rpl_semi_sync_master_enabled=1 //启用master模块
rpl_semi_sync_slave_enabled=1 //启用slave模块
relay_log_purge=0 //禁止软件自动删除中继日志文件
#systemctl restart mysqld //重启,加载配置
9.从库4.52加载master,slave模块
[mysqld]
server_id=52
log-bin=master52 //启用log-bin日志
relay_log_purge=0 //禁止软件自动删除中继日志文件
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" //加载模块
rpl_semi_sync_master_enabled=1 //启用master模块
rpl_semi_sync_slave_enabled=1 //启用slave模块
#systemctl restart mysqld //重启,加载配置
10.从库4.53加载master,slave模块
[mysqld]
server_id=53
log_bin=master53 //启用log-bin日志
relay_log_purge=0 //禁止软件自动删除中继日志文件
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" //加载模块
rpl_semi_sync_master_enabled=1 //启用master模块
rpl_semi_sync_slave_enabled=1 //启用slave模块
#systemctl restart mysqld
11.测试一下数据库主从是否同步
mysql-uroot -p123qqq...A -e ‘insert into db1.t1 values(6,”wangwu”,30)’ //在主库4.51上插入数据
[root@db51 ~]# for i in 52 53 //查看从库是否同步数据
> do
> ssh root@192.168.4.$i ‘mysql -uroot -p123qqq...A -e "select * from db1.t1"‘
> done
1.在管理节点上测试ssh配置
[root@db57 ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf
Thu Jun 20 15:30:08 2019 - [info] All SSH connection tests passed successfully.
2.在管理节点上测试主从同步
[root@db57 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf
MySQL Replication Health is OK
3.启动masterha_manager服务
[root@db57 ~]# masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover
--remove_dead_master_conf //主库故障时,删除管理节点配置文件中的server主机
--ignore_last_failover //软件默认故障发生时,有一个切换时间.加载该选项可以实现时间点无缝切换.
4.在主库4.51添加访问数据的连接用户及密码,并同步到4.52和4.53
mysql> create database db9;
mysql> create table db9.a(id int,name char(10));
mysql> grant select,insert on db9.* to yaya55@"%" identified by ‘123qqq...A‘;
# mysql -uroot -p123qqq...A -e ‘select host,user from mysql.user where user="yaya55";‘ //分别在4.52和4.53查看授权的用户yaya55
5.客户端登录插入数据
[root@client ~]# mysql -h192.168.4.100 -uroot -p123qqq...A
mysql> insert into db9.a values(1,"lisi");
mysql> insert into db9.a values(2,"wangwu");
mysql> select * from db9.a;
+------+--------+
| id | name |
+------+--------+
| 1 | lisi |
| 2 | wangwu |
+------+--------+
2 rows in set (0.00 sec)
# mysql -uroot -p123qqq...A -e ‘select * from db9.a’ //分别在4.52和4.53上查看插入的数据
6.测试高可用
思路:停止4.51的mysql服务->管理节点4.57会监控到master4.51发生故障,并停止监控服务,触发故障脚本master_ip_failover在2台从库中竞选出新的master主机,数据库服务不会停止->客户端连接到vip,依然可以访问数据库,做读写操作.
6.1停止主库4.51的mysql服务
[root@db51 ~]# systemctl stop mysqld
6.2客户端再次登录vip
[root@client ~]# mysql -h192.168.4.100 -uroot -p123qqq...A
6.3插入数据,并查看
mysql> insert into db9.a values(3,"jack");
mysql> select * from db9.a; //在主机4.52和4.53上查看插入的数据
6.4 配置文件/etc /mha/aqq1.cnf中的[server1]容器被删除,即主机4.51被踢出了服务序列,具体见下图:
7.将down机的4.51重新添加入集群服务序列
7.1启动数据库4.51
#systemctl start mysqld
7.2把4.51配置为当前集群的从服务器
7.2.1把新主库4.52的数据备份,并在4.51上恢复,以确保与主服务器数据保持一致.
[root@db52 ~]# mysqldump -uroot -p123qqq...A --master-data db9 > db9.sql //主库备份数据
[root@db52 ~]# scp db9.sql root@192.168.4.51:/root/ //上传数据给4.51
[root@db51 ~]# mysql -uroot -p123qqq...A db9 < /root/db9.sql //在主机4.51上恢复数据
7.2.2定义从库信息,启动slave进程,查看状态
mysql> change master to
->master_host="192.168.4.52",master_user="repluser",master_password="123qqq...A",
-> master_log_file="master52.000002",master_log_pos=154;
//定义从库信息
mysql> start slave;
[root@db51 ~]# mysql -uroot -p123qqq...A -e "show slave statusG"|head -13
//查看已经定义的从库信息
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.4.52
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master52.000002
Read_Master_Log_Pos: 154
Relay_Log_File: db51-relay-bin.000002
Relay_Log_Pos: 319
Relay_Master_Log_File: master52.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
7.3 将主机4.51添加到集群配置文件中
7.3.1停止管理节点4.57的监控服务
[root@db57 ~]# masterha_stop --conf=/etc/mha/app1.cnf
7.3.2添加主机4.51的server到集群配置文件/etc/mha/app1.cnf
[server1]
candidate_master=1
hostname=192.168.4.51
port=3306
7.3.3管理节点做启动前的ssh和repl检测
[root@db57 ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf
[info] All SSH connection tests passed successfully.
[root@db57 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf
MySQL Replication Health is OK.
7.3.4启动管理节点,监控数据库服务器
[root@db57 ~]# masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover
[root@db57 ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:1991) is running(0:PING_OK), master:192.168.4.52
必须配置实现ssh无密码登录(数据库服务器之间,管理节点与数据库服务器之间)
必须配置主从同步结构
必须设置VIP地址
down机的服务器需要人为配置为集群从服务器,才能重新添加到集群服务序列.
down机的服务器不能自动同步down机期间的数据(缺点)
在主从同步结构中,没有从服务器时,不能实现故障切换.
结束.
数据库_MHA群集搭建
标签:虚拟 删除 *** 系统配置 读写 状态 绑定 拷贝 top
热心网友 时间:2022-05-02 22:44
在服务器群集产品中含有用来在服务器上安装群集软件和创建新群集的群集安装实用工具。创建新群集时,首先在选择作为群集的第一个成员的计算机上运行该实用工具。第一步是确定群集名称并创建群集数据库和初始的群集成员列表来定义新群集。 Windows server 2003 群集新增了一个群集管理设置向导以及使用 cluster.exe命令行界面创建( 包括从远程创建 )群集的功能。
创建群集的第二步是,添加可供所有群集成员使用的共用数据存储设备。这样,创建的新群集将带有一个节点、自己的本地数据存储设备以及群集共用资源 —— 通常是磁盘或数据存储和连接介质资源。
创建群集的最后一步是,在另外将要成为群集成员的每一台计算机上运行安装实用工具。每当将新节点添加到群集中时,新节点都会自动从群集的原始成员获得现有群集数据库的副本。当节点加入或形成群集时,群集服务会更新该节点私有的配置数据库副本。