mysql mha多主_MySQL多实例 mha集群

本文详细介绍了如何在一台主机上配置多个MySQL实例,包括配置多实例的步骤、创建数据库目录、初始化授权库以及启动和访问实例。接着,文章讲述了MHA集群的准备工作,包括在所有节点间实现SSH免密登录、安装相关软件包。最后,文章展示了配置MHA集群的详细过程,包括主节点、备用主节点、从节点和管理节点的配置,以及配置MHA管理主机的步骤。
摘要由CSDN通过智能技术生成

Top

NSD DBA2 DAY03

1 案例1:配置MySQL多实例

1.1 问题

在主机192.168.4.56上,配置第1个MySQL实例

实例名称mysql1、端口3307

数据库目录/data3307、pid文件mysql1.pid

错误日志mysql1.err

在主机192.168.4.56上,配置第2个MySQL实例

实例名称mysql2、端口3308

数据库目录/data3308、pid文件mysql2.pid

错误日志mysql2.err

步骤一:配置多实例(192.168.4.56上面操作)

什么是多实例:

在一台物理主机上运行多个数据库服务,可以节约运维成本,提高硬件利用率

1)解压软件、修改目录名

[root@mysql ~]# cd mysql/

[root@mysql mysql]# ls

mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

[root@mysql mysql]# tar -xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

[root@mysql mysql]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql

2)调整PATH变量

[root@mysql mysql]# echo "export PATH=/usr/local/mysql/bin:$PATH" \

>> /etc/profile

[root@mysql mysql]# source /etc/profile

[root@mysql mysql]# echo $PATH

/usr/local/mysql/bin:/usr/local/mycat/bin:/usr/local/mycat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin

3)编辑主配置文件/etc/my.cnf

每个实例要有独立的数据库目录、监听端口号、实例名称和独立的sock文件

[mysqld_multi]        //启用多实例

mysqld = /usr/local/mysql/bin/mysqld_safe        //指定进程文件路径

mysqladmin = /usr/local/mysql/bin/mysqladmin    //指定管理命令路径

user = root        //指定进程用户

[mysqld1]        //实例进程名称

port=3307        //端口号

datadir=/data3307        //数据库目录 ,要手动创建

socket=/data3307/mysqld.sock        //指定sock文件的路径和名称

pid-file=/data3307/mysql1.pid        //进程pid号文件位置

log-error=/data3307/mysql1.err        //错误日志位置

[mysqld2]

port=3308

datadir=/data3308

socket=/data3308/mysqld.sock

pid-file=/data3308/mysql2.pid

log-error=/data3308/mysql2.err

4)创建数据库目录

[root@mysql mysql]# mkdir -p /data3307

[root@mysql mysql]# mkdir -p /data3308

5)创建进程运行的所有者和组 mysql

[root@mysql mysql]# useradd mysql

[root@mysql mysql]# chown mysql:mysql /data*

6)初始化授权库

[root@mysql mysql]# mysqld --user=mysql --basedir=/usr/local/mysql

--datadir=/data3307 --initialize

...

2018-09-26T07:07:33.443378Z 1 [Note] A temporary password is generated for root@localhost: 7L?Vi!dGKmgu        //root用户登录的初始化密码

[root@mysql mysql]# mysqld --user=mysql --basedir=/usr/local/mysql

--datadir=/data3308 --initialize

...

2018-09-26T07:08:07.770289Z 1 [Note] A temporary password is generated for root@localhost: kC)BbyUp1a-b        //root用户登录的初始化密码

7)启动多实例

[root@mysql mysql]# mysqld_multi start 1        //1为实例编号

[root@mysql mysql]# mysqld_multi start 2

8)查看端口

[root@mysql mysql]# netstat -utnlp | grep :3307

tcp6 0 0 :::3307 :::* LISTEN 21009/mysqld

[root@mysql mysql]# netstat -utnlp | grep :3308

tcp6 0 0 :::3308 :::* LISTEN 21177/mysqld

[root@mysql mysql]# ps -C mysqld

PID TTY TIME CMD

21009 pts/1 00:00:00 mysqld

21177 pts/1 00:00:00 mysqld

9)访问多实例

使用初始化密码登录多实例1

[root@mysql mysql]# mysql -u root -p'7L?Vi!dGKmgu' -S /data3307/mysqld.sock

mysql> alter user root@"localhost" identified by '123456';        //修改密码

mysql> show databases;

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

| Database |

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

| information_schema |

| mysql |

| performance_schema |

| sys |

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

4 rows in set (0.00 sec)

使用初始化密码登录多实例2

[root@mysql bin]# mysql -u root -p'kC)BbyUp1a-b' -S /data3307/mysqld.sock

mysql> alter user root@"localhost" identified by '123456';        //修改密码

mysql> show databases;

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

| Database |

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

| information_schema |

| mysql |

| performance_schema |

| sys |

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

4 rows in set (0.00 sec)

10)创建库

mysql> create database db1;

Query OK, 1 row affected (0.00 sec)

mysql> show databases;

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

| Database |

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

| information_schema |

| db1 |

| mysql |

| performance_schema |

| sys |

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

5 rows in set (0.00 sec)

11)停止启动的实例服务

mysqld_multi --user=root --password=密码 stop 实例编号

[root@mysql mysql]# mysqld_multi --user=root --password=123456 stop 1

[root@mysql mysql]# netstat -utnlp | grep :3307 //查看没有端口

[root@mysql mysql]# mysqld_multi --user=root --password=123456 stop 2

[root@mysql mysql]# netstat -utnlp | grep :3308        //查看没有端口

[root@mysql mysql]# mysql -uroot -p123456 -S /data3307/mysqld.sock

//拒绝连接

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

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/data3307/mysqld.sock' (2)

2 案例2:准备MHA集群环境

2.1 问题

准备6台虚拟机,并按照本节规划配置好IP参数

在这些虚拟机之间实现SSH免密登录

在相应节点上安装好MHA相关的软件包

2.2 方案

使用6台RHEL 7虚拟机,如图-1所示。准备集群环境,安装依赖包,授权用户,配置ssh密钥对认证登陆,所有节点之间互相以root秘钥对认证登录,管理主机以root密钥对认证登录所有数据节点主机,配置mha集群。

42ce07bf3e1c74c1f9f551c3a99dd340.png

图-1

IP规划,如图-2所示:

97fc52b2b18cc45e4861c3cb2f008671.png

图-2

2.3 步骤

实现此案例需要按照如下步骤进行。

步骤一: 准备集群环境

1)修改主机名,配置IP(其余几台请按照图-2修改IP和主机名,这里以master51为例)

[root@localhost ~]# echo master51 > /etc/hostname

[root@localhost ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.51/24 connection.autoconnect yes

[root@localhost ~]# nmcli connection up eth0

2在所有主机上安装Perl依赖包(51-56操作)

[root@master51 ~]# cd mysql/mha-soft-student/

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

3)在所有数据库服务器上安装mha-node包(51-55操作)

[root@master51 mha-soft-student]# yum -y install perl-DBD-mysql perl-DBI

[root@master51 mha-soft-student]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

Preparing... ################################# [100%]

Updating / installing...

1:mha4mysql-node-0.56-0.el6 ################################# [100%]

4)在管理主机上安装mha_node 和 mha-manager包(56操作)

[root@mgm56 mha-soft-student]# yum -y install perl-DBD-mysql perl-DBI

[root@mgm56 mha-soft-student]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

Preparing... ################################# [100%]

Updating / installing...

1:mha4mysql-node-0.56-0.el6 ################################# [100%]

[root@mgm56 mha-soft-student]# yum -y install perl-ExtUtils-* perl-CPAN-*

[root@mgm56 mha-soft-student]# tar -zxf mha4mysql-manager-0.56.tar.gz

[root@mgm56 mha-soft-student]# cd mha4mysql-manager-0.56/

[root@mgm56 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...

Looks good

Writing Makefile for mha4mysql::manager

Writing MYMETA.yml and MYMETA.json

[root@mgm56 mha4mysql-manager-0.56]# make

[root@mgm56 mha4mysql-manager-0.56]# make install

步骤二: 配置ssh密钥对认证登陆

1)所有节点之间可以互相以ssh密钥对方式认证登陆以(以51为例)

[root@master51 mha-soft-student]# ssh-keygen

[root@master51 mha-soft-student]# ssh-copy-id 192.168.4.52

//除了传给52外,53,54,55也要传,52-55主机也是一样的

6)配置56主机 无密码ssh登录所有数据节点主机

[root@mgm56 mha4mysql-manager-0.56]# ssh-keygen

[root@mgm56 mha4mysql-manager-0.56]# ssh-copy-id 192.168.4.51

//除传给51外,还要传给52-55

3 案例3:配置MHA集群环境

3.1 问题

配置主节点 master51

配置两个备用主节点 master52、master53

配置两个从节点 slave54、slave55

配置管理节点 mgm56

3.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:配置mha集群环境

1)安装数据库(51-55同样操作,以51为例)

[root@master51 ~]# cd /root/mysql

[root@master51 mysql]# tar -xf mysql-5.7.17.tar

[root@master51 mysql]# yum -y install perl-JSON

[root@master51 mysql]# rpm -Uvh mysql-community-*.rpm

[root@master51 mysql]# rpm -qa | grep -i mysql

2)master51 数据库服务器配置文件

[root@master51 mysql]# vim /etc/my.cnf

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"

[root@master51 mysql]# systemctl restart mysqld

[root@master51 mysql]# mysql -u root -p123456

mysql> set global relay_log_purge=off; //不自动删除本机的中继日志文件

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.01 sec)

mysql> show master status;

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| master51.000003 | 441 | | | |

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

1 row in set (0.00 sec)

3)master52数据库服务器配置文件

[root@master52 mysql]# vim /etc/my.cnf

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"

[root@master52 mysql]# systemctl restart mysqld

[root@master52 mysql]# mysql -u root -p123456

mysql> set global relay_log_purge=off;

mysql> change master to

-> master_host="192.168.4.51",

-> master_user="repluser",

-> master_password="123456",

-> master_log_file="master51.000003",

-> master_log_pos=441;

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

mysql> start slave;

Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G;

...

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

...

4)master53数据库服务器配置文件

[root@master53 mysql]# vim /etc/my.cnf

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"

[root@master53 mysql]# systemctl restart mysqld

[root@master53 mysql]# mysql -u root -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.000003",

-> master_log_pos=441;

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

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

...

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

...

5)slave54 数据库服务器配置文件

[root@slave54 mysql]# vim /etc/my.cnf

server_id=54

[root@master54 mysql]# systemctl restart mysqld

[root@master54 mysql]# mysql -u root -p123456

mysql> change master to

-> master_host="192.168.4.51",

-> master_user="repluser",

-> master_password="123456",

-> master_log_file="master51.000003",

-> master_log_pos=441;

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

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

...

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

...

6)slave55 数据库服务器配置文件

[root@slave55 mysql]# vim /etc/my.cnf

server_id=55

[root@master55 mysql]# systemctl restart mysqld

[root@master55 mysql]# mysql -u root -p123456

mysql> change master to

-> master_host="192.168.4.51",

-> master_user="repluser",

-> master_password="123456",

-> master_log_file="master51.000003",

-> master_log_pos=441;

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

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

...

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

...

7)配置管理主机4.56

[root@mgm56 ~]# cd mysql/mha-soft-student/mha4mysql-manager-0.56/

[root@mgm56 mha4mysql-manager-0.56]# cp bin/* /usr/local/bin/

//提示覆盖,说明安装的时候有,没有可以拷贝过来

[root@mgm56mha4mysql-manager-0.56]# mkdir /etc/mha_manager    //创建工作目录

[root@mgm56mha4mysql-manager-0.56]# cp samples/conf/app1.cnf /etc/mha_manager

//建立样板文件

[root@mgm56mha4mysql-manager-0.56]# vim /etc/mha_manager/app1.cnf

//编辑主配置文件app1.cnf

[server default]

manager_workdir=/etc/mha_manager

manager_log=/etc/mha_manager/manager.log

master_ip_failover_script=/usr/local/bin/master_ip_failover

ssh_user=root

ssh_port=22

repl_user=repluser

repl_password=123456

user=root

password=123456

[server1]

hostname=192.168.4.51

port=3306

[server2]

hostname=192.168.4.52

port=3306

candidate_master=1

[server3]

hostname=192.168.4.53

port=3306

candidate_master=1

[server4]

hostname=192.168.4.54

no_master=1

[server5]

hostname=192.168.4.55

no_master=1

[root@mgm56mha4mysql-manager-0.56]# cp samples/scripts/master_ip_failover

/usr/local/bin/        //创建故障切换的脚本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值