mysql高可用集群

还有一种MMM 高可用集群:http://blog.51cto.com/ywliyq/1856974

1.集群和高可用集群的区别?
集群(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的信息,并启动管理服务,查看当前的连接的主机名





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维螺丝钉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值