MySQL数据库

MySql高可用集群配置

2023-03-02  本文已影响0人  技术老男孩

一、环境准备:

IP地址 主从同步角色 集群角色 主机名
192.168.88.50 客户端 client50
192.168.88.60 管理主机 mgm60
192.168.88.66 主库 主服务器 host66
192.168.88.67 从库 从服务器1 host67
192.168.88.68 从库 从服务器2 host68
拓扑结构.png

二、配置流程:

三、实操搭建高可用集群配置:

第一步:数据库服务器集群环境

# 配置数据库器host66
[root@host66 ~]# 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  

#启用binlog日志
server_id=66
log_bin=master66

# 重启服务生效配置
[root@host66 ~]# systemctl  restart mysqld
# 从服务器拷贝sql命令时连接使用的用户
[root@host66 ~]# mysql -uroot -p123qqq...A
mysql> grant replication slave on *.* to repluser@"%" Identified by "123qqq...A";
mysql> exit;

# 配置数据库器host67 (与host66相同配置)
...
#启用binlog日志
server_id=67
log_bin=master67
...
# 配置数据库器host68 (与host66相同配置)
...
#启用binlog日志
server_id=68
log_bin=master68
...
# 所有数据库服务器之间可以彼此免密登录           

# 配置host66 免密登录host67和host68   
[root@host66 ~]# ssh-keygen  
[root@host66 ~]# ssh-copy-id root@192.168.88.67
[root@host66 ~]# ssh-copy-id root@192.168.88.68 
# 配置host67 免密登录host66和host68
[root@host67 ~]# ssh-keygen  
[root@host67 ~]# ssh-copy-id root@192.168.88.66
[root@host67 ~]# ssh-copy-id root@192.168.88.68 
# 配置host68 免密登录host66和host67
[root@host68 ~]# ssh-keygen  
[root@host68 ~]# ssh-copy-id root@192.168.88.66
[root@host68 ~]# ssh-copy-id root@192.168.88.67 

# 管理主机可以免密登录所有数据库服务器(数据库服务器不需要免密登录管理主机)     
[root@mgm60 ~]# ssh-keygen
[root@mgm60 ~]# ssh-copy-id  root@192.168.88.66
[root@mgm60 ~]# ssh-copy-id  root@192.168.88.67
[root@mgm60 ~]# ssh-copy-id  root@192.168.88.68 
# 在192.168.88.66查看日志信息
[root@host66 ~]# mysql -uroot -p123qqq...A 
MySQL> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master66.000001 |      441 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+
                                    
# 配置192.168.88.67
# 指定主服务器信息
[root@host67 ~]# mysql -uroot -p123qqq...A
mysql> change master to  
master_host="192.168.88.66",
master_user="repluser",
master_password="123qqq...A",
master_log_file="master66.000001", # 在66主机查看后填写
master_log_pos=441;  # 在66主机查后填写
# 启动slave进程 
MySQL>start slave;
# 查看状态 (IO线程和 SQL线程都是yes状态)
mysql> show slave status \G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
                                
# 配置192.168.4.68
#指定主服务器信息
[root@host68 ~]# mysql -uroot -p123qqq...A
mysql> change master to  
master_host="192.168.88.66",
master_user="repluser",
master_password="123qqq...A",
master_log_file="master66.000001", # 在66主机查后填写
master_log_pos=441; # 在66主机查看后填写
# 启动slave进程  
MySQL>start slave;
# 查看状态 (IO线程和 SQL线程都是yes状态)
mysql> show slave status \G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

第二步:配置管理主机

# 安装依赖软件
[root@mgm60 ~]# cd mha
[root@mgm60 ~]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
[root@mgm60 ~]# yum -y install perl-*.rpm
[root@mgm60 ~]# yum -y install  perl-ExtUtils-* perl-CPAN*

# 安装 mha-manager 软件
[root@mgm60 mha ]# tar -xf mha4mysql-manager-0.56.tar.gz 
[root@mgm60 mha ]# cd mha4mysql-manager-0.56/   
# 配置                    
[root@mgm60 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@mgm60 mha4mysql-manager-0.56]# make && make install  

# 列出管理命令
[root@mgm60 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@mgm60 mha4mysql-manager-0.56]# mkdir /etc/mha
# 创建主配置文件
 [root@mgm60 mha4mysql-manager-0.56]# cp samples/conf/app1.cnf  /etc/mha/
# 编辑主配置文件
# 说明:模版文件是个半成品 需要根据环境准备完善
[root@mgm60 ~]# 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 # 拷贝binlog日志内容连接用户
repl_password=123qqq...A # 拷贝binlog日志内容连接用户密码

user=plj # 监控用户(客户端登录管理主机的用户)
password=123qqq...A  # 监控用户密码

# 定义监视的数据库服务器
[server1]
hostname=192.168.88.66 # 数据库服务器Ip地址
port=3306 # MySQL服务端口号
candidate_master=1 # 参加主服务器竞选

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

[server3]
hostname=192.168.88.68  
port=3306
candidate_master=1
# 创建脚本并指定vip地址
[root@mgm60 ~]# cd mha
# 拷贝默认脚本文件到工作目录下
[root@mgm60 mha]# cp master_ip_failover  /etc/mha/
# 添加执行权限
[root@mgm60 mha]# chmod +x /etc/mha/master_ip_failover 
# 修改vip地址(其他配置不用修改)
[root@mgm60 mha]# vim +35 /etc/mha/master_ip_failover 
my $vip = '192.168.88.100/24';  # vip地址
my $key = "1"; # 定义变量
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip"; # 配置Ip(eth0根据数据库服务器名字进行同步修改)
my $ssh_stop_vip = "/sbin/ifconfig  eth0:$key down";  # 释放ip(eth0根据数据库服务器名字进行同步修改)

第三步:配置数据库服务器

[root@host66 ~]# which ifconfig  || yum -y install net-tools 
[root@host67 ~]# which ifconfig  || yum -y install net-tools 
[root@host68 ~]# which ifconfig  || yum -y install net-tools 
# 配置ip地址
[root@host66 ~]# ifconfig  eth0:1 192.168.88.100/24   
# 查看IP地址
[root@host66 ~]# ifconfig  eth0:1 
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.88.100  netmask 255.255.255.0  broadcast 192.168.88.255
        ether 52:54:00:98:33:28  txqueuelen 1000  (Ethernet)
# 配置host66主机
[root@host66 ~]# cd mha
# 安装依赖
[root@host66 mha]# yum -y install perl-*.rpm  
# 安装mha-node软件
[root@host66 mha ~ ]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm       
# 根据版本不同安装不同的mha-node软件
[root@host66 mha ~ ]# yum -y install mha4mysql-node.noarch.rpm      

# 配置Host67主机(与66一致)
...

# 配置host68主机(与66一致)
...
# 在master服务器添加
[root@host66 ~]# mysql -uroot -p123qqq...A
mysql> grant all on *.*  to plj@"%"  identified by "123qqq...A";
mysql> exit;

# 在slave服务器查看是否同步
[root@host67 ~]# mysql -uroot -p123qqq...A 
Mysql> select user from mysql.user where user="plj";
+------+
| user |
+------+
| plj  |
+------+
[root@host67 ~]# 

[root@host68 ~]# mysql -uroot -p123qqq...A
Mysql> select user from mysql.user where user="plj";
+------+
| user |
+------+
| plj  |
+------+

第四步:在管理主机测试配置

[root@mgm60 ~]# mysql  -h192.168.88.66  -uplj –p123qqq…A
[root@mgm60 ~]# mysql  -h192.168.88.67  -uplj –p123qqq…A
[root@mgm60 ~]# mysql  -h192.168.88.68  -uplj –p123qqq…A
[root@mgm60 ~]# masterha_check_ssh  --conf=/etc/mha/app1.cnf    
All SSH connection tests passed successfully. #成功提示
[root@mgm60 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf
MySQL Replication Health is OK.   #成功提示

没有成功的排错思路:

1、检查app1.cnf文件配置
2、检查从服务器 从的状态是否正常
3、检查从服务器 是否都安装了mha4mysql-node.noarch
4、检查从服务器是否都添加了 监控用户
5、查看故障切换脚本是否添加了执行权限

第五步:在管理主机启动管理服务

# 启动服务器
# --remove_dead_master_conf:在app1.cnf文件里删除宕机的master服务器
# --ignore_last_failover:可以做多次故障切换
[root@mgm60 ~]# nohup masterha_manager 
  --conf=/etc/mha/app1.cnf     
  --remove_dead_master_conf 
  --ignore_last_failover  2>  /dev/null  &

# 查看管理服务运行状态
[root@mgm60 ~]# masterha_check_status  
  --conf=/etc/mha/app1.cnf
app1 (pid:1977) is running(0:PING_OK), master:192.168.88.66

# 在master 服务器66主机查看vip 地址
[root@host66 ~]# ip addr show | grep 192.168.88
inet 192.168.88.66/24 brd 192.168.88.255 scope global noprefixroute ens33
inet 192.168.88.100/24 brd 192.168.88.255 scope global secondary ens33:1
上一篇下一篇

猜你喜欢

热点阅读