目录
一、案例环境
实验操作:
#########案例环境#############
IP地址 主机 操作系统
20.0.0.5 master centos-7.6-x86_64
20.0.0.3 Slave1 centos-7.6-x86_64
20.0.0.6 Slave2 centos-7.6-x86_64
20.0.0.4 Amoeba centos-7.6-x86_64
###maste、slave1、slave2、Amoeba ###
常规操作,需要先把防火墙、核心防护关闭掉,操作可以看我的基础操作博客
- 建立时间同步环境
同步阿里云服务,所有服务器都要同步!!!
[root@localhost ~]# ntpdate ntp1.aliyun.com
[root@localhost ~]# date -R
[root@localhost ~]# yum -y install ntp ###如果不是最小化安装,就不用yum安装ntp
####安装MySQL数据库#########
前面的博客写的非常详细!这里就不过多讲解......
myslq安装博客地址: 点击这里.
- 登录master主服务器配置20.0.0.5
[root@localhost ~]# vi /etc/my.cnf
server-id = 11 ###修改成11,这里数字可以随便改,不要和从服务器一样就行。
log_bin = master-bin ###开启二进制日志,= 后面的日志名称
log-slave-updates = true ###允许从服务器找他更新二进制日志
[root@localhost ~]# systemctl restart mysqld ###重启mysql服务
[root@slaver1 ~]# cd /usr/local/mysql/data/
[root@slaver1 data]# ls ###查看一下二进制日志是否生产
master-bin.000001
#######master数据库给从服务器授权#####
[root@localhost ~]# mysql -uroot -p ###登录数据库
mysql> grant replication slave on *.* to 'myslave'@'20.0.0.%' identified by '123456'; ###我允许slave找我开启同步,允许对方所有数据库、所有表使用myslave用户,通过20.0.0网段的,使用123456密码
mysql> flush privileges; ###想让策略生效,刷新一下
mysql> show master status; ###这里很重要,待会从服务器转换进行同步依赖日志名和定位,记录下来!
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 | 599 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
- 登录salver1从服务器配置20.0.0.3
[root@localhost ~]# vi /etc/my.cnf
server-id = 22 ###在原来server-id=1的地方修改成22 ,这里数字可以随便改,不要和别的服务器一样就行。
relay-log = relay-log-bin ###开启中继日志,= 后面的日志名称
relay-log-index = slave-relay-bin.index ###定义relay-log的位置和名称
[root@localhost ~]# systemctl restart mysqld ###重启mysql服务
[root@localhost ~]# mysql -uroot -p ###登录数据库
mysql> change master to master_host='20.0.0.5',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=599; ###把主服务器地址填好,再把刚刚设置的账号密码填上(账户myslave、密码123456 ),和刚刚让记录下来的二进制日志名和定位号写上。
mysql> start slave; ###开启功能
mysql> show slave status\G ###看看主从是否开启,\G是竖着查看
*************************** 1. row ***************************
Slave_IO_State: Connecting to master
Master_Host: 20.0.0.5
Master_User: myslave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 599
Relay_Log_File: relay-log-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: yes ###IO线程要开启才可以
Slave_SQL_Running: Yes ###SQL线程也要开启才可以
....................略........................
- 登录salver2从服务器配置20.0.0.6
[root@localhost ~]# vi /etc/my.cnf
server-id = 33 ###在原来server-id=1的地方修改成33 ,这里数字可以随便改,不要和别的服务器一样就行。
relay-log = relay-log-bin ###开启中继日志,= 后面的日志名称
relay-log-index = slave-relay-bin.index ###定义relay-log的位置和名称
[root@localhost ~]# systemctl restart mysqld ###重启mysql服务
[root@localhost ~]# mysql -uroot -p ###登录数据库
mysql> change master to master_host='20.0.0.5',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=599; ###把主服务器地址填好,再把刚刚设置的账号密码填上(账户myslave、密码123456 ),和刚刚让记录下来的二进制日志名和定位号写上。
mysql> start slave; ###开启功能
mysql> show slave status\G ###看看主从是否开启,\G是竖着查看
*************************** 1. row ***************************
Slave_IO_State: Connecting to master
Master_Host: 20.0.0.5
Master_User: myslave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 599
Relay_Log_File: relay-log-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: yes ###IO线程要开启才可以
Slave_SQL_Running: Yes ###SQL线程也要开启才可以
....................略........................
- 验证主从复制效果
###主的建库,从服务器会同步###
登录20.0.0.5
[root@localhost ~]# mysql -uroot -p
mysql> create database cs; ###创建个数据库
登录20.0.0.3和20.0.0.6
[root@localhost ~]# mysql -uroot -p
mysql> show databases; ###查看一下数据库是否同步,应该也都有cs数据
- amoeba服务器配置
先把jdk-6u14-linux-x64二进制安装文件和amoeba-mysql-binary-2.2.0.tar压缩包上传上来
[root@amoba ~]# chmod +x jdk-6u14-linux-x64.bin ###给jdk一个执行的权限
[root@amoba ~]# ./jdk-6u14-linux-x64.bin ###然后直接执行,然后一直空格到了下面问是否建立项目,输入yes,然后等一下在回车,在等一下就执行完成
[root@amoba ~]# mv jdk1.6.0_14/ /usr/local/jdk1.6 ###然后把刚刚的文件移动到指定目录里
[root@amoba ~]# vim /etc/profile ###配置环境变量,在最后添加下面四句代码
export JAVA_HOME=/usr/local/jdk1.6 ###指定java的工作目录
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib ###jre就是java的虚拟机,里面会有默认的类(比如class),lib就是类库
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba ###amoeba工作目录
export PATH=$PATH:$AMOEBA_HOME/bin
[root@amoba ~]# source /etc/profile ###执行一下
[root@amoba ~]# echo $PATH ###输出一下,输出下面内容证明已经生效了
/usr/local/jdk1.6/lib:/usr/local/jdk1.6/jre/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/usr/local/amoeba/bin
[root@amoba ~]# mkdir /usr/local/amoeba ###建一个amoeba目录
[root@amoba ~]# tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/ ###把amoeba解压到刚刚创建的目录下
[root@amoba ~]# chmod -R 755 /usr/local/amoeba/ ###变更一下属组,给755权限
[root@amoba ~]# /usr/local/amoeba/bin/amoeba ###直接执行这条命令,显示amoeba start|stop说明安装成功
mysql> GRANT ALL ON *.* TO test@'20.0.0.%' IDENTIFIED BY '123.com'; ###除amoeba外三台都要执行
mysql> flush privileges; ###执行上面后,三台都要刷新一下
##########这个时候amoeba就可以通过test账户123.com密码登录每台进行响应的操作#############
[root@amoba ~]# cd /usr/local/amoeba/conf/
[root@amoba conf]# vim amoeba.xml
<property name="user">amoeba</property> ###然后把三十行、三十二行的账号密码改一下
<property name="password">123456</property>
<property name="defaultPool">master</property> ###然后把115行往下两行都这样更改,去掉注释,这里只是改个名字,并是不后面就读取这个配置
<property name="writePool">master</property>
<property name="readPool">slaves</property>
[root@amoba conf]# vim dbServers.xml
<property name="schema">mysql</property> ###23行这里数据库5.7版本默认是test,应该改成你里面有的数据库名字,5.5、5.6版本的不用改,默认有test数据库
<property name="user">test</property> ###26行改成test用户
<property name="password">123.com</property> ###29行就是刚刚的用户密码123.com
<dbServer name="master" parent="abstractServer"> ####45行往下就是master、slave1、slave2的配置
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">20.0.0.5</property>
</factoryConfig>
</dbServer>
<dbServer name="slave1" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">20.0.0.3</property>
</factoryConfig>
</dbServer>
<dbServer name="slave2" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">20.0.0.6</property>
</factoryConfig>
</dbServer>
<dbServer name="slaves" virtual="true"> ###然后把66行改成这样,这样就和刚刚的amoeba.xml连接起来了
<property name="poolNames">slave1,slave2</property> ###72行改成这样,也是为了和刚刚的amoeba.xml连接起来
[root@amoba conf]# /usr/local/amoeba/bin/amoeba start& ###把一个进程放到了后台,并且开启了一个监控日志
- 配置mysql客户端
[root@amoba conf]# yum -y install mariadb* ###装一个mysql客户端
[root@amoba conf]# systemctl start mariadb ###启动一下mariadb服务
[root@amoba conf]# mysql_secure_installation ###简单自定义部署一下
这个时候让你输入密码,但没有密码就回车 输入y 在输入新密码abc123,再次确定abc123
在输入 n、n、n、y 就设置好了
- 测试
[root@amoba conf]# mysql -uamoeba -p -h 127.0.0.1 -P8066 ###因为我没有用客户端登录,直接在amoeba上面测试登录的,ip地址就用127.0.0.1,8066是端口
然后输入密码123456,就成功进去了
1、在amoeba里创建一个zang表
MySQL [(none)]> use cs; ###进入cs库
MySQL [cs]> create table zang(id int(10),name varchar(10),address varchar(20)); ###创建zang表
在主、从里面查看一下是否同步都有!
2、在两台从服务器上关闭功能,这样就不能读写分离了
mysql> stop slave;
在amoeba里插入一个zhang信息进去
MySQL [cs]> insert into zang values ('1','zhang','this_is_master');
然后主从服务器查看一下
两台从的服务器就会不能查看
3、然后在slave1插入下面这条
MySQL [cs]> insert into zang values ('2','zhang','this_is_master1');
在slave2插入下面这条
MySQL [cs]> insert into zang values ('3','zhang','this_is_master2');
用amoeba看一下就会发现是id 3,在看一遍就是id2的,因为这里是轮询原则
而master不能看见id2和id3的zhang,实现了读写分离