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、付费专栏及课程。

余额充值