zoukankan      html  css  js  c++  java
  • 利用oneproxy实现mysql读写分离搭建笔记

     
    功能:
    1.具有SQL白名单(防SQL注入)及IP白名单功能的SQL防火墙软件
    2.数据库故障切换
    3.读写分离
    4.分库分表
     
     
    一、下载
    oneproxy-rhel5-linux64-v6.0.0-ga.tar.gz
     
    二、部署
    master: 192.168.0.181 hostname:cen01
    slave: 192.168.0.182 hostname:cen02
    oneproxy: 192.168.0.183 hostname:cen03
    系统:全部是centos6.7
    需要读写分离的库名称:mydata,表test01 (id int(3),name char(8)); 可不用先建好
     
    总结:
    1.master与slave安装好MYSQL,已做好主从复制,oneproxy不用安装MYSQL
    2.当外来业务访问数据库时,只需直接访问oneproxy机器的:3307端口就行了。它会直接调度master和slave节点。
    mysql -uuser01 -puser01 -P3307 -h192.168.0.183
     
    1.将软件包解压
    tar -xzf oneproxy-rhel5-linux64-v6.0.0-ga.tar.gz -C /usr/local
     
    2.配置oneproxy
    cd /usr/local/oneproxy
    vim ./demo.sh
    将ONEPROXY_HOME的路径改为软件部署路径:/usr/local/oneproxy
    如下图所示:
     
    vim oneproxy.service
    将ONEPROXY_HOME的路径改为软件部署的路径:/usr/local/oneproxy
    如下图所示:
     
    vim conf/proxy.conf
    event-threads = 4     //并发线程数,最大允许48个线程。通常可以设为CPU Core数量的两倍
    proxy-address = :3307    //设置对外提供访问的端口
    mysql-version = 5.6.25    //设置mysql版本
    proxy-slave-addresses.1 = 192.168.0.182:3306@server1      //192.168.0.182为slave的IP,server1为服务组名称,任意写
    proxy-slave-addresses.2 = 192.168.0.184:3306@server1      //填写第二个slave的IP,如果有的话
    proxy-master-addresses.1 = 192.168.0.181:3306@server1      //192.168.0.181为master的IP,server1为服务组名称,任意写
    proxy-group-policy = server1:read_slave      //设置策略为:在master写,在slave读
    proxy-user-list = user01/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@mydata          //user01为用户名,用于给oneproxy登录后端MYSQL节点/后面的字符串是密码,mydata是要读写分离的数据库名称
    repadmin-username = repadmin          //指定复制管理帐号的用户名,后端MYSQL节点都要建
    repadmin-password = 1378F6CC3A8E8A43CA388193FBED5405982FBBD3           //指定复制帐号的密码,三台mysql都要有
    保存退出
     
     
    登录所有后端MYSQL(master/slave节点),执行:
    由于已经设置了主从复制,所以只对master添加用户即可,创建用户操作会同步到slave
    create user user01;
    grant all on mydata.* to user01@'%' identified by 'user01';
    create user 'repadmin'@'%' identified by 'user01';           //oneproxy可能通过该帐号在后端MYSQL节点执行:show master/slave status
    grant replication slave on *.* to 'repadmin'@'%';        //以便用来取得复制的运行数据
    grant replication client on *.* to 'repadmin'@'%';
    flush privileges;
    退出
     
    三、修改系统环境(master/slave/onepxory节点)
    echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
    echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
    ulimit -n 65535
     
    echo "echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse" >> /etc/profile
    echo "echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle" >> /etc/profile
    echo "ulimit -n 65535" >> /etc/profile
     
    iptables -I INPUT -m state --state NEW -p tcp --dport 3307 -j ACCEPT
    iptables -I INPUT -m state --state NEW -p tcp --dport 4041 -j ACCEPT
    iptables -I INPUT -m state --state NEW -p tcp --dport 8080 -j ACCEPT
    service iptables save
     
    四、启动oneproxy
    cd /usr/local/oneproxy
    chmod 755 demo.sh
    ./demosh
    ./oneproxy.service restart
     
    五、访问oneproxy管理界面
    (oneproxy不必安装web服务)
     
    六、读写分离检验
    在master或slave或其它任意一台非集群的机器执行:
    mysql -utest -ptest -h192.168.0.183 -P3307 -e"select @@hostname;"       //往oneproxy提交查询操作,显示的是slave主机名
     
     
    mysql -utest -ptest -h192.168.0.183 -P3307 -e"begin;select @@hostname;commit;"       //往oneproxy提交写操作,显示的是master主机名
     
    可以进一步校验:
    在master或slave或其它任意一台机,或者其它连接mysql的工具(Navicat),执行如下命令:
    mysql -uuser01 -puser01 -P3307 -h192.168.0.183 -e"insert into mydata.test01 values (5,'aaaaa')"
     
    在master和slave的数据库中可以查询到以下结果:
     
     
    当执行:drop table test01时出现报错:
    ERROR 1044 (42000): Access denied due to security policy, DDL disabled or DML restricted!
     
    解释:由于OneProxy为了安全起见,默认是禁止DDL语句的。
    解决办法:从OneProxy管理端口,运行如下命令:
    mysql -uadmin -pOneProxy -P4041 -h192.168.0.183 -e"set gaccess server1 0;"      //0表示允许创建/删除表,1表示不允许创建/删除
    此时就可以删除或者创建表了。
     
    登录管理界面,可看到有相应记录:
     
     
    可见,当往oneproxy写数据时,会自动同步到master上,而master通过主从复制功能将数据同步到slave。
     
    检查后端数据库节点状态:
    mysql -uadmin -pOneProxy -P4041 -h192.168.0.183 --protocol=TCP       //进入管理端口(默认端口为4041),IP为部署了oneproxy的IP
    list help;     //显示帮助
    list backend;      //输入此内容,回车
    IS_M:表示这台机器是否是一台Master
    IS_S:表示是否为一台Slave,
    MFile:表示主库上的Binlog位置
    DFile:表示备机上IO线程
    RFile:SQL线程处理的位置
     
     
    部署完成。
    如有错误,可查看log/proxy.log日志。
  • 相关阅读:
    js开发笔记
    安全相关开发笔记
    常用.NET库使用总结
    Windows使用总结
    .NET Web开发笔记
    Unity插件使用总结
    WinForm开发笔记
    C#开发笔记
    iTunes使用总结
    Mac使用总结
  • 原文地址:https://www.cnblogs.com/hy007x/p/7656851.html
Copyright © 2011-2022 走看看