在Ubuntu12.04中进行cryptdb负载均衡配置
1.cryptdb负载均衡分析
传统的cryptdb中mysql-proxy只连接一个mysql客户端和mysql-server,但随着cryptdb的工业化,一个mysql客户端和mysql-server显然是无法满足现实生产的需求,上一篇博客中介绍了cryptdb的多机部署,接下来我将介绍cryptdb负载均衡的配置。
网上可实现负载均衡的工具有很多,如haproxy,mysql-proxy,为了避免麻烦,本文利用cryptdb本身已有的mysql-proxy来实现cryptdb的负载均衡,下面开始部署。
2.环境准备
Ubuntu-master:cryptdb安装的虚拟机
Ubuntu1:mysql-server安装的虚拟机
Ubuntu2:mysql-server安装的虚拟机
3.主主复制
在进行cryptdb负载均衡配置时,为了保证每个后端数据库都拥有cryptdb的所有数据,需要对后端数据库进行集群搭建,这里我们采用主主复制的模式来搭建集群。
3.1主主复制的理解
主主复制的步骤:
1)在slave节点授权账号
2) 在master节点进行slave配置,将原来的slave当做master进行连接
主主复制可以看作是在slave节点和master节点分别进行了一次主从复制。
3.2主主复制的过程
Ubuntu1:192.168.8.82
Ubuntu2:192.168.8.84
1) Ubuntu1配置
修改Ubuntu1中mysql的配置文件my.cnf
cd /etc/mysql
sudo vim my.cnf
添加以下内容
[mysqld]
server-id=11
log-bin=mysql-bin-11
binlog-format=row
relay-log=mysql-relay-11
保存后,重启mysql服务
2)Ubuntu2配置
修改Ubuntu2中mysql的配置文件my.cnf
cd /etc/mysql
sudo vim my.cnf
添加以下内容
[mysqld]
server-id=12
log-bin=mysql-bin-12
binlog-format=row
relay-log=mysql-relay-12
保存后,重启mysql服务
3)连接
在Ubuntu1中开启mysql客户端,创建用户
grant replication slave,replication client on *.* to 'root'@'%' identified by 'letmein';
查看二进制文件名和插入位置
show master stauts \G
在Ubuntu2中开启mysql客户端,并执行
mysql>change master to
->master_host='192.168.8.82',
->master_port=3306,
->master_user='root',
->master_password='letmein',
->master_log_file='mysql-bin-11.000012',
->master_log_pos=5375;
接下来同样在Ubuntu2中创建用户
grant replication slave,replication client on *.* to 'root'@'%' identified by 'letmein';
查看二进制文件名和插入位置
show master stauts \G
在Ubuntu1中的mysql客户端执行
mysql>change master to
->master_host='192.168.8.84',
->master_port=3306,
->master_user='root',
->master_password='letmein',
->master_log_file='mysql-bin-12.000001',
->master_log_pos=437;
- 在Ubuntu1中开启主主复制
start slave
查看slave状态
show slave status \G
5)测试
在Ubuntu1中创建数据库test_1
在Ubuntu2中查询
在Ubuntu2中删除数据库test_1
在Ubuntu1中查询
至此,后端数据库主主复制完成。
4.cryptdb负载均衡配置
在Ubuntu-master中开启mysql-proxy,执行
cd ~/cryptdb/bins/proxy-bin/bin
sudo su
./mysql-proxy \
--plugins=proxy --event-threads=4 \
--max-open-files=1024 \
--proxy-lua-script=$EDBDIR/mysqlproxy/wrapper.lua \
--proxy-address=192.168.8.81:3307 \
--proxy-backend-addresses=192.168.8.82:3306 \
--proxy-backend-addresses=192.168.8.84:3306
另外开启一终端连接到mysql-proxy
mysql -u root -pletmein -h 192.168.8.81 -P 3307
在cryptdb中创建数据库test
在Ubuntu1中查看
在Ubuntu2中查看
ubuntu1和Ubuntu2都是一样的,说明主主复制的两个集群,使用mysql-proxy管理成功!
总结
在这个负载均衡当中,其实就是使用mysql-proxy均衡两个MySQL服务器的连接数。这里不管这个连接里面的连接处理的数据量有多大,处理时间有多长。
比如主机A有5个连接,处理时间只需要10分钟。二主机B有2个连接,处理时间需要1个小时。当有第8个连接时,更有可能获取的是主机B的连接。
mysql_proxy会把连接mysql服务器的tcp/IP连接缓存进连接池,以提高性能. 在缓存池里, 缓存的连接大致是平均分配在每台mysql服务器上. 但具体的每一个连接,始终连某台服务器.