EntityFrameworkCore+Mysql+Mycat进行读写分离配置


说明:

本人使用的都是ubuntu16.04 本地虚拟机,以下部署都是个人摸索或者寻求他人帮助以及网上查找相关资料进行配置的,可能不适用其他环境或者有遗漏,配置也都是根据简单化的,

深入的我自己也不了解,也许有更好的解决方式,要是有的话 请底下发个连接 谢谢,当前内容仅供参考,希望能帮助遇到相同问题的人, 谢谢!!!

1、准备3台服务器

192.168.1.136   mycat

192.168.1.174   写数据库

192.168.1.175   读数据库

2、配置双主数据库

安装mysql,创建 test 数据库

  

192.168.1.174服务器操作如下:

//登录Mysql 创建且授权master,专门提供192.168.1.175进行主主备份操作
mysql> grant replication slave on *.* to 'master'@'192.168.1.175' identified by '1234';
mysql> flush privileges;
//Mysql 5.7.2之后的版本通过这样的授权当开启slave的时候slave_IO_Run为No,换种方式授权创建master用户
mysql> grant all privileges on *.* to 'master'@'192.168.1.175' identified by '1234';

修改mysql配置文件内容,修改完后重启mysql服务 systemctl restart mysql

skip-name-resolve init-connect='SET NAME UTF8' skip-character-set-client-handshake character-set-server=utf8 max_connections=2000 lower_case_table_names = 1 skip_ssl server-id               = 1 log_bin = /var/log/mysql/mysql-bin.log auto-increment-increment= 2 auto-increment-offset   = 1 relay_log = mysqld-relay-bin log-slave-updates=ON expire_logs_days = 15 max_binlog_size = 500M
View Code

登录192.168.1.175 的mysql进行如下操作:

mysql> show master status\G
记下 mysql-bin.00001与154

再转回192.168.1.174的mysql 如下操作

mysql> change master to
 master_host='192.168.1.175',
  master_port=3306,
  master_user='master',
  master_password='1234',
  master_log_file='mysql-bin.000001',  //之前数据库查看的文件名称
  master_log_pos=154;        //之前show master status 的内容位置

 
mysql> start slave;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
说明开启成功,失败的话只能自行查找原因了或者网上搜搜看

 

192.168.1.175服务器mysql操作如下

修改Mysql配置文件内容,并且重启mysql服务

skip-name-resolve
init-connect='SET NAME UTF8'
skip-character-set-client-handshake
character-set-server=utf8
max_connections=2000
lower_case_table_names = 1
skip_ssl
server-id               = 2    //与192.168.1.174必须不同
log_bin                 = /var/log/mysql/mysql-bin.log
auto-increment-increment= 2
auto-increment-offset   = 2
relay_log               = mysqld-relay-bin
log-slave-updates=ON
expire_logs_days        = 15
max_binlog_size         = 500M
View Code

 查看192.168.1.174服务的mysql  master status

mysql> show master status;
  

登录192.168.1.175 mysql如下操作

mysql> grant replication slave on *.* to 'master'@'192.168.1.174' identified by '1234';
mysql> flush privileges;


mysql> change master to
    -> master_host='192.168.1.174',
    -> master_port=3306,
    -> master_user='master',
    -> master_password='1234',
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=456;

mysql> start slave;
mysql> show slave status\G

双主数据库已经建立完成

设置Mycat做关联

1、安装mycat之前必须先安装java jdk

java下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

下载后 存放目录是 /usr/local/jdk1.8.0_20(可自行定义)

  

 

 

2、去官网下载Mycat,http://dl.mycat.io/1.6-RELEASE/  本人下载是1.6 linux版本

3、上传到192.168.1.136 服务器上 /usr/local/mycat

修改mycat  wrapper.conf配置文件
/usr/local/mycat/conf/wrapper.conf
wrapper.java.command=/usr/local/jdk1.8.0_20/bin/java #目录修改为java存放地址

mycat 如下命令: /usr/local/mycat/bin/mycat status /usr/local/mycat/bin/mycat start /usr/local/mycat/bin/mycat stop


mycat下面目录/usr/local/mycat/conf/schema.xml 配置内容如下
mycat下面目录/usr/local/mycat/conf/server.xml 配置内容基本上是默认,修改了用户名跟密码

 

 

启动mycat 运行 /usr/local/mycat/bin/mycat start 就可以 若是失败 
可以查看mycat启动日志,网上有很多说明,我也只简单使用,我启动的时候是文件权限问题可能有不足仅供参考

 

 
 

chmod +x /usr/local/mycat/bin/mycat

chmod +x /usr/local/mycat/bin/wrapper-linux-x86-32

chmod +x /usr/local/mycat/bin/wrapper-linux-x86-64

授权后 再次运行
/usr/local/mycat/bin/mycat start

应该是成功了,可能有忘记吧,若是不成功 上网查查或者看看日志
 

  

然后可以试着修改你的.net Core 连接地址为192.168.1.136 端口号mycat默认是8066

 

 

 

因为本人是使用EntityFrameworkCore的,发现新增数据的时候会报出冲突,、

改成Dapper就没这个问题

 

 这块应该是主键自增问题,EFCore主键默认是+1,

之前mysql为了防止Mysql主主设置相互拷贝冲突在配置文件里都设置了自增+2间隔

 

 

 

 

 

 

 

 

 

 

 

C#模型里主键不指定Key,设置非自增,就允许插入数据了

尝试关闭Mysql slave服务 发现每次执行写数据 Add 或者Update操作后,我再去读数据的时候 读的竟然是我配置的写入的数据库

可能有其他处理 我这边也发下我的解决方案

 

 

 关闭AutoTransactionsEnabled就可以了,这块可能是事务自动提交的原因 具体我也不清楚 主要是看了挺长时间日志发现EF提交的数据里会自带一个autocommit=false

我使用Dapper提交读写操作的mycat的日志 autocommit=true,所以尝试Database.AutoTransactionsEnabled = false 看看 没想到这样读写分离成功了

并发什么的其他的没试过 有兴趣的朋友可以自己试下 仅供学习与参考 谢谢

 

 

 

 

 参考学习地址:

Mysql主主配置:https://www.wandouip.com/t5i383180/   

        https://www.cnblogs.com/kristain/articles/4142970.html

Mycat配置:https://github.com/MyCATApache/Mycat-Server/wiki/2.0-Mycat%E5%AE%89%E8%A3%85%E4%B8%8E%E4%BD%BF%E7%94%A8

 

 

 

 

 

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM