(DB2.3)MHA集群

一、什么是集群?多台服务器提供相同的服务(网站、数据库)
二、集群的分类?LB HA HPC
三、为什么要使用集群?
四、配置集群?安装软件提供服务实现 (LVS haproxy nginx keeplived)
五、部署MySQL高可用集群
5.1 MHA集群环境准备
【51~56】

]# yum -y install perl-*
]# cd mha-soft-student
]# ls perl-*
]# yum -y install perl-*

【56】可以无密码ssh 51~55

]# ssh [email protected]
]# ssh [email protected]
]# ssh [email protected]
]# ssh [email protected]
]# ssh [email protected]

]# cd mha-soft-student
			]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
			]# tar -zxvf mha4mysql-manager-0.56.tar.gz
			]# cd 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

			]# make && make install

51~55 主机可以彼此互相无密码ssh
51-55 恢复为独立的数据库服务器

]# cd mha-soft-student
]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

二、配置MHA集群
2.1 配置mysql主从同步 (一主多从)
2.1.1、配置主服务器51

]# vim /etc/my.cnf
				[mysqld]
				server_id=51
				log-bin=master51
				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
				relay_log_purge=off
			:wq
			]# systemctl restart mysqld
			]# mysql -uroot -p密码
			mysql> grant replication slave on  *.* to plj@"%" 
				identified by "123qqq...A";
			mysql> show master status;
			mysql> set  global  relay_log_purge=off; 

2.1.2、配置从服务器52(备用主库)

			]# vim /etc/my.cnf	
				[mysqld]
                                server_id=52
                                log-bin=master52
                                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
                                relay_log_purge=off
                        :wq
			]# systemctl  restart mysqld
			[root@mysql52 ~]# mysqll -uroot -p密码

			mysql> change master to master_host="192.168.4.51",master_user="plj",master_password="123qqq...A",master_log_file="master51.000001",master_log_pos=436;
Query OK, 0 rows affected, 2 warnings (0.28 sec)

			mysql> start slave;
				Query OK, 0 rows affected (0.02 sec)

			mysql> show slave status\G;
				Master_Host: 192.168.4.51
				Slave_IO_Running: Yes
        			Slave_SQL_Running: Yes

2.1.3、配置从服务器53(备用主库)

			]# vim  /etc/my.cnf
			[mysqld]
server_id=53
log-bin=master53
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

relay_log_purge=off
:wq
			]# systemctl  restart mysqld
			]# mysql -uroot  -p密码

			mysql> change master to master_host="192.168.4.51",master_user="plj",master_password="123qqq...A",master_log_file="master51.000001",master_log_pos=436;

                        mysql> start slave;
                                Query OK, 0 rows affected (0.02 sec)
                        mysql> show slave status\G;
                                Master_Host: 192.168.4.51
                                Slave_IO_Running: Yes
                                Slave_SQL_Running: Yes

2.1.4、配置从服务器54(纯从库)

			]# vim /etc/my.cnf  
[mysqld]
server_id=54
plugin-load = "rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-slave-enabled = 1
relay_log_purge=off

			]# systemctl restart mysqld
			]# mysql -uroot -p密码
mysql> change master to master_host="192.168.4.51",master_user="plj",master_password="123qqq...A",master_log_file="master51.000001",master_log_pos=436;
			mysql> start slave;
			mysql> show slave status\G;

2.1.5、配置从服务器55(纯从库)

			]# vim /etc/my.cnf
[mysqld]
server_id=55
plugin-load = "rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-slave-enabled = 1
relay_log_purge=off
                        ]# systemctl restart mysqld
                        ]# mysql -uroot -p密码
mysql> change master to master_host="192.168.4.51",master_user="plj",master_password="123qqq...A",master_log_file="master51.000001",master_log_pos=436;
                        mysql> start slave;
                        mysql> show slave status\G;

2.2 配置管理主机192.168.4.56
2.2.1 编写配置文件

			]# mkdir /etc/mha_manager
			]# cd mha4mysql-manager-0.56
			]# cp samples/conf/app1.cnf  /etc/mha_manager/
			]# vim  /etc/mha_manager/app1.cnf
[server default]
manager_workdir=/etc/mha_manager
manager_log=/etc/mha_manager/manager.log
master_ip_failover_script=/etc/mha_manager/master_ip_failover
ssh_user=root
ssh_port=22
repl_user=plj
repl_password=123qqq...A
user=root
password=123qqq...A
[server1]
hostname=192.168.4.51
candidate_master=1
[server2]
hostname=192.168.4.52
candidate_master=1
[server3]
hostname=192.168.4.53
candidate_master=1
[server4]
hostname=192.168.4.54
no_master=1
[server5]
hostname=192.168.4.55
no_master=1
:wq

2.2.2 创建故障切换脚本

			]# cd mha-soft-student
			]# cp master_ip_failover  /etc/mha_manager/
			]# vim +35 /etc/mha_manager/master_ip_failover
			   my $vip = '192.168.4.100/24';  # Virtual IP
			:wq
			]# chmod  +x  /etc/mha_manager/master_ip_failover
	2.2.3  把vip地址部署在当前的主库上(192.168.4.51)
			[root@mysql51 ~]# ifconfig  eth0:1 192.168.4.100/24
			[root@mysql51 ~]# ifconfig  eth0:1
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.4.100  netmask 255.255.255.0  broadcast 192.168.4.255
        ether 74:52:09:07:51:01  txqueuelen 1000  (Ethernet)

			[root@mysql51 ~]# ifconfig  eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.4.51  netmask 255.255.255.0  broadcast 192.168.4.255
        inet6 fe80::5c9:7cc1:9663:574  prefixlen 64  scopeid 0x20<link>
        ether 74:52:09:07:51:01  txqueuelen 1000  (Ethernet)
        RX packets 676632  bytes 1050900208 (1002.2 MiB)
        RX errors 0  dropped 60  overruns 0  frame 0
        TX packets 128153  bytes 31563247 (30.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2.2.4 用户授权(根据配置文件)
2.2.4.1 给从服务器同步数据的连接用户plj(51/52/53)

52mysql> grant replication slave on . to plj@"%"
identified by “123qqq…A”;
53mysql> grant replication slave on . to plj@"%"
identified by “123qqq…A”;

2.2.4.2 管理主机56监视数据库服务器状态的连接用户root(51-55)

51mysql> grant all on . to root@’%’
identified by “123qqq…A”;

三、测试配置(192.168.4.56)
3.1 测试ssh无密码登陆

[root@host56 ~]# masterha_check_ssh --conf=/etc/mha_manager/app1.cnf
Wed May 15 17:56:13 2019 - [info] All SSH connection tests passed successfully.

3.2 测试mysql主从同步

[root@host56 ~]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf
MySQL Replication Health is OK.

3.3 启动管理服务

		host56 ~]# masterha_manager --conf=/etc/mha_manager/app1.cnf \
			   --remove_dead_master_conf  --ignore_last_failover

		host56 ~]# masterha_check_status --conf=/etc/mha_manager/app1.cnf

		host56 ~]# ls /etc/mha_manager

3.4 测试mysql服务高可用
3.4.1 在主数据库51上添加访问数据的连接用户yaya99 123qqq…A

			mysql> create database db9;
			mysql> create table db9.t1 (id int);
			mysql> grant select ,insert on db9.* to 
				yaya99@"%" identified by "123qqq...A";

3.4.2 在客户端50 连接vip地址访问数据库服务

50]# mysql -h192.168.4.100 -uyaya99 -p123qqq…A
mysql> insert into db9.t1 values(100),(200),(300);
mysql> select * from db9.t1;
在51的所有从服务器上都可以看到同样的数据

3.4.3 停止主数据库51 的数据库服务,50主机依然可以访问到数据

51]# systemctl stop mysqld

思考:
1 当前的52 也坏掉的时候 53 会不会 成为主库?
2 如何把坏掉的51 和 52 服务器 再添加到集群里?
2.1 启动51 和 52 主机的数据库服务
2.2 把51 和 52 主机 配置为的当前主服务器的从服务器
2.3 把主机51 和 52 添加app1.cnf文件里

]#vim /etc/mha_manager/app1.cnf
						[server1]
						candidate_master=1
						hostname=192.168.4.51
						[server2]
						candidate_master=1
						hostname=192.168.4.52
					:wq	

2.4 在主机56上运行管理服务,并查看服务状态

]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf
]# masterha_manager --conf=/etc/mha_manager/app1.cnf

猜你喜欢

转载自blog.csdn.net/weixin_45048541/article/details/90240267