数据库高可用方案(1):主从复制 与 读写分离

MySQL主从复制其实是一个异步复制的过程,要实现首先需要在master上开启bin-log日志功能,整个过程需要开启3个线程,分别是master开IO线程,slave开启IO线程和SQL线程。
1,在从服务器上执行slave start ,从服务器IO线程会通过授权用户连接master,并要求master从指定的文件和位置之后发送bin-log日志内容。
2,master服务器接收到来自slave服务器的IO线程的请求后,master服务器上的IO线程根据slave服务器发送指定bin-log日志之后的内容,然后返回给slave端的IO线程。(返回的信息除了bin-log日志内容外,还有本次返回日志内容后在master服务器端的新的bin-log文件名以及bin-log中的下一个指定更新位置)
3,slave的IO线程收到信息后,将接收到的日志内容依次添加到slave端的relay-log文件的最末端,并将读取到master端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉master“我需要从某个bin-log的那个位置往后的日志内容,发给我”
4,slave的SQL线程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在master端真实执行时候的那些可执行的内容,并在自身执行。
如图所示: 在这里插入图片描述

一、搭建主从复制

5,安装ntp时间同步器
1)安装。
[root@master /]# yum -y install ntp
2)配置ntp服务。
[root@master /]# vim /etc/ntp.conf

 18 restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap	设置100.0网段的使用ntp
 19 server 127.127.1.0											监听的IP地址,固定
 20 fudge 127.127.1.0 stratum 8									设置时区

3)启动服务。
[root@master /]# systemctl start ntpd
[root@master /]# systemctl enable ntpd
[root@slave01 ~]# ntpdate 192.168.100.10
6,MySQL数据库主从配置。
1)修改主MySQL和备份MySQL的id号
[root@master ~]# vim /etc/my.cnf
49 log-bin=mysql-bin
57 server-id = 10
58 log-slave-update = true
[root@slave01 ~]# vim /etc/my.cnf
49 log-bin=mysql-bin
57 server-id = 20
58 relay-log=relay-bin
59 relay-log-index=slave-bin.index
[root@slave02 ~]# vim /etc/my.cnf
49 log-bin=mysql-bin
57 server-id = 30
58 relay-log=relay-bin
59 relay-log-index=slave-bin.index
[root@master ~]# systemctl restart mysqld
[root@slave ~]# systemctl restart mysqld
2)进入主MySQL。
[root@master ~]# mysql -u root -p
mysql> grant replication slave on . to ‘tongbu’@’%’ identified by ‘123456’;
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |      251 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

3)进入从MySQL。
[root@slave01]# mysql -u root -p
mysql> change master to master_host=‘192.168.100.10’,master_user=‘tongbu’,master_password=‘123456’,master_log_file=‘mysql-bin.000006’,master_log_pos=251;
Query OK, 0 rows affected (0.31 sec)
mysql> slave start
mysql> show slave status\G
[root@slave02]# mysql -u root -p
mysql> change master to master_host=‘192.168.100.10’,master_user=‘tongbu’,master_password=‘123456’,master_log_file=‘mysql-bin.000006’,master_log_pos=251;
Query OK, 0 rows affected (0.31 sec)
mysql> slave start
mysql> show slave status\

二、配置读写分离

7,MySQL数据库读写分离配置。
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
4)设置amoeba账户管理权限。
[root@amoeba /]# chmod 755 /usr/local/amoeba/
2.设置amoeba读写分离账户。
1)设置主mysql允许test账户访问mysql,需要在主从上同时配置。
[root@master /]# mysql -uroot -p
mysql> grant all on . to ‘test’@‘192.168.100.%’ identified by ‘pwd@123’;
2)修改amoeba配置文件配置客户端访问amoeba的账户密码。(此文件中的用户是客户端访问mysql数据库使用的用户,并在其中设置写入池和读取池)
[root@amoeba /]# vim /usr/local/amoeba/amoeba.xml

 10                         <property name="port">8066</property>	客户端访问amoeba的端口
 30        <property name="user">anoeba</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)
[root@amoeba /]# vim /etc/hosts
192.168.100.10 master
192.168.100.20 slave01
192.168.100.40 amoeba
4)修改amoeba的配置文件添加服务器池。(此文件中的用户和目录是master数据库中授权的用户)
[root@amoeba /]# vim /usr/local/amoeba/dbServers.xml

 26             <property name="user">test</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.20</property>
 53                 </factoryConfig>
 54         </dbServer>       
 56         <dbServer name="slave02"  parent="abstractServer">
 57                 <factoryConfig>
 58                         <!-- mysql ip -->
 59                         <property name="ipAddress">192.168.100.30</property>
 60                 </factoryConfig>
 61         </dbServer>
 64         <dbServer name="slaves" virtual="true">
 65                 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
 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 amoeba -p -h 192.168.100.40 -P 8066

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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、付费专栏及课程。

余额充值