IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Mysql----高可用集群 -> 正文阅读

[系统运维]Mysql----高可用集群

搭建的数据存储架构的优缺点:

主从结构存储数据

优点:实现了的数据的自动备份

缺点:主服务器和从服务器?都有单点故障的问题

数据读写分离

优点:??减轻单台服务器的访问压力

??????????同时实现数据的备份

缺点:?读写分离服务器?主数据库?从数据库?都存在单点故障问题

?分库分表

?解决是的大量并发存储数据的?存储压力问题和?存储空间问题?

?????缺点:?分片存储服务器有单点故障问题

??没有数据备份的功能

?(mysql高可用集群)?解决服务的单点故障问题和?数据的自动备份

?相关的概念

高可用集群?分为?主备2种角色?,工作过程,主服务器获取vip地址?客户端连接

VIP地址访问服务,当主服务器宕机后?备用的服务器升级为获取vip地址?继续给

客户端提供服务

之前做的是网站服务的高可用集群??使用的是Keepalived软件做集群服务

? 数据库服务的高可用集群?使用专属的集群软件MHA?

???MHA软件介绍

MHA(Master?High?Availability)

由日本DeNA公司youshimaton开发

是一套优秀的实现MySQL高可用的解决方案

数据库的自动故障切换操作能做到在0~30秒之内完成

MHA能确保在故障切换过程中最大限度保证数据的一致性,以达到真正意义上的高可用

软件有2部分组成

1?管理端软件(管理节点)?:?安装管理集群主机上的软件

2?数据端软件(数据节点)?:?安装在数据库服务器上的软件

?MHA集群架构

说明至少3台数据库服务器做集群才能真正实现高可用

?角色1??数据库服务器(3台)

?

准备3台新的数据库服务器 

 配置IP地址  192.168.4.51/52/53 管理员root 密码123qqq...A  

角色2??管理主机(1台)

准备1台新的服务器 IP地址  192.168.4.57  
			 不需要有数据库服务(有的话把数据库服务停止即可)

角色3?

客户端(1台) 使用50主机做客户端  有连接命令mysql 即可

集群VIP地址

192.168.4.100 	

需要软件?? mha-soft-student

MHA集群的工作过程

由Manager定时探测集群中的master节点

当master故障时,Manager自动将拥有最新数据的slave提升为新的master

(如果有多个从的话,剩下的从会自动更新为新主服务器的从主机)

?配置MHA集群,具体步骤如下

第一步:集群环境准备?(在3台数据库服务器都要做的配置)

1)公共配置(3台数据库服务器都要配置)

#启用binlog日志??

#开启半同步复制模式

#禁止删除本机的中继日志文件?

#重启数据库服务

#添加从服务器拷贝sql命令时连接使用的用户

#配置数据库器host51
[root@host51 ~]# 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=0
server_id=51
log_bin=master51
:wq
[root@host51 ~]# mysql -uroot -p123qqq...A
mysql> grant replication slave on *.* to repluser@"%" Identified by "123qqq...A";
mysql> exit;
					
#配置数据库器host52
[root@host52 ~]# 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=0
server_id=52
log_bin=master52
:wq
[root@host52 ~]# mysql -uroot -p123qqq...A
mysql> grant replication slave on *.* to repluser@"%" Identified by "123qqq...A";
mysql> exit;
#配置数据库器host53	
[root@host53 ~]# 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=0
server_id=53
log_bin=master53
:wq
[root@host53 ~]# mysql -uroot -p123qqq...A
mysql> grant replication slave on *.* to repluser@"%" Identified by "123qqq...A";
mysql> exit;

2)配置ssh免密登录

2.1?所有数据库服务器之间可以彼此免密登录

第1步: 配置host51 免密登录host52和host53
[root@host51 ~]# ssh-keygen  遇到提示就回车
[root@host51 ~]# ssh-copy-id root@192.168.4.52
[root@host51 ~]# ssh-copy-id root@192.168.4.53	
						
第2步: 配置host52 免密登录host51和host53
[root@host52 ~]# ssh-keygen  遇到提示就回车
[root@host52 ~]# ssh-copy-id root@192.168.4.51
[root@host52 ~]# ssh-copy-id root@192.168.4.53	

第3步: 配置host53 免密登录host51和host52
[root@host53 ~]# ssh-keygen  遇到提示就回车
[root@host53 ~]# ssh-copy-id root@192.168.4.51
[root@host53 ~]# ssh-copy-id root@192.168.4.52	
							
 第4步: 测试免密登录
[root@host51 ~]# ssh 192.168.4.53
[root@host51 ~]# ssh 192.168.4.52

[root@host52 ~]# ssh 192.168.4.53
[root@host52 ~]# ssh 192.168.4.51

[root@host53 ~]# ssh 192.168.4.52
[root@host53 ~]# ssh 192.168.4.51

2.2?管理主机可以免密登录所有数据库服务器(数据库服务器不需要免密登录管理主机)

[root@mgm57 ~]# ssh-keygen
[root@mgm57 ~]# ssh-copy-id  root@192.168.4.51
[root@mgm57 ~]# ssh-copy-id  root@192.168.4.52
[root@mgm57 ~]# ssh-copy-id  root@192.168.4.53	

[root@mgm57 ~]# ssh  192.168.4.51
[root@mgm57 ~]# ssh  192.168.4.52
[root@mgm57 ~]# ssh  192.168.4.53		

3)配置MySQL?一主多从?同步结构

说明:?主机host52?和?host53?分别做host51?的从服务器

#配置主数据库服务器 192.168.4.51
1 启用binlog日志  (公共配置已经配置了)
2 用户授权(公共配置已经配置了)
3 查看日志信息
[root@host51 ~]# mysql -uroot -p123qqq...A -e 'show master status'
mysql: [Warning] Using a password on the command line interface can be insecure.
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master51.000001 |      441 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+
[root@host51 ~]# 
									
#配置从数据库服务器 192.168.4.52
1 指定server_id  并重启数据库服务 (公共配置已经做了)
2 确保数据一致(如果一样就不用做了)
3 指定主服务器信息
[root@host52 ~]# mysql -uroot -p123qqq...A
mysql> change master to  master_host="192.168.4.51",master_user="repluser",
master_password="123qqq...A",master_log_file="master51.000001",master_log_pos=441;

4 启动slave进程 
 MySQL>start slave;


5 查看状态 (IO线程和 SQL线程都是yes状态)
mysql> show slave status \G
	Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
								
#配置从数据库服务器 192.168.4.53
1 指定server_id  并重启数据库服务(公共配置已经做了)
2 确保数据一致(如果一样就不用做了)
3 指定主服务器信息
[root@host53 ~]# mysql -uroot -p123qqq...A
mysql> change master to  master_host="192.168.4.51",master_user="repluser",
master_password="123qqq...A",master_log_file="master51.000001",master_log_pos=441;
4 启动slave进程  
MySQL>start slave;
5 查看状态 (IO线程和 SQL线程都是yes状态)
mysql> show slave status \G
			Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

第二步:配置管理主机?192.168.4.57

1)?安装软件

安装依赖软件

cd mha-soft-student/
yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
yum -y install perl-*.rpm
yum -y install  perl-ExtUtils-*   perl-CPAN*

安装提供管理命令软件

tar -xf mha4mysql-manager-0.56.tar.gz 
cd mha4mysql-manager-0.56/						
[root@mgm57 mha4mysql-manager-0.56]# perl Makefile.PL  
*** Module::AutoInstall version 1.03
*** Checking for Perl dependencies...
[Core Features]
- DBI                   ...loaded. (1.627)
- DBD::mysql            ...loaded. (4.023)
- Time::HiRes           ...loaded. (1.9725)
- Config::Tiny          ...loaded. (2.14)
- Log::Dispatch         ...loaded. (2.41)
- Parallel::ForkManager ...loaded. (1.18)
- MHA::NodeConst        ...loaded. (0.56)
*** Module::AutoInstall configuration finished.
Checking if your kit is complete...
Looks good
Writing Makefile for mha4mysql::manager
Writing MYMETA.yml and MYMETA.json
[root@mgm57 mha4mysql-manager-0.56]#  make   && make  install   

了解相关管理命令

[root@mgm57?mha4mysql-manager-0.56]#?masterha_?? 按2次tab键列出所有命令

masterha_check_repl???????masterha_conf_host????????masterha_master_switch????

masterha_check_ssh????????masterha_manager??????????masterha_secondary_check??

masterha_check_status?????masterha_master_monitor???masterha_stop?????????????

编辑主配置文

说明:模版文件是个半成品?需要根据环境准备完善

[root@mgm57 ~]# vim /etc/mha/app1.cnf	(没有第4台数据库服务器所有把[server4]删除)					
[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_port=22

repl_user=repluser      #主从同步的用户
repl_password=123qqq...A

user=plj                 # 切换主的用户
password=123qqq...A 

#定义监视的数据库服务器
[server1]
hostname=192.168.4.51
port=3306
candidate_master=1

[server2]
hostname=192.168.4.52
port=3306
candidate_master=1

[server3]
hostname=192.168.4.53
port=3306
candidate_master=1
:wq

创建故障切换脚本

创建脚本并指定vip地址部署在哪块网卡上

[root@mgm57 mha-soft-student]# cp master_ip_failover  /etc/mha/
[root@mgm57 mha-soft-student]# chmod +x /etc/mha/master_ip_failover 

[root@mgm57 mha-soft-student]# vim +35 /etc/mha/master_ip_failover 
my $vip = '192.168.4.100/24';  # Virtual IP
my $key = "1";
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
:wq

配置数据库服务器

说明:要保证3台数据库都有ifconfig?命令

]# which ifconfig  || yum -y install net-tools
/usr/sbin/ifconfig

把故障切换脚本里指定的vip地址

配置在当前主从结构种的主数据库服务器Host51?主机上

[root@host51 ~]# ifconfig  eth0:1 192.168.4.100/24
[root@host51 ~]# ifconfig  eth0:1
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.4.100  netmask 255.255.255.0  broadcast 192.168.4.255
        ether 52:54:00:98:33:28  txqueuelen 1000  (Ethernet)

[root@host51 ~]#				

安装软件(3台数据库器软件都要安装)

先安装依赖

[root@host51 ~]# cd mha-soft-student/
[root@host51 mha-soft-student]# yum -y install perl-*.rpm

在安装主软件

[root@host51 mha-soft-student]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm			

添加监控用户

只需在master服务器添加?在slave服务器查看

[root@host51 ~]# mysql -uroot -p123qqq...A
mysql> grant all on *.*  to plj@"%"  identified by "123qqq...A";
mysql> exit;

[root@host52 ~]# mysql -uroot -p123qqq...A -e 'select user from mysql.user where user="plj"'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+
| user |
+------+
| plj  |
+------+
[root@host52 ~]# 

[root@host53 ~]# mysql -uroot -p123qqq...A -e 'select user from mysql.user where user="plj"'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+
| user |
+------+
| plj  |
+------+
[root@host52 ~]# 

测试配置,在管理主机mgm57?如下测试

测试ssh免密登录配置

[root@mgm57 ~]# masterha_check_ssh  --conf=/etc/mha/app1.cnf				
Sat Nov 20 16:31:08 2021 - [info] All SSH connection tests passed successfully.  #成功提示

测试主从同步配置

[root@mgm57 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf
MySQL Replication Health is OK.   #成功提示

排错思路

ssh?测试失败?公共解决办法

第一步 :在 51-53 、57删除错误的密码对和公钥   rm -rf /root/.ssh   
     第二步:然后把环境准备中的 ssh 免密登录重新配置一遍
		     配置3台数据库服务器之间密码登录
		     配置管理主机57 能够免密登录 3台数据库服务器

主从同步配置失败的解决办法

第一步:?在52?和?53本机查看?slave?进程的状态?如果io?和?sql?线程?不同时是yes??需要执行如下操作(2台都执行)

首先执行?stop?slave;?停止有错误的?slave?进程

然后重新使用change?master?to??指定主服务器的信息;

然后执行?start?slave;

查看状态?show?slave??status?\G

?如果2个从服务器都是?io?和?sql?线程?yes??

在?51?主机查看是否有?slave?状态?show?slave?status?\G

??????然后执行stop?slave;

如果以上都没有问题??检查?app1.cnf?编写?

启动管理服务(192.168.4.57)?

说明:2个测试都成功了??管理服务才能启动成功

[root@mgm57 ~]# 
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf  \
--ignore_last_failover 2> /dev/null &

[root@mgm57 ~]# jobs
[1]+  运行中               nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &     

#  --remove_dead_master_conf     #监视的主服务器宕机后 把对应的配置在app1.cnf删出
#  --ignore_last_failover 2        # 主坏了,坏几次都能启动
[root@mgm57 ~]# 

[root@mgm57 ~]# masterha_check_status  --conf=/etc/mha/app1.cnf;
app1 (pid:1977) is running(0:PING_OK), master:192.168.4.51
[root@mgm57 ~]# 


[root@host51 ~]# ifconfig  eth0:1
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.4.100  netmask 255.255.255.0  broadcast 192.168.4.255
        ether 52:54:00:98:33:28  txqueuelen 1000  (Ethernet)

测试集群的高可用功能,具体操作如下

1)?客户端host50?连接VIP地址访问数据库服务

#主数据库服务器host51 添加客户端连接使用的用户 2台从服务器会自动同步用户
mysql> create database db1;
mysql> create table db1.a(id int);
mysql> grant select ,insert on db1.* to yaya@"%" identified by "123qqq...A";

客户端使用用户连接服务
[root@host50 ~]# mysql -h192.168.4.100 -uyaya -p123qqq...A
insert into db1.a values (8888);
select  * from 	db1.a;

2)停止host51主机的数据库服务

[root@host51 ~]# systemctl  stop  mysqld

3)客户端host50?依然可以连接VIP地址访问数据库服务

[root@host50 ~]# mysql -h192.168.4.100 -uyaya -p123qqq...A
mysql> insert into db1.a values (9999);
Query OK, 1 row affected (0.07 sec)

mysql> select  * from  db1.a;
+------+
| id   |
+------+
| 8888 |
| 9999 |
+------+
2 rows in set (0.00 sec)

4)??在host52?或?host53?主机查看vip地址?(谁有vip?谁就是新的主数据库服务器)

[root@host52 ~]# ifconfig  eth0:1
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.4.100  netmask 255.255.255.0  broadcast 192.168.4.255
        ether 52:54:00:c9:96:10  txqueuelen 1000  (Ethernet)

[root@host52 ~]# 	

5)?在剩下的另一台数据库服务器查看主服务器IP地址(自动做新主服务器的slave主机)

[root@host53 ~]# mysql -uroot -p123qqq...A -e 'show slave status\G' | grep -i yes
mysql: [Warning] Using a password on the command line interface can be insecure.
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
[root@host53 ~]# 
[root@host53 ~]# mysql -uroot -p123qqq...A -e 'show slave status\G' | grep -i "master_host"
mysql: [Warning] Using a password on the command line interface can be insecure.
                  Master_Host: 192.168.4.52
[root@host53 ~]# 	

6)?查看app1.cnf配置文件?(发现没有[server1]的配置了?仅剩?[server2]?和??[server3]?)

[root@mgm57 ~]# grep "server1" /etc/mha/app1.cnf 
[root@mgm57 ~]# 
[root@mgm57 ~]# grep "server2" /etc/mha/app1.cnf 
[server2]
[root@mgm57 ~]# grep "server3" /etc/mha/app1.cnf 
[server3]
[root@mgm57 ~]# 		

7)?查看管理服务的状态,并启动管理服务?再次查看状态?(会监视新的主数据库服务器)

[root@mgm57 ~]# masterha_check_status  --conf=/etc/mha/app1.cnf;
[root@mgm57 ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &
[1] 2527

[root@mgm57 ~]# jobs
[1]+  运行中               nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &
[root@mgm57 ~]# 
[root@mgm57 ~]# masterha_check_status  --conf=/etc/mha/app1.cnf;
app1 (pid:2527) is running(0:PING_OK), master:192.168.4.52   #监视新的主数据库服务器52
[root@mgm57 ~]# 

修复宕机的51数据库服务器

第一步:把192.168.4.51?配置为?当前?master服务器?52的slave主机

[root@host51 ~]#systemctl  start  mysqld
[root@host52 ~]# mysqldump -uroot -p123qqq...A  --master-data  -B db1 > /root/db1.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@host52 ~]# scp /root/db1.sql  192.168.4.51:/root/
db1.sql                                                              100% 2073   210.9KB/s   00:00    
[root@host52 ~]#


[root@host51 ~]# mysql -uroot -p123qqq...A  < /root/db1.sql 
[root@host51 ~]# grep master52 /root/db1.sql 
CHANGE MASTER TO MASTER_LOG_FILE='master52.000001', MASTER_LOG_POS=1676;
[root@host51 ~]#
[root@host51 ~]# mysql -uroot -p123qqq...A
mysql> change master to master_host="192.168.4.52" , master_user="repluser" , master_password="123qqq...A" , master_log_file="master52.000001" , master_log_pos=1676 ;
Query OK, 0 rows affected, 2 warnings (0.12 sec)

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

mysql> show slave status \G
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
mysql> exit;

第二步?:把51主机添加到集群里

[root@host57 ~]# jobs
[1]+  运行中               nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &
[root@host57 ~]# 

[root@host57 ~]# vim /etc/mha/app1.cnf  #把51主机添加到配置文件里 
[server1]
hostname=192.168.4.51
port=3306
candidate_master=1
:wq

masterha_secondary_check  masterha_stop             
[root@host57 ~]# masterha_stop --conf=/etc/mha/app1.cnf
Stopped app1 successfully.
[1]+  退出 1                nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null
[root@host57 ~]# 

[root@host57 ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &
[1] 3618

[root@host57 ~]# jobs
[1]+  运行中               nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &
[root@host57 ~]# 


[root@host57 ~]# masterha_check_status  --conf=/etc/mha/app1.cnf
app1 (pid:3618) is running(0:PING_OK), master:192.168.4.52
[root@host57 ~]# 

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 12:16:02  更:2022-04-26 12:17:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:08:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码