坚持#第259天~数据库只读模式,amoeba8066端口负载均衡

多台服务器有多个ip导致使用使用数据库的时候不方便

所以出现了调度器:读写分离

之前分离实验只读没有效果?把服务器作为只读

启动数据库服务

进入数据库

show variables like ‘%read%’;可以看到有一条是read_only

 

flush tables with read lock;锁定所有,只能读,不能写

解锁的话就是unlocktables;锁定之后主机改变数据库内容,从机解锁之后才会看到效果

哈哈,我知道只读为什么不行了,因为之前创建用户赋予权限的时候赋予了all所有权限,即超级super权限,只读对super权限(all权限的用户无效),要在给予权限的时候指明权限:grant create,drop on...

注意只读只用在/etc/my.cnf里面添加read_only=1即可,要重启服务

 

set read_only=1;报错是全局变量

set global read_only=1;

show variables like ‘%read%’;

show databases;验证超级用户能不能写

先删掉wing

进入数据库,selectuser,host,password from mysql.user where user=’wing’;

update mysql.user set password=’’ where user=’wing’;

flush privileges;

grant all on *.* to wing@’%’;

再验证普通用户能不能写

能dropdatabase db3;也能写能删

show variables like ‘read_only’;

flush tables with read_only;报错

vim /etc/my.cnf

read_only=1保存退出

重启数据库服务

在验证发现还是能写

换一台机器访问操作还是能写

vim /etc/my.cnf再添加

innodb_read_only=1保存退出

不能写了,成功了!以上这种啊,只是其他用户不能写,root用户还是能写的,下面的锁就对root也有效:

flush tables with read lock;锁定所有,只能读,不能写

解锁的话就是unlocktables;锁定之后主机改变数据库内容,从机解锁之后才会看到效果

哈哈,我知道只读为什么不行了,因为之前创建用户赋予权限的时候赋予了all所有权限,即超级super权限,只读对super权限(all权限的用户无效),要在给予权限的时候指明权限:grant create,drop on...

注意只读只用在/etc/my.cnf里面添加read_only=1即可,要重启服务

 

又考虑到一个问题,如果不能写的话那AB复制的主机也写不了数据了,试一下

主:

从:show slavestatus发现I/O线程是conecting,connecting

mysql -uslave -pslave -h ip;

\q

可能是数据不同步

删除中继日志,和sql挂掉一样处理

弄好之后使I/O线程和SQL线程都为YES才算弄好AB复制

上面设置的只读是在从机上操作的,只对从机进行不能写操作,对主机能写操作就实现了我们想要的效果

 

总结AB复制使从机不能写的方法:

从机:

vim /etc/my.cnf添加

read_only=1

innodb_read_only=1保存退出,其实不需要innodb_read_only=1这个,只需要read_only这个即可

注意写完了之后重启数据库服务即可

flush tables with read lock;锁定所有,只能读,不能写

解锁的话就是unlocktables;锁定之后主机改变数据库内容,从机解锁之后才会看到效果

哈哈,我知道只读为什么不行了,因为之前创建用户赋予权限的时候赋予了all所有权限,即超级super权限,只读对super权限(all权限的用户无效),要在给予权限的时候指明权限:grant create,drop on...

注意只读只用在/etc/my.cnf里面添加read_only=1即可,要重启服务

 

为了避免主机的主坏了,多加一台主机,主备

mode = read-write

destinations = 192.168.10.11,192.168.10.14这个是只认第一个ip,若第一个ip坏了才认第二个

弄两个主机作为主

然后将其中一个主机下面弄从机

 

多主不能同步日志,那个主下面的从就不能同步了

show variables like ’%slave%’;

log-slave-updates不知道在哪一台主机开启这个选项,可以试试

 

老师试试(先做的主从):主主

从机

清除中继日志重启服务

主机:

清除中继日志重启服务

主机:

进入数据库

查看master状态

从机:

进入数据库

change master to写完

start slave;

查看slave状态

成功

打开log日志

重启服务

再查看一下slave状态

成功

grant replication slave on *.* to slave@’zhu’identified by ‘123’;授权replication用户

start slave;

show master status\G查看master状态

主机:

进入数据库

change master to写完

从机:

创建数据库、表、插入数据

主机:

看同步过来没,发现确实同步了

从机:

show variables like ‘log_slave_updates’;

主机:

my.cnf里面添加log_slave_updates=1

重启服务

进入数据库

看log_slave_updates打开了没有

 

show binlog events in ‘binlog.000002’(新的日志);

 

ameoba:amoeba:是amoeba而不是ameoba

amoeba额摸一把(变形虫)

同样的端口和ip自动调动

不是通过端口,而是通过请求来实现,更加自动化

首先关闭主从服务

ameoba:192.168.10.14

master:192.168.10.11

slave1:192.168.10.12

slave2:192.168.10.13

从机:

stop slave;

主机:

stop slave;

分别在主机、从机1、从机2上创建一个相同的库、表,内容不一样

amoeba机(代理机):

scp -r amoeba需要jdk

cd amoeba

ls

tar xzvf jdk-7u67

ls

mv jdk1.7.0 /usr/local/jdk1.7

/usr/local/jdk1.7/bin/java -version

vim /etc/profile.d/java.sh

exprot JAVA_HOME=/usr/local/jdk1.7

export PATH=$JAVA_HOME/bin:$PATH保存退出

. /etc/profile.d/java.sh

java -version若这一步没有问题说明java环境配置好了

tar xf amoeba-mysql-binary-2.2.0.tar.gz

ls

发现解压之后是散的

mkdir /usr/local/amoeba

tar xf amoeba-mysql-binary-2.2.0.tar.gz -C/usr/local/amoeba

cd /usr/local/amoeba

ls

cd conf

ls

amoeba.xml和dbServers.xml是我们要弄清楚的

vim dbServers.xml

需要创建一个账户,代理服务器来登陆,第20行

主机和两个从机都执行下面的操作:

grant all on *.* to amoeba@代理服务器ip192.168.10.14identified by ‘123’;

flush privileges;

amoeba机:

需要创建一个账户,代理服务器来登陆,第26行:

mysql user的为amoeba

将26行复制到27行

name=”password” 123

 

46行name=”master”

49行ip11

53行name=”slave1”

56行ip12

将53行的整个dbServer复制到结束标签下面

name=”slave2”

ip为13

 

下面有个multiPool是分组,名字可以自己取,name=”readonly”,下面的property name=”loadbalance”   1

property name=”poolNames”   master,slave1,slave2

 

账户和密码

客户端有哪些台

负载均衡的机器有哪些,定义一个负载均衡组

保存退出

vim amoebal.xml

第11行8066下面ipAddr  10.14

30行root

密码没有写

 

31行>admin<

33行密码为123

下面有个filter不用管

116行最后一个propertyname >master<默认连接到哪一台服务器

120行:把注释去掉:确定读服务器是那些

writePoll >master<

readPool >readonly<

保存退出

/usr/local/amoeba/bin/amoeba start &报错太小了

vim /usr/local/amoeba/bin/amoeba

找到58行把最后一个改成Xss256K

/usr/local/amoeba/bin/amoeba start &再启动

netstat -luantp | grep 8066

别人来啦:

mysql -uadmin -p123 -h代理 -P8066

select * from DB1.T1;可以实现读轮循环

create database DB2;

create database DB3;

主机:

有DB2和DB3,

从机1没有,从机2也没有DB2,DB3

写的话只会写入到主机里面

这是刚才amoeba.xml里面写的writePool和readPool

名字是在dbServers.xml里面定义

读操作在主机、从机1、从机2循环

写操作在主机里面

 

真是想不到云计算amoeba还会利用java包jdk

是amoeba而不是ameoba

 

/usr/local/amoeba/bin/amoeba stop是关闭服务

 

为什么在数据库里面可以查到主或从的表,在外面就只能查从,不能查主,而且在外面的话写两遍查询的可以查主和从的数据表,那是因为分配的少了,至少3台(1主两从)才能看到真正的效果。

Amoeba:分布式数据库Proxy解决方案 随着传统的数据库技术日趋成熟、计算机网络技术的飞速发展和应用范围的扩充,数据库应用 已经普遍建立于计算机网络之上。这时集中式数据库系统表现出它的不足:集中式处理,势必造成性 能瓶颈;应用程序集中在一台计算机上运行,一旦该计算机发生故障,则整个系统受到影响,可靠性 不高;集中式处理引起系统的规模和配置都不够灵活,系统的可扩充性差。在这种形势下,集中式数 据库将向分布式数据库发展。 分布式数据库系统的优点: 1、降低费用。分布式数据库在地理上可以式分布的。其系统的结构符合这种分布的要求。允许用 户在自己的本地录用、查询、维护等操作,实行局部控制,降低通信代价,避免集中式需要更高要求 的硬件设备。而且分布式数据库在单台机器上面数据量较少,其响应速度明显提升。 2、提高系统整体可用性。避免了因为单台数据库的故障而造成全部瘫痪的后果。 3、易于扩展处理能力和系统规模。分布式数据库系统的结构可以很容易地扩展系统,在分布式数 据库中增加一个新的节点,不影响现有系统的正常运行。这种方式比扩大集中式系统要灵活经济。在 集中式系统中扩大系统和系统升级,由于有硬件不兼容和软件改变困难等缺点,升级的代价常常是昂 贵和不可行的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值