MySQL多实例 mha集群

Top

NSD DBA2 DAY03

  1. 案例1:配置MySQL多实例
  2. 案例2:准备MHA集群环境
  3. 案例3:配置MHA集群环境

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)解压软件、修改目录名

  1. [root@mysql ~]# cd mysql/
  2. [root@mysql mysql]# ls
  3. mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
  4. [root@mysql mysql]# tar -xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
  5. [root@mysql mysql]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql

2)调整PATH变量

  1. [root@mysql mysql]# echo "export PATH=/usr/local/mysql/bin:$PATH" \
  2. >> /etc/profile
  3. [root@mysql mysql]# source /etc/profile
  4. [root@mysql mysql]# echo $PATH
  5. /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文件

  1. [mysqld_multi]        //启用多实例
  2. mysqld = /usr/local/mysql/bin/mysqld_safe        //指定进程文件路径
  3. mysqladmin = /usr/local/mysql/bin/mysqladmin    //指定管理命令路径
  4. user = root        //指定进程用户
  5. [mysqld1]        //实例进程名称
  6. port=3307        //端口号
  7. datadir=/data3307        //数据库目录 ,要手动创建
  8. socket=/data3307/mysqld.sock        //指定sock文件的路径和名称
  9. pid-file=/data3307/mysql1.pid        //进程pid号文件位置
  10. log-error=/data3307/mysql1.err        //错误日志位置
  11. [mysqld2]
  12. port=3308
  13. datadir=/data3308
  14. socket=/data3308/mysqld.sock
  15. pid-file=/data3308/mysql2.pid
  16. log-error=/data3308/mysql2.err

4)创建数据库目录

  1. [root@mysql mysql]# mkdir -p /data3307
  2. [root@mysql mysql]# mkdir -p /data3308

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

  1. [root@mysql mysql]# useradd mysql
  2. [root@mysql mysql]# chown mysql:mysql /data*

6)初始化授权库

  1. [root@mysql mysql]# mysqld --user=mysql --basedir=/usr/local/mysql
  2. --datadir=/data3307 --initialize
  3. ...
  4. 2018-09-26T07:07:33.443378Z 1 [Note] A temporary password is generated for root@localhost: 7L?Vi!dGKmgu        //root用户登录的初始化密码
  5. [root@mysql mysql]# mysqld --user=mysql --basedir=/usr/local/mysql
  6. --datadir=/data3308 --initialize
  7. ...
  8. 2018-09-26T07:08:07.770289Z 1 [Note] A temporary password is generated for root@localhost: kC)BbyUp1a-b        //root用户登录的初始化密码

7)启动多实例

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

8)查看端口

  1. [root@mysql mysql]# netstat -utnlp | grep :3307
  2. tcp6 0 0 :::3307 :::* LISTEN 21009/mysqld
  3. [root@mysql mysql]# netstat -utnlp | grep :3308
  4. tcp6 0 0 :::3308 :::* LISTEN 21177/mysqld
  5. [root@mysql mysql]# ps -C mysqld
  6. PID TTY TIME CMD
  7. 21009 pts/1 00:00:00 mysqld
  8. 21177 pts/1 00:00:00 mysqld

9)访问多实例

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

  1. [root@mysql mysql]# mysql -u root -p'7L?Vi!dGKmgu' -S /data3307/mysqld.sock
  2. mysql> alter user root@"localhost" identified by '123456';        //修改密码
  3. mysql> show databases;
  4. +--------------------+
  5. | Database |
  6. +--------------------+
  7. | information_schema |
  8. | mysql |
  9. | performance_schema |
  10. | sys |
  11. +--------------------+
  12. 4 rows in set (0.00 sec)

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

  1. [root@mysql bin]# mysql -u root -p'kC)BbyUp1a-b' -S /data3307/mysqld.sock
  2. mysql> alter user root@"localhost" identified by '123456';        //修改密码
  3. mysql> show databases;
  4. +--------------------+
  5. | Database |
  6. +--------------------+
  7. | information_schema |
  8. | mysql |
  9. | performance_schema |
  10. | sys |
  11. +--------------------+
  12. 4 rows in set (0.00 sec)

10)创建库

  1. mysql> create database db1;
  2. Query OK, 1 row affected (0.00 sec)
  3. mysql> show databases;
  4. +--------------------+
  5. | Database |
  6. +--------------------+
  7. | information_schema |
  8. | db1 |
  9. | mysql |
  10. | performance_schema |
  11. | sys |
  12. +--------------------+
  13. 5 rows in set (0.00 sec)

11)停止启动的实例服务

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

  1. [root@mysql mysql]# mysqld_multi --user=root --password=123456 stop 1
  2. [root@mysql mysql]# netstat -utnlp | grep :3307 //查看没有端口
  3. [root@mysql mysql]# mysqld_multi --user=root --password=123456 stop 2
  4. [root@mysql mysql]# netstat -utnlp | grep :3308        //查看没有端口
  5. [root@mysql mysql]# mysql -uroot -p123456 -S /data3307/mysqld.sock
  6. //拒绝连接
  7. mysql: [Warning] Using a password on the command line interface can be insecure.
  8. 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集群。

图-1

IP规划,如图-2所示:

图-2

2.3 步骤

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

步骤一: 准备集群环境

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

  1. [root@localhost ~]# echo master51 > /etc/hostname
  2. [root@localhost ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.51/24 connection.autoconnect yes
  3. [root@localhost ~]# nmcli connection up eth0

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

  1. [root@master51 ~]# cd mysql/mha-soft-student/
  2. [root@master51 ~]# yum -y install perl-*.rpm

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

  1. [root@master51 mha-soft-student]# yum -y install perl-DBD-mysql perl-DBI
  2. [root@master51 mha-soft-student]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
  3. Preparing... ################################# [100%]
  4. Updating / installing...
  5. 1:mha4mysql-node-0.56-0.el6 ################################# [100%]

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

  1. [root@mgm56 mha-soft-student]# yum -y install perl-DBD-mysql perl-DBI
  2. [root@mgm56 mha-soft-student]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
  3. Preparing... ################################# [100%]
  4. Updating / installing...
  5. 1:mha4mysql-node-0.56-0.el6 ################################# [100%]
  6. [root@mgm56 mha-soft-student]# yum -y install perl-ExtUtils-* perl-CPAN-*
  7. [root@mgm56 mha-soft-student]# tar -zxf mha4mysql-manager-0.56.tar.gz
  8. [root@mgm56 mha-soft-student]# cd mha4mysql-manager-0.56/
  9. [root@mgm56 mha4mysql-manager-0.56]# perl Makefile.PL
  10. *** Module::AutoInstall version 1.03
  11. *** Checking for Perl dependencies...
  12. [Core Features]
  13. - DBI ...loaded. (1.627)
  14. - DBD::mysql ...loaded. (4.023)
  15. - Time::HiRes ...loaded. (1.9725)
  16. - Config::Tiny ...loaded. (2.14)
  17. - Log::Dispatch ...loaded. (2.41)
  18. - Parallel::ForkManager ...loaded. (1.18)
  19. - MHA::NodeConst ...loaded. (0.56)
  20. *** Module::AutoInstall configuration finished. //配置完成
  21. Checking if your kit is complete...
  22. Looks good
  23. Writing Makefile for mha4mysql::manager
  24. Writing MYMETA.yml and MYMETA.json
  25. [root@mgm56 mha4mysql-manager-0.56]# make
  26. [root@mgm56 mha4mysql-manager-0.56]# make install

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

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

  1. [root@master51 mha-soft-student]# ssh-keygen
  2. [root@master51 mha-soft-student]# ssh-copy-id 192.168.4.52
  3. //除了传给52外,53,54,55也要传,52-55主机也是一样的

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

  1. [root@mgm56 mha4mysql-manager-0.56]# ssh-keygen
  2. [root@mgm56 mha4mysql-manager-0.56]# ssh-copy-id 192.168.4.51
  3. //除传给51外,还要传给52-55

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

3.1 问题

  • 配置主节点 master51
  • 配置两个备用主节点 master52、master53
  • 配置两个从节点 slave54、slave55
  • 配置管理节点 mgm56

3.2 步骤

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

步骤一:配置mha集群环境

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

  1. [root@master51 ~]# cd /root/mysql
  2. [root@master51 mysql]# tar -xf mysql-5.7.17.tar
  3. [root@master51 mysql]# yum -y install perl-JSON
  4. [root@master51 mysql]# rpm -Uvh mysql-community-*.rpm
  5. [root@master51 mysql]# rpm -qa | grep -i mysql

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

  1. [root@master51 mysql]# vim /etc/my.cnf
  2. plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
  3. rpl-semi-sync-master-enabled = 1
  4. rpl-semi-sync-slave-enabled = 1
  5. server_id=51
  6. log-bin=master51
  7. binlog-format="mixed"
  8. [root@master51 mysql]# systemctl restart mysqld
  9. [root@master51 mysql]# mysql -u root -p123456
  10. mysql> set global relay_log_purge=off; //不自动删除本机的中继日志文件
  11. Query OK, 0 rows affected (0.00 sec)
  12. mysql> grant replication slave on *.* to repluser@"%" identified by "123456";
  13. //添加主从同步授权用户
  14. Query OK, 0 rows affected, 1 warning (10.01 sec)
  15. mysql> show master status;
  16. +-----------------+----------+--------------+------------------+-------------+
  17. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  18. +-----------------+----------+--------------+------------------+--------------+
  19. | master51.000003 | 441 | | | |
  20. +-----------------+----------+--------------+------------------+--------------+
  21. 1 row in set (0.00 sec)

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

  1. [root@master52 mysql]# vim /etc/my.cnf
  2. plugin-load ="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
  3. rpl-semi-sync-master-enabled = 1
  4. rpl-semi-sync-slave-enabled = 1
  5. server_id=52
  6. log-bin=master52
  7. binlog-format="mixed"
  8. [root@master52 mysql]# systemctl restart mysqld
  9. [root@master52 mysql]# mysql -u root -p123456
  10. mysql> set global relay_log_purge=off;
  11. mysql> change master to
  12. -> master_host="192.168.4.51",
  13. -> master_user="repluser",
  14. -> master_password="123456",
  15. -> master_log_file="master51.000003",
  16. -> master_log_pos=441;
  17. Query OK, 0 rows affected, 2 warnings (0.01 sec)
  18. mysql> start slave;
  19. Query OK, 0 rows affected (0.01 sec)
  20. mysql> show slave status\G;
  21. ...
  22. Slave_IO_Running: Yes
  23. Slave_SQL_Running: Yes
  24. ...

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

  1. [root@master53 mysql]# vim /etc/my.cnf
  2. plugin-load ="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
  3. rpl-semi-sync-master-enabled = 1
  4. rpl-semi-sync-slave-enabled = 1
  5. server_id=53
  6. log-bin=master53
  7. binlog-format="mixed"
  8. [root@master53 mysql]# systemctl restart mysqld
  9. [root@master53 mysql]# mysql -u root -p123456
  10. mysql> set global relay_log_purge=off;
  11. Query OK, 0 rows affected (0.00 sec)
  12. mysql> change master to
  13. -> master_host="192.168.4.51",
  14. -> master_user="repluser",
  15. -> master_password="123456",
  16. -> master_log_file="master51.000003",
  17. -> master_log_pos=441;
  18. Query OK, 0 rows affected, 2 warnings (0.01 sec)
  19. mysql> start slave;
  20. Query OK, 0 rows affected (0.00 sec)
  21. mysql> show slave status\G;
  22. ...
  23. Slave_IO_Running: Yes
  24. Slave_SQL_Running: Yes
  25. ...

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

  1. [root@slave54 mysql]# vim /etc/my.cnf
  2. server_id=54
  3. [root@master54 mysql]# systemctl restart mysqld
  4. [root@master54 mysql]# mysql -u root -p123456
  5. mysql> change master to
  6. -> master_host="192.168.4.51",
  7. -> master_user="repluser",
  8. -> master_password="123456",
  9. -> master_log_file="master51.000003",
  10. -> master_log_pos=441;
  11. Query OK, 0 rows affected, 2 warnings (0.01 sec)
  12. mysql> start slave;
  13. Query OK, 0 rows affected (0.00 sec)
  14. mysql> show slave status\G;
  15. ...
  16. Slave_IO_Running: Yes
  17. Slave_SQL_Running: Yes
  18. ...

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

  1. [root@slave55 mysql]# vim /etc/my.cnf
  2. server_id=55
  3. [root@master55 mysql]# systemctl restart mysqld
  4. [root@master55 mysql]# mysql -u root -p123456
  5. mysql> change master to
  6. -> master_host="192.168.4.51",
  7. -> master_user="repluser",
  8. -> master_password="123456",
  9. -> master_log_file="master51.000003",
  10. -> master_log_pos=441;
  11. Query OK, 0 rows affected, 2 warnings (0.01 sec)
  12. mysql> start slave;
  13. Query OK, 0 rows affected (0.00 sec)
  14. mysql> show slave status\G;
  15. ...
  16. Slave_IO_Running: Yes
  17. Slave_SQL_Running: Yes
  18. ...

7)配置管理主机4.56

  1. [root@mgm56 ~]# cd mysql/mha-soft-student/mha4mysql-manager-0.56/
  2. [root@mgm56 mha4mysql-manager-0.56]# cp bin/* /usr/local/bin/
  3. //提示覆盖,说明安装的时候有,没有可以拷贝过来
  4. [root@mgm56 mha4mysql-manager-0.56]# mkdir /etc/mha_manager    //创建工作目录
  5. [root@mgm56 mha4mysql-manager-0.56]# cp samples/conf/app1.cnf /etc/mha_manager
  6. //建立样板文件
  7. [root@mgm56 mha4mysql-manager-0.56]# vim /etc/mha_manager/app1.cnf
  8. //编辑主配置文件app1.cnf
  9. [server default]
  10. manager_workdir=/etc/mha_manager
  11. manager_log=/etc/mha_manager/manager.log
  12. master_ip_failover_script=/usr/local/bin/master_ip_failover
  13. ssh_user=root
  14. ssh_port=22
  15. repl_user=repluser
  16. repl_password=123456
  17. user=root
  18. password=123456
  19. [server1]
  20. hostname=192.168.4.51
  21. port=3306
  22. [server2]
  23. hostname=192.168.4.52
  24. port=3306
  25. candidate_master=1
  26. [server3]
  27. hostname=192.168.4.53
  28. port=3306
  29. candidate_master=1
  30. [server4]
  31. hostname=192.168.4.54
  32. no_master=1
  33. [server5]
  34. hostname=192.168.4.55
  35. no_master=1
  36. [root@mgm56 mha4mysql-manager-0.56]# cp samples/scripts/master_ip_failover
  37. /usr/local/bin/        //创建故障切换的脚本

猜你喜欢

转载自www.cnblogs.com/tiki/p/10785253.html
今日推荐