mysql高可用集群实验(环境准备)步骤

拓扑结构

 

            master51

       |

|

______________________________________________________

  | |         |         | |

 slave52    slave53   slave54     slave55      mgm56

                                              Manager

公共配置:

在所有主机上安装软件软件包(51~55)依次安装

[root@host51share]# ls  perl-*.rpm

perl-Config-Tiny-2.14-7.el7.noarch.rpm          

perl-Mail-Sender-0.8.23-1.el7.noarch.rpm       

perl-MIME-Types-1.38-2.el7.noarch.rpm

perl-Email-Date-Format-1.002-15.el7.noarch.rpm  

perl-Mail-Sendmail-0.79-21.el7.art.noarch.rpm  

perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm

perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm       

perl-MIME-Lite-3.030-1.el7.noarch.rpm

 

[root@host51share]# yum -y  install  perl-*.rpm

MHA 是用per编写的

 

一、配置所有数据节点主机之间可以互相以ssh密钥对方式认证登陆(51~55)依次操作,56不需要无密码登陆

[root@host51 ~]# ssh-keygen

[root@host51 ~]# ssh-copy-id root@192.168.4.54

二、配置manager56主机 无密码ssh登录 所有数据节点主机(把密钥传输给51~55)

[root@host56 ~]#  ssh-keygen

[root@host56 ~]# ssh-copy-id root@192.168.4.51~55

 

三、配置主从同步,要求如下:

51 主库     开半同步复制

52 从库(备用主库)  开半同步复制         //保证主库出问题,数据跟主库是一直的

53 从库(备用主库)  开半同步复制         //保证主库出问题,数据跟主库是一直的

54 从库 不做备用主库所以不用开半同步复制 

55 从库 不做备用主库所以不用开半同步复制

 

 

 

 

 

51:

[root@host51 ~]# 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

 

server_id=51

log-bin=master51

binlog-format="mixed"    //指定binlog日志

:wq

[root@host51 ~]# systemctl  restart  mysqld

[root@host51 ~]# ls  /var/lib/mysql/master51.*

/var/lib/mysql/master51.000001  /var/lib/mysql/master51.index

 

[root@host51 ~]# mysql -uroot -p

 

mysql> set global validate_password_policy=0;

Query OK, 0 rows affected (0.00 sec)

 

mysql> set global validate_password_length=6;

Query OK, 0 rows affected (0.00 sec)

 

mysql> grant  replication slave  on  *.*  to repluser@"%"  identified by "123456";

Query OK, 0 rows affected, 1 warning (10.03 sec)

 

mysql> set global relay_log_purge=off;                  //不删除中继日志文件

Query OK, 0 rows affected (0.00 sec)

 

mysql> show master status;

+-----------------+----------+--------------+------------------+-------------------+

| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+-----------------+----------+--------------+------------------+-------------------+

| master51.000001 |      441 |              |                  |                   |

+-----------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

 

 

52:

[root@host2 ~]# vim /etc/my.cnf

[mysql]

 

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

binlog-format="mixed"

:wq

[root@host2 ~]# systemctl  restart  mysqld

[root@host2 ~]# mysql -uroot -p

mysql> set global relay_log_purge=off;      //不删除中继日志文件

Query OK, 0 rows affected (0.00 sec)

 

mysql> change master to master_host="192.168.4.51",master_user="repluser",

    -> master_password="123456",master_log_file="master51.000001",master_log_pos=441;

 

Query OK, 0 rows affected, 2 warnings (0.30 sec)

 

mysql> start slave;

Query OK, 0 rows affected (0.09 sec)

 

mysql> show slave status\G;

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.4.51

                  Master_User: repluser

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: master51.000001

          Read_Master_Log_Pos: 441

               Relay_Log_File: host2-relay-bin.000002

                Relay_Log_Pos: 319

        Relay_Master_Log_File: master51.000001

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

 

 

53:

[root@host53 ~]# 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

 

server_id=53

log-bin=master53

binlog-format="mixed"

:wq

[root@host53 ~]# systemctl  restart  mysqld

[root@host53 ~]# ls /var/lib/mysql/master53.*

/var/lib/mysql/master53.000001  /var/lib/mysql/master53.index

[root@host53 ~]# mysql -uroot -p123456

mysql> set global relay_log_purge=off;

Query OK, 0 rows affected (0.00 sec)

mysql> change master to master_host="192.168.4.51",master_user="repluser",

    -> master_password="123456",master_log_file="master51.000001",master_log_pos=441;

Query OK, 0 rows affected, 2 warnings (0.34 sec)

 

mysql> start slave;

Query OK, 0 rows affected (0.05 sec)

 

mysql> show slave status\G;

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.4.51

                  Master_User: repluser

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: master51.000001

          Read_Master_Log_Pos: 441

               Relay_Log_File: host53-relay-bin.000002

                Relay_Log_Pos: 319

        Relay_Master_Log_File: master51.000001

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

 

54:

[root@host54 ~]# vim /etc/my.cnf

[mysqld]

server_id=54

:wq

 

 

[root@host54 ~]# systemctl  restart  mysqld

[root@host54 ~]# mysql -uroot -p123456

mysql> change master to master_host="192.168.4.51",master_user="repluser",

    -> master_password="123456",master_log_file="master51.000001",master_log_pos=441;

Query OK, 0 rows affected, 2 warnings (0.31 sec)

 

mysql> start slave;

Query OK, 0 rows affected (0.09 sec)

 

mysql> show slave status\G;

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.4.51

                  Master_User: repluser

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: master51.000001

          Read_Master_Log_Pos: 441

               Relay_Log_File: host54-relay-bin.000002

                Relay_Log_Pos: 319

        Relay_Master_Log_File: master51.000001

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

 

55:

[root@host55 ~]# vim /etc/my.cnf

[root@host55 ~]# systemctl  restart  mysqld

[root@host55 ~]# mysql -uroot -p123456

mysql> change master to master_host="192.168.4.51",master_user="repluser",master_password="123456",master_log_file="master51.000001",master_log_pos=441;

Query OK, 0 rows affected, 2 warnings (0.37 sec)

 

mysql> start slave;

Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G;

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.4.51

                  Master_User: repluser

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: master51.000001

          Read_Master_Log_Pos: 441

               Relay_Log_File: host55-relay-bin.000002

                Relay_Log_Pos: 319

        Relay_Master_Log_File: master51.000001

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

[root@host2 ~]# mysql -uroot -p123456 -e "show slave status\G" | grep -i yes

mysql: [Warning] Using a password on the command line interface can be insecure.

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

 

3.6、在客户端测试主从同步配置

3.6.1  在主库51上添加访问数据的授权用户

mysql> grant all on  gamedb.* to admin@"%" identified by "123456";

Query OK, 0 rows affected, 1 warning (0.02 sec)

 

3.6.2  在客户端主机连接主库51 建库表记录

mysql> create database gamedb;

Query OK, 1 row affected (0.01 sec)

 

mysql> create table  gamedb.t1 (id int);

Query OK, 0 rows affected (0.04 sec)

 

mysql> insert into gamedb.t1 values(999);

Query OK, 1 row affected (0.15 sec)

 

mysql> insert into gamedb.t1 values(999);

Query OK, 1 row affected (0.05 sec)

 

mysql> select  * from gamedb.t1;

+------+

| id   |

+------+

|  999 |

|  999 |

+------+

2 rows in set (0.00 sec)

 

mysql> 

 

3.6.3  在客户端使用授权用户连接从库52-55,也能看到同样的库表及记录

 

[root@host114 ~]# mysql -h从库IP地址 -uadmin -p123456

mysql> select  * from gamedb.t1;

+------+

| id   |

+------+

|  999 |

|  999 |

+------+

##一主多从的结构

##开半同步复制模式(默认是异步复制模式)

##禁用自动删除中继日志文件

##ssh密钥对认证登陆  56--  >(51-55)  51~55

##所有数据库管理服务器,要给管理主机添加监控时的连接用户

grant all on *.* to root@"%" identified by "123qqq...A"

##所有主机都要安装MHA软件的依赖包perl软件包

配置高可用集群:

数据库服务器(51~55)

安装mha_node软件包

管理主机:

安装mha_node 和mha_manager软件

创建管理软件:

编辑主配置文件app1.cnf (定义56主机的配置  指定数据库服务器)

                                               [server default ]  [serverX]

创建vip地址切换脚本 

chmod +x master_ip_failover 

定义vip地址            vip地址部署到那张网卡上

 

测试配置文件:

master_check_ssh   --conf=/etc/mha_manager/app1.cnf

master_check_repl  --conf=/etc/mha_manager/app1.cnf

 

启动管理服务:

master_status  --conf=/etc/mha_manager/app1.cnf

 

测试集群:

1.客户端连接vip地址访问数据库服务,可以存储数据

2.检测高可用性(那个数据库的数据最新,就把数据库切换到个数据库,—是通过中继日志的最新的记录时间,是根据这个参数作为参考)

 

 

把坏掉的主机添加会集群:

1.运行数据库服务

2.需要手动把数据添加会坏掉的数据库

3.需要在管理机上的配置文件,从新指定主机的信息(app1.cnf)

3.坏掉的主库,需要指定为现有的主库的备用主库(change master to .. ....)

4.启动管理服务

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

运维螺丝钉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值