环境
centos7 5台
四台 mysql 5.7
一台 jdk mycat
一、首先先搭建galera集群
准备环境
五台主机都做解析
[root@admin ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.245.133 galera1
192.168.245.134 galera2
192.168.245.135 galera3
192.168.245.136 galera4
关闭防火墙和selinux
时间同步:
修改时区:
# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# timedatectl set-timezone Asia/Shanghai
下载和安装Galera(每台mysql都需要安装)
[root@wing yum.repos.d]# cat galera.repo
[galera]
name=galera
baseurl=http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/
enabled=1
gpgcheck=0
yum install mysql-wsrep-5.7.x86_64 galera rsync -y
修改配置文件 /etc/my.cnf
server-id=1
binlog_format=row
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://'
wsrep_node_name='galera1'
wsrep_node_address='192.168.245.133'
wsrep_sst_auth=syncuser:'Tianxia@123'
wsrep_sst_method=rsync
重启mysqld
systemctl restart mysqld
测试
mysql> show status like 'wsrep%';
创建一个数据库
mysql > create database wudi;
mysql > create database jimo;
创建mycat的授权用户
mysql > grant all on wudi.* to 'mycat'@'%' identified by 'Tianxia@123'
mysql > grant all on jiwo.* to 'mycat'@'%'
二、配置mycat
部署环境:需要java,所以需要下载jdk(这里就不部署java了,直接跳过)
从官网下载mycat
tar xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local/
认识配置文件
MyCAT 目前主要通过配置文件的方式来定义逻辑库和相关配置:
/usr/local/mycat/conf/server.xml #定义用户以及系统相关变量,如端口等。其中用户信息是前端应用程序连接 mycat 的用户信息。
/usr/local/mycat/conf/schema.xml #定义逻辑库,表、分片节点等内容。
修改server.xml文件
[root@mycat ~]# cd /usr/local/mycat/conf/
[root@mycat conf]# vim server.xml
上面的内容省略
<user name="wudi" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">wudi</property>
</user>
<user name="jimo" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">jimo</property>
</user>
如果你想指定多个文件 可以多写。
</mycat:server>
修改schema.xml文件
[root@mycat conf]# vim schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="wudi" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<schema name="jimo" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2"></schema>
<dataNode name="dn1" dataHost="localhost1" database="wudi" />
<dataNode name="dn2" dataHost="localhost2" database="jimo" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="3"
slaveThreshold="100">
<heartbeat>show status like 'wsrep%'</heartbeat>
<writeHost host="galera1" url="galera1:3306" user="mycat" password="Tianxia@123"></writeHost>
<writeHost host="galera2" url="galera2:3306" user="mycat" password="Tianxia@123"></writeHost>
<writeHost host="galera3" url="galera3:3306" user="mycat" password="Tianxia@123"></writeHost>
<writeHost host="galera4" url="galera4:3306" user="mycat" password="Tianxia@123"></writeHost>
</dataHost>
<dataHost name="localhost2" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="3"
slaveThreshold="100">
<heartbeat>show status like 'wsrep%'</heartbeat>
<writeHost host="galera1" url="galera1:3306" user="mycat" password="Tianxia@123"></writeHost>
<writeHost host="galera2" url="galera2:3306" user="mycat" password="Tianxia@123"></writeHost>
<writeHost host="galera3" url="galera3:3306" user="mycat" password="Tianxia@123"></writeHost>
<writeHost host="galera4" url="galera4:3306" user="mycat" password="Tianxia@123"></writeHost>
</dataHost>
</mycat:schema>
balance=1 开启读写分离机制。所有的读操作都发送到当前可用的wireHost上
wirtchTyoe=0 所有的写操作发送到第一个wirtHost,第一个挂了,才切换到第二个上面
swirtchType=3 基于mysql galera的切换机制, 心跳语句show status like 'wsrep%'
结论
1.所有的节点都正常,writeHost负责写操作(随机的一台机器写),备writHost负责读操作。
2.当第一个writeHost失效后,其中一个备writeHost负责写操作,其他的备继续负责读操作
3.当只有一个writehost时,同时负责读写。
4.可以很好的防止多机同写
网友评论