还有一种MMM 高可用集群:http://blog.51cto.com/ywliyq/1856974
集群(MHA +mysql(一主多从结构))
集群:使用多台服务器,提供相同的服务
集群的类型:
负载均衡(LB)
高可用集群(HA) //互联网公司用的比较多,
高计算集群(HPC) //不用再互联网公司 ,用在特殊机构(气象,勘探,科研)
##高可用集群(HA) 万一有一台数据库服务器,出现问题,会马上切换到另外一台服务器中,(切换原理跟ping类似,那台数据库服务器,优先ping通,就切换到另一台服务器当中),这种操作基于第三方软(MHA)实现。保证数据的一致性,所有的服务器必须开启半同步复制模式,所有的数据库有可能成为主库和从库,随时接替主库工作。
2.部署高可用集群
3准备实验拓扑:
所有主机无密码登陆:
3.1从51~55全部要创建公钥,把公钥传送到其他主机
[root@host51 ~]# ssh-keygen //一路回车,创建成功
[root@host51 ~]# ssh-copy-id root@192.168.4.54
[root@host51 ~]# ssh 192.168.4.52
[root@host51 ~]# ssh 192.168.4.53
[root@host51 ~]# ssh 192.168.4.54
[root@host51 ~]# ssh 192.168.4.55
56 做检测机
51~55 做数据库服务器
4.配置高可用集群:
保证授权用户一致,把之前实验的授权用户删除:
mysql> select host,user from mysql.user;
mysql>drop user repluser"%";
测试集群:
mysql> mysql -h192.168.4.51 -uadmin -p123456
配置集群:
客户端:
(51~55都要安装)
[root@host51 ~]# yum -y install perl-DBD-mysql
[root@host51 ~]# rpm -ivh mha-soft-student/mha4mysql-node-0.56-0.el6.noarch.rpm
管理端:
(56管理服务器)
[root@host56 mha-soft-student]# which perl
/usr/bin/perl
78 tar -zxvf mha4mysql-manager-0.56.tar.gz
79 yum -y install perl-DBD-mysql
80 rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
81 yum -y install perl-ExtUtil-*
82 yum -y install perl-ExtUtils-*
83 yum -y install perl-CPAN-*
84 cd mha4mysql-manager-0.56/
85 perl Makefile.PL
86 make
87 make install
==> Should we try to install the required module(s) anyway? [n]
配置管理主机:
把命令拷贝到$PATH路径下
[root@host56 mha4mysql-manager-0.56]# ls
AUTHORS COPYING lib MANIFEST MYMETA.yml rpm tests
bin debian Makefile META.yml pm_to_blib samples
blib inc Makefile.PL MYMETA.json README t
[root@host56 mha4mysql-manager-0.56]# ls bin
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@host56 mha4mysql-manager-0.56]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@host56 mha4mysql-manager-0.56]# cp -r bin /root/
[root@host56 mha4mysql-manager-0.56]# ls /root/bin
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@host56 mha4mysql-manager-0.56]# masterha_
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@host56 mha4mysql-manager-0.56]# mkdir /etc/mha_manager
[root@host56 mha4mysql-manager-0.56]# cd /etc/mha_manager
[root@host56 mha_manager]# ls
[root@host56 mha-soft-student]# cd mha4mysql-manager-0.56/samples
[root@host56 samples]# ls conf/
app1.cnf masterha_default.cnf
[root@host56 samples]# cp conf/app1.cnf /etc/mha_manager/
[root@host56 conf]# vim /etc/mha_manager/app1.cnf
1 [server default]
2 manager_workdir=/etc/mha_manager
3 manager_log=/etc/mha_manager/manager.log
4 master_ip_failover_script=/etc/mha_manager/master_ip_failover
5 ssh_user=root
6 ssh_port=22
7
8 repl_user=repluser
9 repl_password=123456
10
11 user=root
12 password=123qqq...A
13
14 [server1]
15 hostname=192.168.4.51
16 candidate_master=1
17
18 [server2]
19 hostname=192.168.4.52
20 candidate_master=1
21
22 [server3]
23 hostname=192.168.4.53
1,8 顶端
:wq
复制脚本,添加vip地址:
[root@host56 ~]# cd mha-soft-student/
[root@host56 mha-soft-student]# cp master_ip_failover /etc/mha_manager/
[root@host56 mha-soft-student]# chmod +x /etc/mha_manager/master_ip_failover
[root@host56 ~]# vim /etc/mha_manager/master_ip_failover //做vip地址
35 my $vip = '192.168.4.100/24'; # Virtual IP
36 my $key = "1";
37 my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
38 my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
51:(同步到52~55)
51上授权:
mysql>grant all on *.* to root@'%' identified by "123qqq...A";
mysql> select user,host from mysql.user where user="root";
+------+-----------+
| user | host |
+------+-----------+
| root | % |
| root | localhost |
+------+-----------+
2 rows in set (0.01 sec)
56检测机上测试:
[root@host56 ~]# which mysql
/usr/bin/mysql
[root@host56 ~]# mysql -h192.168.4.51 -uroot -p123qqq...A
测试同步测试:
[root@host56 mha_manager]# masterha_check_ssh --conf=/etc/mha_manager/app1.cnf
Tue Jul 24 14:50:56 2018 - [info] All SSH connection tests passed successfully. //成功的标志
[root@host56 mha_manager]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf
MySQL Replication Health is OK. //成功标志
把vip地址手动部署到主库上:(51主库)
[root@host51 ~]# ifconfig eth0:1
eth0:1: flags=4163 mtu 1500
ether 52:54:00:84:76:d5 txqueuelen 1000 (Ethernet)
[root@host51 ~]# ifconfig eth0:1 192.168.4.100/24
[root@host51 ~]# ifconfig eth0:1
eth0:1: flags=4163 mtu 1500
inet 192.168.4.100 netmask 255.255.255.0 broadcast 192.168.4.255
ether 52:54:00:84:76:d5 txqueuelen 1000 (Ethernet)
客户端检测vip地址:(50主机)
[root@host50 ~]# mysql -h192.168.4.100 -uroot -p123qqq...A
启动56上的管理服务:
--remove_dead_master_conf // 不在 app1.cnf 文件里删除宕机的主库的信息
--ignore_last_failover // 忽略 .health 文件 忽略ssh的健康检查 (默认 8个小时之内连续切换主机,就不给切换)
[root@host56 ~]# masterha_manager --conf=/etc/mha_manager/app1.cnf --remove_dead_master_conf --ignore_last_failover
[root@host56 ~]# masterha_check_status --conf=/etc/mha_manager/app1.cnf
app1 (pid:6767) is running(0:PING_OK), master:192.168.4.51
检测集群:
1.关闭主库:
[root@host51 ~]# ifconfig eth0:1
eth0:1: flags=4163 mtu 1500
inet 192.168.4.100 netmask 255.255.255.0 broadcast 192.168.4.255
ether 52:54:00:84:76:d5 txqueuelen 1000 (Ethernet)
[root@host51 ~]# systemctl stop mysqld
[root@host51 ~]# ifconfig eth0:1
eth0:1: flags=4163 mtu 1500
ether 52:54:00:84:76:d5 txqueuelen 1000 (Ethernet)
mysql> select @@hostname; //客户端连接的主机
+------------+
| @@hostname |
+------------+
| host51 |
+------------+
1 row in set (0.00 sec)
//关闭主库,vip地址自动转换到备用主库,启动跟踪自动断开,客户端并没有退出连接;
2.查看关闭主库,后那个是备有主库:
2.1查看客户端新的主库的主机名
mysql> select @@hostname; //主库切换到52主机上
+------------+
| @@hostname |
+------------+
| host52 |
+------------+
1 row in set (0.00 sec)
//谁的数据最接近主库,MHA接连接到谁充当主库
vim /etc/mha_manager/app1.cnf
//管理机把旧主库的配置文件自动删除,
--remove_dead_master_conf
[server2]
candidate_master=1
hostname=192.168.4.52
[root@host56 ~]# masterha_check_status --conf=/etc/mha_manager/app1.cnf
app1 (pid:7108) is running(0:PING_OK), master:192.168.4.52
[root@host2 ~]# ifconfig eth0:1
eth0:1: flags=4163 mtu 1500
inet 192.168.4.100 netmask 255.255.255.0 broadcast 192.168.4.255
ether 52:54:00:20:b5:80 txqueuelen 1000 (Ethernet)
把当前主库51的数据库服务停止,但客户端访问数据库连接不会断,查看主机名显示的是52主机的主机名,在52本机查看vip地址也能够查看到。 主库51的配置在管理主机56的app1.cnf文件查看不到了。
所有从服务器都会把主库的IP地址自动指向192.168.4.52
把坏掉的主机51添加到集群里:
1.客户端写进新数据
mysql> insert into t1 values (333);
Query OK, 1 row affected (0.20 sec)
mysql> insert into t1 values (333);
Query OK, 1 row affected (0.05 sec)
mysql> select * from t1;
+------+
| id |
+------+
| 9999 |
| 9999 |
| 888 |
| 222 |
| 222 |
| 333 |
| 333 |
+------+
7 rows in set (0.00 sec)
2.查看新主库的数据
mysql> select * from gamedb.t1; //同步成功
+------+
| id |
+------+
| 9999 |
| 9999 |
| 888 |
| 222 |
| 222 |
| 333 |
| 333 |
+------+
7 rows in set (0.00 sec)
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master52.000001 | 1454 | | | |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
2.手动指定一下,当前主库的从库
51.的数据是需要手动恢复
mysql> change master to
-> master_host="192.168.4.52",
-> master_user="repluser",
-> master_password="123456",
-> master_log_file="master52.000001",
-> master_log_pos=1454; //51 重新变成52的从库
Query OK, 0 rows affected, 2 warnings (0.30 sec)
mysql> start slave;
Query OK, 0 rows affected (0.02 sec)
mysql> show slave status\G;
*************************** 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.000001
Read_Master_Log_Pos: 1454
Relay_Log_File: host51-relay-bin.000002
Relay_Log_Pos: 319
Relay_Master_Log_File: master52.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
把主机51
[root@host56 ~]# vim /etc/mha_manager/app1.cnf
[server1]
candidate_master=1
hostname=192.168.4.51
:wq
[root@host56 ~]# 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
[root@host56 ~]# masterha_check_status --conf=/etc/mha_manager/app1.cnf
app1 (pid:8479) is running(0:PING_OK), master:192.168.4.52
总结:
一主多从 主从同步结构
在做主机的主机上,开启半同步复制,并设置不自动删除中继日志文件
配置ssh密钥对认证登陆
所有主机上都要安装软件依赖的perl包
配置集群:
1.配置数据库服务器:安装mha_node软件包
2.配置管理主机
2.1安装软件包:mha_node 和 mha _manager
2.2创建管理命令
2.3编写主配置文件app1.cnf
2.4根据配置文件的设置
在数据库服务器上创建监控用户
在本机创建故障切换脚本,并修改脚本指定vip 部署的网络的接口名
2.5测试主配置文件app1.cnf
测试ssh服务: masterha_check_ssh --conf=
测试主从同步:masterha_check_repl --conf=
2.6手动把规定的vip地址部署到主库51上
2.7启动管理服务,并查看状态
三,测试集群
访问存储数据:
50]#mysql -hVIP 地址 -uroot -p密码
3.2测试高可集群
3.2查看客户端连接的株枯名,vip地址转换的主机名
四。把坏掉的服务器添加到集群
1.启动数据库服务,并指定当前的主库信息
2.在主配置文件app1.cnf里添加主库51的信息,并启动管理服务,查看当前的连接的主机名