1、数据库主从同步
2、amoeba proxy实现读写分离
实验环境:
Web: 192.168.1.14
Mysql_proxy: 192.168.1.16
Mysql_master: 192.168.1.18
Mysql_slave: 192.168.1.2
主从同步
本地已经搭建好wordpress,搭建过程比较简单,在此文略过。
每次实验第一件事,时间同步!(略)
开启主库的binlog功能:
vim /etc/my.cnf server-id = 1 #主从的id必须是唯一! log-bin = mybinlog在主库对从库授权:
MariaDB [(none)]> grant replication slave on *.* to 'slave'@'192.168.1.%' identified by '123123';MariaDB [(none)]> flush privileges;将主库同步前的数据进行全备到从库:
首先要锁库!!!为了防止在同步时有人对数据库进行写数据!!!
MariaDB [(none)]> flush tables with read lock;
systemctl restart mariadb //重启数据库 不重启日志文件位置不会生成出来!
重启过后进入数据库查看binlog文件名与位置(从库同步主库需要这两个参数!)
MariaDB [(none)]> show master status;
数据库全备:
[root@mysql-master ~]# mysqldump -uroot -p -A --events > backup.sql
将备份的数据库传输到从服务器:
[root@mysql-master ~]# scp backup.sql root@192.168.1.2:/root/
修改从库id:
导入从库:
[root@mysql-slave ~]# systemctl start mariadb
[root@mysql-slave ~]# mysql < backup.sql进行主从复制配置:
MariaDB [(none)]> change master to \
-> master_host = '192.168.1.18', -> master_port = 3306 , -> master_user = 'slave' , -> master_password = '123123' , -> master_log_file = 'mybinlog.000001' , -> master_log_pos = 245 ;Query OK, 0 rows affected (0.01 sec)开启主从同步:
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.02 sec)MariaDB [(none)]> show slave status\G解锁主库:
查看主从服务器数据库文件:
主从同步成功!
主从配置步骤:
a)准备两台数据库环境(多台设备,用mysql多实例),确定能否正常启动运行b)配置my.cnf文件,主控配置binlog和serverid ,从库配置serverid参数(不能和主库一致),一般从库不开启binlog的(注意:配置参数必须重启才生效)c)登录主库增加用于从库连接主库同步的账户(授权),且授权replication slave权限d)登录主库, 整库锁表 show master status进行查看binlog的位置状态e)Linux命令行备份(mysqldump),将数据拷贝到从库上f)解锁主库g)把主库已有数据导入到从库,根据主库获取到的binlog的位置进行从库同步change master toh)开启从库同步 start slavei)从库show slave status,用于检测同步状态,并在主库去测试amoeba proxy实现读写分离
Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。
Amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。用户需要结合使用MySQL的 Replication等机制来实现副本同步等功能。
JDK下载地址:
Amoeba下载地址:
安装JDK:
[root@LB ~]# cp jdk-6u14-linux-x64.bin /usr/local/
[root@LB ~]# cd /usr/local/[root@LB local]# ls
bin etc games include jdk1.6.0_14 jdk-6u14-linux-x64.bin lib lib64 libexec sbin share src
[root@LB ~]# chmod a+x jdk-6u14-linux-x64.bin
[root@LB ~]# ./jdk-6u14-linux-x64.bin //安装的时候会有个协议,一直翻到最下面然后 输入 yes 开始安装
做个软连接:(看个人习惯,可以不做)
[root@LB local]# ln -s jdk1.6.0_14/ jdk1.6
添加系统环境变量:
[root@LB ~]# vim /etc/profile //在最后加
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/binexport AMOEBA_HOME=/usr/local/amoebaexport PATH=$PATH:$AMOEBA_HOME/bin
重新读取生效/etc/profile
[root@LB ~]# source /etc/profile
二进制安装amoeba:
[root@LB ~]# mkdir /usr/local/amoeba
[root@LB ~]# chmod 775 /usr/local/amoeba[root@LB ~]# tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/ //解压二进制安装文件 不需要安装 解压就能用!!!
[root@LB amoeba]# bin/amoeba
amoeba start|stop在mysql server上给amoebe权限,amoeba将以这个身份登录mysql:
MariaDB [(none)]> grant all on *.* to "amoeba"@"192.168.1.%" identified by "123123";
MariaDB [(none)]> flush privileges;修改amoeba主配置文件:
[root@LB ~]# vim /usr/local/amoeba/conf/amoeba.xml
---30行--
<property name="user">amoeba</property>----32行--------- <property name="password">123123</property> //提供客户端连接amoeba时需要使用这里设定的账号(这里的账号密码和amoeba连接后端数据库服务器的密码无关)
---117-去掉注释-
<property name="defaultPool">master</property> //默认数据库池为master<property name="writePool">master</property> //设置可写入数据池的服务器为master
<property name="readPool">slaves</property> //设置可读数据库服务器池为slaves配置amoeba访问数据库配置文件
[root@LB ~]# vim /usr/local/amoeba/conf/dbServers.xml
<!-- mysql port -->
<property name="port">3306</property> <!-- mysql schema --> <property name="schema">wordpress</property> //配置默认的缺省数据库(这个数据库就是后端指定的库) <!-- mysql user --> <property name="user">amoeba</property> //设置amoeba连接后端数据库服务器的账号和密码,在所有后端数据库上创建该用户,并授权amoeba服务器可连接 <!-- mysql password --> <property name="password">123123</property>____________________________________________________________________________________
<dbServer name="master" parent="abstractServer">
<factoryConfig> <!-- mysql ip --> <property name="ipAddress">192.168.1.18</property> </factoryConfig> </dbServer> <dbServer name="slave1" parent="abstractServer"> <factoryConfig> <!-- mysql ip --> <property name="ipAddress">192.168.1.2</property> </factoryConfig> </dbServer> <dbServer name="slaves" virtual="true"> <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool"> <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA--> <property name="loadbalance">1</property> <!-- Separated by commas,such as: server1,server2,server1 --> <property name="poolNames">slave1</property> //这里定义slaves池中的所有成员 </poolConfig>
启动amoeba服务:
[root@LB ~]# /usr/local/amoeba/bin/amoeba start
[root@LB ~]# netstat -anpt | grep java
将web数据库中的数据库连接地址改成amoeba代理的地址,端口改为8066:
[root@WEB ~]# vim /var/www/html/wp-config.php [root@WEB ~]# systemctl restart httpd
成功!
还可以通过下面的方法来验证amoeba代理是否成功
[root@mysql-master ~]# mysql -h192.168.1.16 -uroot -p -P8066 //-P 通过amoeba的8066端口代理到后端数据库的3306
总结:其实amoeba是自带数据库同步的,不需要手动配置的同步数据库,但是会手动配置同步很重要!
注意在第一次同步后,在从服务器上是没有写的权限的!!!
实验过程很艰难,如有错误,还请各位大佬指点!感谢!