实现mysql的主从复制、实现MySQL的读写分离与负载均衡

实验环境

(注明)以下的所有关于yum和rpm以及tar的软件需要自己准备,没有的话可以私信博主

实验目标:

1.实现mysql主从复制

2.实现mysql读写分离与负载均衡

实验一、搭建mysql主从复制

1.建立时间同步环境,在主节点上搭建时间同步服务器

1)安装NTP(udp 123)

[root@centos2 ~]# yum -y install ntp(需要提前配置yum仓库)

2)配置NTP

[root@centos2 ~]# vim /etc/ntp.conf

server 127.127.1.0   //手工写 需要同步的上层服务器(使用本地时钟)

fudge 127.127.1.0 stratum 8  //手工写 同步上层服务器的stratum,大小不能超过或等于16

3)重启服务

[root@centos2 ~]# systemctl  restart  ntpd

2.在从节点上进行时间同步

[root@centos3 ~]# yum  -y  install  ntpdate

[root@centos3 ~]# /usr/sbin/ntpdate  192.168.1.2

3.关闭每台服务器防火墙

4.安装mysql过程略

5.启动mysql

#systemctl   restart  mysqld

6.配置mysql主服务器

1)在/etc/my.cnf中修改或增加下面内容

server_id  =  11  //修改

log_bin=master-bin    //修改  定义bin-log的文件名   (默认保存在数据目录下)

log-slave-updates=true  //增加 slave更新是否记入日志

2)重启mysql服务

[root@centos2 ~]# systemctl  restart mysqld

3)登录mysql程序,给从服务器授权复制权限

[root@centos2 ~]# mysql -u root -p

mysql> grant  replication  slave on *.*  to 'myslave'@'192.168.1.%'  identified by '123456';

mysql> flush  privileges;

mysql> show  master  status;

+-------------------+----------+--------------+------------------+

| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+------------------+

| master-bin.000001 |      342 |              |                  |

+-------------------+----------+--------------+------------------+

file列显示日志名,position列显示偏移量

7.配置两台从服务器

1)在第一台从服务器/etc/my.cnf中修改或增加下面内容

server-id  =  22  //修改

relay_log=relay-log-bin //增加 定义中继日志文件名称和路径(默认保存在数据目录下)

relay-log-index=slave-relay-bin.index  //增加 定义中继日志索引文件名(记录很多的中继日志文件)默认情况,中继日志使用host_name-relay-bin.nnnnnn形式的文件名,其中host_name是从服务器主机名,nnnnnn是序 列号。用连续序列号来创建连续中继日志文件,从000001开始。从服务器跟踪索引文件中目前正使用的中继日志。 默认中继日志索引文件名为host_name-relay-bin.index。默认情况,在从服务器的数据目录中创建这些文件。

2)重启mysql服务

[root@centos3 ~]# systemctl  restart mysqld

3)第二台从服务器只是server-id不同,其他都和第一台一样

server-id  =  33

4)分别登录两台mysql从服务器,配置同步

#mysql  -u root  -p

mysql>change  master to master_host='192.168.1.2',master_user='myslave',

master_password='123456',master_log_file='master-bin.000001',master_log_pos=410;

5)在两台mysql从服务器上启动同步

mysql> start  slave;

6)分别在两台mysql从服务器上查看slave状态,确保以下两个至为YES

mysql> show slave status \G;

  Slave_IO_Running: Yes (I/O线程处于运行状态)

  Slave_SQL_Running: Yes (sql线程处于运行状态)

7)验证主从复制效果

①在主、从服务器上登录mysql

[root@centos2 ~]# mysql -u root -p

②在主服务器上新建数据库db_test

mysql> create database db_tese;

③在两台从服务器上查看数据库

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| db_test           |

| mysql              |

| performance_schema |

| test               |

+--------------------+

5 rows in set (0.02 sec)

实验二、构建mysql读写分离

1.在主机amoeba上安装java环境

[root@centos1 ~]# cp /mnt/jdk-6u14-linux-x64.bin /usr/local/(需要提前准备好软件,这里的路径需要按照你实际的)

[root@centos1 ~]# chmod +x /usr/local/jdk-6u14-linux-x64.bin

[root@centos1 local]# cd /usr/local/

[root@centos1 local]# ./jdk-6u14-linux-x64.bin  //根据提示按回车和yes即可

[root@centos1 local]# vim  /etc/profile

export  JAVA_HOME=/usr/local/jdk1.6  //指向jdk的安装路径

export 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@centos1 local]# mv jdk1.6.0_14/  /usr/local/jdk1.6

[root@centos1 local]# source /etc/profile

[root@centos1 local]# java -version

java version "1.7.0_45"

OpenJDK Runtime Environment (rhel-2.4.3.3.el6-x86_64 u45-b15)

OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)

说明:CLASSPATH指定java类搜索路径,要使用已经编写好java的类,前提当然是能够找到它们,JVM就是通过CLASSPATH来寻找类的。

java环境已经成功

2.安装并配置amoeba软件

[root@centos1 local]# mkdir /usr/local/amoeba

[root@centos1 local]# tar zxf  /mnt/amoeba-mysql-binary-2.2.0.tar.gz  -C  /usr/local/amoeba

[root@centos1 local]# chmod -R 755 /usr/local/amoeba/

[root@centos1 local]# /usr/local/amoeba/bin/amoeba

amoeba start|stop看到此提示代表amoeba安装成功

3.配置amoeba读写分离,两个slave读负载均衡

①master、slave1和slave2中开放权限给amoeba访问

mysql> grant all on *.* to 'test'@'192.168.1.%' identified by '123.com';

②编辑amoeba.xml配置文件

[root@centos1 local]# vim  /usr/local/amoeba/conf/amoeba.xml

30 <property name="user">amoeba</property>

32 <property name="password">123456</property>

115 <property name="defaultPool">master</property>

117<!--    去掉此行

118 <property name="writePool">master</property>(注意去掉上下行的注释)

119 <property name="readPool">slaves</property>

120 -->去掉此行

③编辑dbServer.xml配置文件

[root@centos1 local]# vim  /usr/local/amoeba/conf/dbServers.xml

26<property name="user">test</property>

28<!--  mysql password  删除此行

29<property name="password">123.com</property>(注意去掉注释此上下注释)

30-->删除此行

45 <dbServer name="master"  parent="abstractServer">

46<factoryConfig>

47 <!-- mysql ip -->

48 <property name="ipAddress">192.168.1.2</property>

49 </factoryConfig>

50 </dbServer>

52 <dbServer name="slave1"  parent="abstractServer">

53 <factoryConfig>

54 <!-- mysql ip -->

55<property name="ipAddress">192.168.1.3</property>

56</factoryConfig>

57</dbServer>

58<dbServer name="slave2"  parent="abstractServer">

59<factoryConfig>

60<!-- mysql ip -->

61<property name="ipAddress">192.168.1.4</property>

62</factoryConfig>

63</dbServer>

65<dbServer name="slaves" virtual="true">

66<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">

67 <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->

68 <property name="loadbalance">1</property>

70<!-- Separated by commas,such as: server1,server2,server1 -->

71<property name="poolNames">slave1,slave2</property>

72</poolConfig>

73</dbServer>

④配置无误后,可以启动amoeba软件,默认端口为tcp8066

[root@centos1 local]# /usr/local/amoeba/bin/amoeba start &

4.测试

①在client主机上

  1. #yum  -y  install  mariadb
  2. 然后通过代理访问mysql
  3. [root@centos1 ~]# mysql -u amoeba -p123456 -h 192.168.1.1 -P8066  (-P为大写)

②在master上创建一个表,同步到各个从服务器上,然后关掉各从服务器的slave功能,再插入区别语句

mysql> use db_test;

mysql> create table zang(id int(10),name varchar(10),address varchar(20));

③分别在两台从服务器上

mysql>stop slave;

④然后在主服务器上插入数据

mysql> insert into zang values('1','zhang','this_is_master');

⑤从服务器同步了表,手动插入其他内容

slave1:

mysql> use db_test;

mysql> insert into zang values('2','zhang','this_is_slave1');

slave2:

mysql> use db_test;

mysql> insert into zang values('2','zhang','this_is_slave2');

⑥测试读操作

在client主机上第一次查询的结果如下:

mysql> use db_test;

mysql> select * from zang;

+------+-------+----------------+

| id   | name  | address        |

+------+-------+----------------+

|    3 | zhang | this_is_slave1 |

+------+-------+----------------+

1 row in set (0.03 sec)

第二次查询结果如下:

mysql> select * from zang;

+------+-------+----------------+

| id   | name  | address        |

+------+-------+----------------+

|    2 | zhang | this_is_slave2 |

+------+-------+----------------+

1 row in set (0.02 sec)

第三次查询的结果如下:

mysql> select * from zang;

+------+-------+----------------+

| id   | name  | address        |

+------+-------+----------------+

|    3 | zhang | this_is_slave1 |

+------+-------+----------------+

1 row in set (0.03 sec)

测试写操作.

mysql> insert into zang values('4','zhang','write_test');

但是在客户机上查询不到

最终只能在主服务器上才能看到这条语句内容,说明写操作在master服务器上

mysql> select * from zang;

+------+-------+----------------+

| id   | name  | address        |

+------+-------+----------------+

|    1 | zhang | this_is_master |

|    4 | zhang | write_test     |

+------+-------+----------------+

2 rows in set (0.03 sec)

mysql>

  • 30
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值