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/        //創建故障切換的腳本


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM