本帖最后由 wsw13640218682 于 2016-4-21 17:40 编辑
公司实验环境: 192.168.2.158
192.168.1.226
192.168.2.159
192.168.0.240
说明: 1.226作为mysql主数据库(家里:192.168.0.165)
192.168.1.226
192.168.2.159
192.168.0.240
说明: 1.226作为mysql主数据库(家里:192.168.0.165)
2.159作为mysql从数据库.(家里:192.168.0.111)
2.158作为mysql-proxy.(家里:192.168.0.7)
0.240作为测试机器.
2.158作为mysql-proxy.(家里:192.168.0.7)
0.240作为测试机器.
一、由于是第一次弄,所以找来几台虚拟机作为首次mysql-proxy的实验,首先对两个mysql做好主从来实验(这里的操作不写出来,省略掉)
二、编译mysql-proxy配置文件
[mysql-proxy]
keepalive=true #mysql-proxy崩溃时,尝试重启
pid-file = /var/run/mysql-proxy.pid
log-file = /var/log/mysql-proxy.log
log-level = debug #定义log日志级别,由高到低分别有(error|warning|info|message|debug)
max-open-files = 1024
daemon=true #以守护进程方式运行
plugins = admin,proxy #开启mysql-proxy加载的模块
user = root #运行mysql-proxy用户
#
#Proxy Configuration
proxy-address=192.168.2.158:4040 #mysql-proxy运行ip和端口,不加端口,默认4040
proxy-backend-addresses =192.168.1.226:3306 #后端mysql的master ip和端口
proxy-read-only-backend-addresses =192.168.2.159:3306 #后端mysql的slave ip和端口
#proxy-lua-script =
#proxy-skip-profiling = true
#
# Admin Configuration
admin-address = 192.168.2.158:4041 #管理端口
admin-lua-script =/usr/lib/mysql-proxy/lua/admin.lua
proxy-lua-script =/home/mysql-proxy/mysql-proxyrm-splitting.lua #读写分离脚本路径
admin-username = proxy #主从mysql共有的用户
admin-password = 123456 #主从mysql共有用户的密码
[root@home ~]#cat /usr/lib/mysql-proxy/lua/admin.lua
function set_error(errmsg)
proxy.response = {
type = proxy.MYSQLD_PACKET_ERR,
errmsg = errmsg or "error"
}
end
function read_query(packet)
if packet:byte() ~= proxy.COM_QUERY then
set_error("[admin] we only handle text-based queries (COM_QUERY)")
return proxy.PROXY_SEND_RESULT
end
local query = packet:sub(2)
local rows = { }
local fields = { }
if query:lower() == "select * from backends" then
fields = {
{ name = "backend_ndx",
type = proxy.MYSQL_TYPE_LONG },
{ name = "address",
type = proxy.MYSQL_TYPE_STRING },
{ name = "state",
type = proxy.MYSQL_TYPE_STRING },
{ name = "type",
type = proxy.MYSQL_TYPE_STRING },
{ name = "uuid",
type = proxy.MYSQL_TYPE_STRING },
{ name = "connected_clients",
type = proxy.MYSQL_TYPE_LONG },
}
for i = 1, #proxy.global.backends do
local states = {
"unknown", "up",
"down"
}
local types = {
"unknown",
"rw",
"ro"
}
local b = proxy.global.backends
rows[#rows + 1] = {
i,
b.dst.name, -- configured backend address
states[b.state + 1], -- the C-id is pushed down starting at 0
types[b.type + 1], -- the C-id is pushed down starting at 0
b.uuid, -- the MySQL Server's UUID if it is managed
b.connected_clients -- currently connected clients
}
end
elseif query:lower() == "select * from help" then
fields = {
{ name = "command",
type = proxy.MYSQL_TYPE_STRING },
{ name = "description",
type = proxy.MYSQL_TYPE_STRING },
}
rows[#rows + 1] = { "SELECT * FROM help", "shows this help" }
rows[#rows + 1] = { "SELECT * FROM backends", "lists the backends and their state" }
else
set_error("use 'SELECT * FROM help' to see the supported commands")
return proxy.PROXY_SEND_RESULT
end
proxy.response = {
type = proxy.MYSQLD_PACKET_OK,
resultset = {
fields = fields,
rows = rows
}
}
return proxy.PROXY_SEND_RESULT
end
三、在master上对proxy的用户授权
mysql> grant all on *.* to 'proxy'@'192.168.2.158' identified by ‘123456’;
四、远程连接去proxy创建或修改内容:
[root@user3 12:52:30 ~]# mysql -uproxy -p123456 -P 4040 -h192.168.2.158
mysql> create table user (number INT(10),name VARCHAR(255));
mysql> insert into user values(01,'zhangsan');
mysql> insert into user values(02,'lisi');
如此类推的可以插入表里的值...
五、登陆master和slave查看是不是数据可同步,同步了的就实现了读写分离
做到这里起初是通过远程连接到mysql-proxy上增删改查操作,返回主从上看看是能同步了,这样我以为可以了,后来我查看多几个的实例看到http://blog.itpub.net/22039464/viewspace-1708258/,到这里的倒数最后一步:这是因为rw-splitting.lua脚本默认有4个链接才启用分离;这是啥意思,我打开4个putty来进入链接去mysql-proxy都是up不了
PS:http://blog.jobbole.com/94606/ 这个最后二步,我实现不了他的效果
http://www.jb51.net/article/50178.htm 接上面的连接混合使用
0
我是直接二进制包。。。。
lin19890913 发表于 2016-4-21 13:04
你居然成功了!我当初实验了3次都失败了,你的mysql-proxy是编译安装的吗?这个需要的依赖包有些多,各个包 ...
我是直接二进制包。。。。
0
mysql-proxy我也试过用源码安装0.8.3不成功,但一直都提示欠缺东西(在百度搜出来原因并下载相应的依赖包源码安装后都不行,都是一直提示)
后来铭哥建议我用yum来安装,所以我这个mysql-proxy是用yum安装(这个是0.8.5),我觉得应该还不是完全成功的,在proxy:4041上执行select * from backends;的mysql-slave始终up不起来..
lin19890913 发表于 2016-4-21 13:04
你居然成功了!我当初实验了3次都失败了,你的mysql-proxy是编译安装的吗?这个需要的依赖包有些多,各个包 ...
mysql-proxy我也试过用源码安装0.8.3不成功,但一直都提示欠缺东西(在百度搜出来原因并下载相应的依赖包源码安装后都不行,都是一直提示)
后来铭哥建议我用yum来安装,所以我这个mysql-proxy是用yum安装(这个是0.8.5),我觉得应该还不是完全成功的,在proxy:4041上执行select * from backends;的mysql-slave始终up不起来..
0
不在master上对mysql-proxy的授权一个账号来远程连接是连不上的,你说的这个我试过了,你是如何使用源码安装二进制包的,我怎样源码安装都不成功
ilinux 发表于 2016-4-21 16:13
proxy用户是连接admin管理接口的,你是又建立了一个数据用户proxy吗?
不在master上对mysql-proxy的授权一个账号来远程连接是连不上的,你说的这个我试过了,你是如何使用源码安装二进制包的,我怎样源码安装都不成功
0
http://www.apelearn.com/bbs/fo ... 49332 我刚发的,你看看
lin19890913 发表于 2016-4-21 17:41
成功了吗?成功的话能分享下具体的步骤,所要安装的版本及依赖吗
http://www.apelearn.com/bbs/fo ... 49332 我刚发的,你看看
0
你好大致看了下你的过程,大致觉得你的配置没有问题(可能有细节性问题,我没有发现),下面我说一下,我个人的一点看法(为什么配置没有问题,但实验却没成功);
1:你做测试的时候要多开几个链接,也就是多打开几个客户端来链接mysql_proxy,因为mysql_proxy的负载均衡与读写分离算法是基于 连接来做的(你开一个客户端,也就是只有一个连接,无论你怎么操作都都只连到一台后端的mysql)
2:min idel-connections=1;
max idel-connections=1;
这两个参数的大致是,有多少个连接的时候我们才做读写分离,你都改成1,之后开5个客户端再做实验试试,应该可以!
1:你做测试的时候要多开几个链接,也就是多打开几个客户端来链接mysql_proxy,因为mysql_proxy的负载均衡与读写分离算法是基于 连接来做的(你开一个客户端,也就是只有一个连接,无论你怎么操作都都只连到一台后端的mysql)
2:min idel-connections=1;
max idel-connections=1;
这两个参数的大致是,有多少个连接的时候我们才做读写分离,你都改成1,之后开5个客户端再做实验试试,应该可以!
0
嗯,好的,有空的就去试试您的看法..min/max idel-connections的值本来就是1,后来我将数值改大而已
庄宇辰 发表于 2016-4-27 18:14
你好大致看了下你的过程,大致觉得你的配置没有问题(可能有细节性问题,我没有发现),下面我说一下,我个 ...
嗯,好的,有空的就去试试您的看法..min/max idel-connections的值本来就是1,后来我将数值改大而已
编辑回复