部署mysql集群,使用MHA软件+mysql主从同步 实现
一.什么时集群? 多台服务器提供相同的服务(网站,数据库)
二 集群分类? LB (负载均衡) HA(高可用) HPC(专业领域)
三 为什么使用集群
四 配置集群? 安装软件提供服务实现(LVS,haproxy,nginx,keepalived)
部署MYSQL高可用集群
5.1 MHA集群 : 自动切换故障
组成 :管理节点, 数据节点
5.1 MHA集群环境准备
主机51-56 : yum -y install perl-*
cd mha-soft-student/
yum -y install perl-*
主机 51-55:
cd mha-soft-student/
yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
主机56
:[root@host56 mha-soft-student]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
[root@host56 mha-soft-student]# tar -zxvf mha4mysql-manager-0.56.tar.gz
[root@host56 mha-soft-student]# cd mha4mysql-manager-0.56/
[root@host56 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...
[root@host56 mha4mysql-manager-0.56]# make && make install
[root@host56 mha4mysql-manager-0.56]# masterha_TAB键
56可以无密码 ssh 51-55
ssh [email protected]
42 ssh [email protected]
43 ssh [email protected]
44 ssh [email protected]
45 ssh [email protected]
51-55主机可以彼此互相无密码ssh
二 配置MHA集群
2.1 配置mysql 主从同步 (一主一从)
2.1.1,配置主服务器51
[root@host51 ~]# vim /etc/my.cnf
[mysqld]
secure_file_priv=/mybak
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
server_id=51
log-bin=master51
relay_log_purge=off
[root@host51 ~]# systemctl restart mysqld
mysql> grant replication slave on *.* to plj@"%" identified by "123qqq...A";
mysql> set global relay_log_purge=off;
2.1.2 配置从服务器52 (备用主库)
[root@host52~]# vim /etc/my.cnf
[mysqld]
secure_file_priv=/mybak
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
server_id=52
log-bin=master52
relay_log_purge=off
[root@host52 ~]# systemctl restart mysqld
[root@host52 mha-soft-student]# mysql -uroot -p123456
mysql> change master to master_host="192.168.4.51",master_user="plj",master_password="123qqq...A",master_log_file="master51.000001",master_log_pos=436;
mysql> start slave;
mysql> show slave status\G;
2.1.2 配置从服务器53 (备用主库)
vim /etc/my.cnf
[mysqld]
validate_password_length=6
validate_password_policy=0
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
server_id=53
log-bin=master53
relay_log_purge=off
[root@host53~]# systemctl restart mysqld
mysql> change master to master_host="192.168.4.51",master_user="plj",master_password="123qqq...A",master_log_file="master51.000001",master_log_pos=436;
Query OK, 0 rows affected, 2 warnings (0.11 sec)
mysql> start slave;
mysql> show slave status\G;
2.1.2 配置从服务器54(纯从库)
[root@host54 mha-soft-student]# vim /etc/my.cnf
server_id=54
plugin-load ="rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-slave-enabled = 1
relay_log_purge=off
mysql> change master to master_host="192.168.4.51",master_user="plj",master_password="123qqq...A",master_log_file="master51.000001",master_log_pos=436;
Query OK, 0 rows affected, 2 warnings (0.11 sec)
mysql> start slave;
mysql> show slave status\G;
2.1.2 配置从服务器55(纯从库)
[root@host54 mha-soft-student]# vim /etc/my.cnf
server_id=55
plugin-load ="rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-slave-enabled = 1
relay_log_purge=off
mysql> change master to master_host="192.168.4.51",master_user="plj",master_password="123qqq...A",master_log_file="master51.000001",master_log_pos=436;
Query OK, 0 rows affected, 2 warnings (0.11 sec)
mysql> start slave;
mysql> show slave status\G;
2.2 配置管理主机1(192.168.4.56)
[root@host56 ~]# mkdir /etc/mha_manager #创建指定的目录
[root@host56 ~]# cd mha-soft-student/
[root@host56 ~]# ls
[root@host56 mha-soft-student]# cd mha4mysql-manager-0.56/
[root@host56 mha4mysql-manager-0.56]# cp samples/conf/app1.cnf /etc/mha_manager/ #拷贝配置文件
[root@host56 mha4mysql-manager-0.56]# vim /etc/mha_manager/app1.cnf
2.2.1编写配置文件
[root@host56 mha4mysql-manager-0.56]# vim /etc/mha_manager/app1.cnf
[server default] # 服务的默认配置
ma nager_workdir=/etc/mha_manager
manager_log=/etc/mha_manager/manager.log
master_ip_failover_script=/etc/mha_manager/master_ip_failover #自动failover 切换的脚本 ,利用perl语言
ssh_user=root
ssh_port=22 #连接所有主机的用户和端口号
repl_user=plj #连接主从服务器的用户
repl_password=123qqq...A
user=root # 操作数据库的用户
password=123456
[server1] # 指定服务器
hostname=192.168.4.51
candidate_master=1
[server2]
hostname=192.168.4.52
candidate_master=1
[server3]
hostname=192.168.4.53
candidate_master=1
[server4]
hostname=192.168.4.54
no_master=1
[server5]
hostname=192.168.4.55
no_master=1
2.2.2 创建故障切换脚本
[root@host56 ~]# cd mha-soft-student/
[root@host56 mha-soft-student]# cp master_ip_failover /etc/mha_manager/
[root@host56 mha-soft-student]# vim +35 /etc/mha_manager/master_ip_failover
my $vip = '192.168.4.100/24'; # Virtual IP 修改vip地址
[root@host56 mha-soft-student]# chmod +x /etc/mha_manager/master_ip_failover
2.2.3把vip 地址部署在当前的主库上(192.168.4.51)
[root@host51 ~]# ifconfig eth0:1 192.168.4.100/24 #在主机51上配置vip
[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:2c:d4:60 txqueuelen 1000 (Ethernet)
2.2.4 用户授权(根据配置文件)
2.2.4.1 给从服务器同步数据的连接用户(51/52/53)
52mysql> grant replication slave on *.* to plj@"%"
identified by "123qqq...A";
53mysql> grant replication slave on *.* to plj@"%"
identified by "123qqq...A";
2.2. 4.2 管理主机56监控数据库服务器状态的连接用户root(51-55)
51mysql> grant all on *.* to root@'%'
identified by "123qqq...A";
52mysql> grant all on *.* to root@'%'
identified by "123qqq...A";
53mysql> grant all on *.* to root@'%'
identified by "123qqq...A";
54mysql> grant all on *.* to root@'%'
identified by "123qqq...A";
55mysql> grant all on *.* to root@'%'
identified by "123qqq...A";
三 测试配置(192.168.4.56)
3.1 测试ssh无密码登陆
[root@host56 mha-soft-student]# masterha_check_ssh --conf=/etc/mha_manager/app1.cnf #检查56是不是都可以无密码登陆 (51-55)
Wed May 15 17:57:50 2019 - [info] All SSH connection tests passed successfully.
3.2 测试mysql主从同步
[root@host56 mha-soft-student]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf # 检查51-55之间的主从是否ok
Weokd May 15 17:58:38 2019 - [info] Dead Servers:
Wed May 15 17:58:38 2019 - [info] Alive Servers:
Wed May 15 17:58:38 2019 - [info] 192.168.4.51(192.168.4.51:3306)
Wed May 15 17:58:38 2019 - [info] 192.168.4.52(192.168.4.52:3306)
Wed May 15 17:58:38 2019 - [info] 192.168.4.53(192.168.4.53:3306)
Wed May 15 17:58:38 2019 - [info] 192.168.4.54(192.168.4.54:3306)
Wed May 15 17:58:38 2019 - [info] 192.168.4.55(192.168.4.55:3306)
MySQL Replication Health is OK.
3.3 启动管理服务
查看
[root@host56 mha-soft-student]# masterha_check_status --conf=/etc/mha_manager/app1.cnf
app1 is stopped(2:NOT_RUNNING).
[root@host56 ~]# masterha_manager --conf=/etc/mha_manager/app1.cnf --remove_dead_master_conf --ignore_last_failover
3.4 测试mysql服务高可用
3.4.1 在主库51上添加访问数据的连接用户
mysql> create database db9;
mysql> create table db9.t1 (id int);
mysql> grant select ,insert on db9.* to
yaya99@"%" identified by "123qqq...A";
3.4.2 在客户端50连接vip地址访问数据库服务
50]# mysql -h192.168.4.100 -uyaya99 -p123qqq...A
mysql> insert into db9.t1 values(100),(200),(300);
mysql> select * from db9.t1;
在51的所有从服务器上都可以看到同样的数据
3.4.3 停止主库51的数据库的服务,50主机依然可以访问到数据
[root@host51 ~]# systemctl stop mysqld.service
如何把坏掉的51和52 服务机器再添加到集群里?
2.1 启动51 和52 主机的数据库服务
2.2 把51 和52主机配置为的当前主服务器的从服务器
2.3 把主机51 和52 添加app1.cnf 文件里
]#vim /etc/mha_manager/app1.cnf
[server1]
candidate_master=1
hostname=192.168.4.51
[server2]
candidate_master=1
hostname=192.168.4.52
:wq
2.4在主机56上运行管理服务,并查看服务状态
]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf
]# masterha_manager --conf=/etc/mha_manager/app1.cnf
测试ssh 登陆
测试主从服务