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 |
二、配置流程:
- 第一步:数据库服务器集群环境(host66~67)
- 第二步:配置管理主机(mgm60)
- 第三步:配置数据库服务器(host66~67)
- 第四步:在管理主机(mgm60)测试配置
- 第五步:在管理主机(mgm60)启动管理服务
三、实操搭建高可用集群配置:
第一步:数据库服务器集群环境
- 公共配置(3台数据库服务器都要配置)
启用binlog日志
开启半同步复制模式
禁止删除本机的中继日志文件
重启数据库服务
添加从服务器拷贝sql命令时连接使用的用户
# 配置数据库器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
...
- 配置ssh免密登录
# 所有数据库服务器之间可以彼此免密登录
# 配置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
- 配置MySQL 一主多从 同步结构
- 主机host68 和 host67 分别做host66 的从服务器
# 在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根据数据库服务器名字进行同步修改)
第三步:配置数据库服务器
- 保证数据库服务器有ifconfig 命令
[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
- 配置vip地址,把vip地址配置在master 服务器上
# 配置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)
- 数据库服务器安装(mha相关)软件
# 配置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
- 测试ssh免密登录配置
[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. #成功提示
- 2个测试都成功了 管理服务才能启动成功
没有成功的排错思路:
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