数据库高可用方案(2):主主+主从+读写分离

1、配置主主复制的作用和特点

1)作用
对数据库实现高可用
2)mysql主从复制的特点
避免单点故障
防止数据丢失
添加访问并发量

2、mysql主从复制的类型

1)基于语句的复制(默认)
主myql服务器上执行的语句,从服务器同步执行
2)基于行的复制
把改变的内容复制到从服务器
3)混合类型的复制
一旦发现基于语句无法精准复制时,就会采用基于行的复制

3、安装配置ntp服务

1)安装ntp服务
[root@master01 /]# yum -y install ntp (四台同时安装)
2)配置ntp服务
[root@master01 /]# systemctl restart ntpd
[root@master01 /]# systemctl enable ntpd
restrict 192.168.200.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0
fudge 127.127.1.0 stratum 8
[root@master02 ~]# ntpdate 192.168.200.10 将四台服务器的时间都同步了
如图所示:

在这里插入图片描述

4、修改主配置文件并重启

vim /etc/my.cnf
1)master01

[mysqld]
server-id = 10	数据库的ID号
log-bin = mysql-bin	开启二进制日志功能
log-slave-updates = true	允许从服务器更新数据
relay-log = relay-log-bin	数据库事件的单独编号文件
relay-log-index = relay-log-bin.index	记录relay-log-bin日志位置

数据库data目录下的文件作用:
auto.cnf 记录mysql数据库实例的server_uuid,安装的时候初始化,master和slave的server_uuid不能一样
ibdata innodb表空间,如果采用innodb引擎,会默认10M大小
ib_logfile 事务日志文件,是确保事务的REDO和UNDO,主要是确保事务的前滚和后滚,不能用来恢复
master02.err 当前数据库的错误日志
master02.pid 当亲数据库运行的id号,用于锁
master.info 主从同步保存的信息
mysql-bin mysql二进制日志位置
mysql-bin.index 二进制日志文件索引,存放二进制日志文件列表
performance_schema 系统数据库目录
2)master02

[mysqld]
server-id = 20
log-bin = mysql-bin
log-slave-updates = true
relay-log = relay-log-bin
relay-log-index = relay-log-bin.index

3)slave01

[mysqld]
server-id = 30
log-bin = mysql-bin
relay-log = relay-log-bin
relay-log-index = relay-log-bin.index

4)slave02

[mysqld]
server-id = 40
log-bin = mysql-bin
relay-log = relay-log-bin
relay-log-index = relay-log-bin.index

5)分别启动这四台mysql服务器
[root@master01 /]# systemctl restart mysqld
6)数据库中的数据不一致时的操作(基本上以数据最多的为主,在其他数据库中导入这台数据库的所有数据)

mysql> flush tables with read lock;									施加锁,在数据多的一台上配置
mysqldump -uroot -p --opt --all-databases > /root/all-databases.sql	最好另起一个ssh终端,输入此命令,防止锁失效
scp /root/all-databases.sql root@192.168.200.20:/root/				将数据传输到其他节点上
mysql -uroot -p < /root/all-databases.sql							将传输过来的数据导入数据库中
mysql -uroot -ppwd@123 -e "flush privileges;"						在其他节点上刷新配置
mysql> unlock tables;												若是正在使用的环境中最好是配置完主主或主从复制后在解锁

5、配置主主复制和主从复制

1)主主复制
[root@master01 /]# mysql -uroot -ppwd@123

			mysql> grant replication slave on *.* to 'tongbu'@'192.168.200.%' identified by 'pwd@123';	授权所有服务器复制master01二进制日志的权限
			mysql> show master status;						查看master01的日志状态
			mysql> change master to master_host='192.168.200.10',master_user='tongbu',master_password='pwd@123',master_log_file='mysql-bin.000001',master_log_pos=411;					在master02中配置
			mysql> statr slave;								启动master02的slave
		[root@master02 /]# mysql -uroot -ppwd@123
			mysql> grant replication slave on *.* to 'tongbu'@'192.168.200.%' identified by 'pwd@123';	授权所有服务器复制master02二进制日志的权限
			mysql> show master status;						查看master02的日志状态
			mysql> change master to master_host='192.168.200.20',master_user='tongbu',master_password='pwd@123',master_log_file='mysql-bin.000001',master_log_pos=411;	在master01中配置
			mysql> statr slave;	启动master01的slave

2)主从复制
[root@slave01 /]# mysql -uroot -ppwd@123

			mysql> change master to master_host='192.168.200.10',master_user='tongbu',master_password='pwd@123',master_log_file='mysql-bin.000001',master_log_pos=411;	Slave01中配置
			mysql> statr slave;				启动slave01的slave
		[root@slave02 /]# mysql -uroot -ppwd@123
			mysql> change master to master_host='192.168.200.10',master_user='tongbu',master_password='pwd@123',master_log_file='mysql-bin.000001',master_log_pos=411;	Slave02中配置
			mysql> statr slave;				启动slave02的slave

3)若出现配置错误需要使用如下命令后在重新配置:
mysql> stop slave; 停止服务
mysql> reset slave; 重置服务
4)检查四台数据库的状态(ip地址,Slave_IO_Running: Yes,Slave_SQL_Running: Yes)
在这里插入图片描述

6、配置读写分离

1.安装jdk和amoeba。
1)配置JDK。
[root@amoeba ~]# mkdir /usr/local/jdk
[root@amoeba /]# cp /usr/src/jdk-6u14-linux-x64.bin /usr/local
[root@amoeba local]# ./jdk-6u14-linux-x64.bin
[root@amoeba local]# mv ./jdk1.6.0_14/* ./jdk
2)安装amoeba。
[root@amoeba jdk]# mkdir /usr/local/amoeba
[root@amoeba jdk]# mv /usr/src/conf/* /usr/local/amoeba
3)配置环境变量。
[root@amoeba /]# vim /etc/profile.d/jdk.sh

			export JAVA_HOME=/usr/local/jdk
			export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
			export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
			export AMOEBA_HOME=/usr/local/amoeba
			export PATH=$PATH:$AMOEBA_HOME/bin

[root@amoeba /]# source /etc/profile
[root@amoeba local]# java -version
2.设置amoeba读写分离账户。
1)设置主mysql允许test账户访问mysql,需要在主从上同时配置。
[root@master /]# mysql -uroot -p
mysql> grant all on . to ‘amoeba’@‘192.168.100.50’ identified by ‘pwd@123’;
2)修改amoeba配置文件配置客户端访问amoeba的账户密码。
[root@amoeba /]# vim /usr/local/amoeba/amoeba.xml

				 10                         <property name="port">8066</property>	客户端访问amoeba的端口
				 30        <property name="user">client</property>	访问amoeba的账户
				 32        <property name="password">pwd@123</property>	访问amoeba账户的密码
				115                 <property name="defaultPool">master</property>	默认写mysql池的名字
				116                 <property name="writePool">master</property>	写入MySQL数据库的池
				117                 <property name="readPool">slaves</property>	读取MySQL数据库的池

3)设置amoeba服务器的host文件,添加解析主机名。(在群集中所有的服务器上配置,也可配置DNS,或不配置在后面需要用ip地址)
[root@amoeba /]# vim /etc/hosts
192.168.100.10 master01
192.168.100.20 master02
192.168.100.30 slave01
192.168.100.40 slave02
192.168.100.50 amoeba
4)修改amoeba的配置文件添加服务器池。
[root@amoeba /]# vim /usr/local/amoeba/dbServers.xml

 26             <property name="user">amoeba</property>
			 27             <property name="password">pwd@123</property>
			 42         <dbServer name="master"  parent="abstractServer">
			 43                 <factoryConfig>
			 44                         <!-- mysql ip -->
			 45                         <property name="ipAddress">192.168.100.10</property>
			 46                 </factoryConfig>
			 47         </dbServer>
			 49         <dbServer name="slave01"  parent="abstractServer">
			 50                 <factoryConfig>
			 51                         <!-- mysql ip -->
			 52                         <property name="ipAddress">192.168.100.30</property>
			 53                 </factoryConfig>
			 54         </dbServer>       
			 56         <dbServer name="slave02"  parent="abstractServer">
			 57                 <factoryConfig>
			 58                         <!-- mysql ip -->
			 59                         <property name="ipAddress">192.168.100.40</property>
			 60                 </factoryConfig>
			 61         </dbServer>
			 64         <dbServer name="slaves" virtual="true">
			 65                 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
										<!-- Load balancing strategy: 1=ROUNDROBIN(轮询) , 2=WEIGHTBASED(权重) , 3=HA--> 
			 66                         <property name="loadbalance">1</property>
			 67                         <property name="poolNames">slave01,slave02</property>
			 68                 </poolConfig>
			 69         </dbServer>
			

5)启动amoeba。
[root@amoeba /]# amoeba start&
[root@amoeba /]# netstat -anptu | grep 8066
[root@amoeba /]# netstat -anptu | grep java
6)客户端登录到数据库。
[root@Centos ~]# mysql -u client -p -h 192.168.100.50 -P 8066
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H . C . Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值