mariadb数据库主从加读写分离

实验环境:三台linux终端,每台linux的系统为:Red Hat Enterprise Linux release 8.0

10.9.128.4:mysql1  主数据库节点

10.9.128.5:mysql2  从数据库节点

10.9.128.6:mycat   数据库中间件节点

 

配置主数据库节点

安装服务

# yum -y install mariadb mariadb-server

启动服务

# systemctl start mariadb

初始化数据库,配置数据库root密码为000000

# mysql_secure_installation
  Enter current password for root (enter for none):     //默认回车
  Set root password? [Y/n] y
  New password:                                 #输入数据库root密码000000
  Re-enter new password:                          #再次输入密码000000
  Remove anonymous users? [Y/n] y
  Disallow root login remotely? [Y/n] n
  Remove test database and access to it? [Y/n] y
  Reload privilege tables now? [Y/n] y

配置mysql1主节点,修改mysql1节点的数据库配置文件,在配置文件中的[mysqld]增添如下内容。

# vi /etc/my.cnf
  [mysqld]
  log_bin = mysql-bin               //记录操作日志
  server_id = 1                     //配置mysql节点,每台服务器节点必须不一样
  binlog_ignore_db = mysql            //不同步mysql系统数据库
  :wq

重启服务,进入数据库

# systemctl restart mariadb
# mysql -uroot -p000000

在mysql1节点,授权在任何客户端机器上可以以root用户登录到数据库,创建一个user用户连接节点mysql2,并赋予从节点同步主节点数据库的权限。

然后创建测试用的数据库test和表user,重要!

> grant all privileges on *.* to root@'%' identified by '000000';
> grant replication slave on *.* to 'user'@'10.9.128.5' identified by '000000';
> flush privileges;
> create database test; //创建测试用的数据库test
> create table user( id int primary key, pass varchar(40)); //创建测试表user

 

配置从数据库节点

安装服务

# yum -y install mariadb mariadb-server

启动服务

# systemctl start mariadb

初始化数据库,配置数据库root密码为000000

# mysql_secure_installation
  Enter current password for root (enter for none):     //默认回车
  Set root password? [Y/n] y
  New password:                                 #输入数据库root密码000000
  Re-enter new password:                          #再次输入密码000000
  Remove anonymous users? [Y/n] y
  Disallow root login remotely? [Y/n] n
  Remove test database and access to it? [Y/n] y
  Reload privilege tables now? [Y/n] y

修改mysql2节点的数据库配置文件,在配置文件/etc/my.cnf.d/server.cnf中的[mysqld]增添如下内容

# vi /etc/my.cnf
  [mysqld]
  log_bin = mysql-bin
  binlog_ignore_db = mysql 
  server_id = 2
  :wq

重启服务

# systemctl restart mariad

配置主从数据库之间的连接信息

# mysql -uroot -p000000
  > change master to
  > master_host='10.9.128.4',
  > master_user='user',
  > master_password='000000';

开启从节点服务,并验证主从是否成功

如果Slave_IO_Running和Slave_SQL_Running的状态都为YES,则从节点服务开启成功。

> start slave;
> show slave status\G

 

配置mycat

安装Java JDK环境,将jak软件包,上传到Mycat虚拟机的/use/local目录下,并将软件包解压,赋予解压后的目录权限。然后配置环境变量。

# tar -xvf jdk1.7.0_79.tar.gz -C /usr/local/

设置权限

# chmod -R 777 /usr/local/jdk1.7.0_79
 # vi /etc/profile
   最底部添加
   export JAVA_HOME=/usr/local/jdk1.7.0_79
   export PATH=$PATH:$JAVA_HOME/bin
   :wq
# source /etc/profile

验证

# java -version


安装Mycat服务,
将Mycat服务的软件包Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz上传到Mycat虚拟机的/use/local目录下,并将软件包解压,赋予解压后的目录权限

# tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/

设置权限

# chmod -R 777 /usr/local/mycat/

添加变量

 # vi /etc/profile 
   最底部添加
   export MYCAT_HOME=/usr/local/mycat
   :wq 
# source /etc/profile

编辑Mycat的逻辑库配置文件

# vi /usr/local/mycat/conf/schema.xml

配置Mycat服务读写分离的schema.xml配置文件在/usr/local/mycat/conf/目录下,可以在文件中定义一个逻辑库,使用户可以通过Mycat服务管理该逻辑库对应的MariaDB数据库。在这里定义一个逻辑库schema,name为USERDB;该逻辑库USERDB对应数据库database为test(在部署主从数据库时已创建);设置数据库写入节点为主节点mysql1;设置数据库读取节点为从节点mysql2。(可以直接删除原来schema.xml的内容,替换为如下。)

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="USERDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"></schema>
<dataNode name="dn1" dataHost="localhost1" database="test" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" dbType="mysql" dbDriver="native" writeType="0" switchType="1" slaveThreshold="100">
 <heartbeat>select user()</heartbeat>
 <writeHost host="hostM1" url="10.9.128.4:3306" user="root" password="000000">
 <readHost host="hostS1" url="10.9.128.5:3306" user="root" password="000000" />
 </writeHost>
</dataHost>
</mycat:schema>
:wq

代码意思

sqlMaxLimit:      配置默认查询数量。
database:        为真实数据库名。
balance="0":      不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
balance="1":        全部的readHost与stand by writeHost参与select语句的负载均衡,简单来说,当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2、S1、S2都参与select语句的负载均衡。
balance="2":         所有读操作都随机的在writeHost、readhost上分发。
balance="3":        所有读请求随机地分发到wiriterHost对应的readhost执行,writerHost不负担读压力,注意balance=3只在1.4及其以后版本有,1.3版本没有。
writeType="0":       所有写操作发送到配置的第一个writeHost,第一个挂了需要切换到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件dnindex.properties中。
writeType="1":         所有写操作都随机的发送到配置的writeHost。

编辑mycat的访问用户

# chown root:root /usr/local/mycat/conf/schema.xml

修改/usr/local/mycat/conf/目录下的server.xml文件

# vi /usr/local/mycat/conf/server.xml
在配置文件最底部位置会发现<user name="user"></user>,修改
最终效果
将其他定义<user name=></user>删除或者注释掉

:wq保存退出

启动服务

# /bin/bash /usr/local/mycat/bin/mycat start

验证端口,如果有开发8066与9066端口,则表示服务开启成功,配置无误。

 # netstat -ntpl

 

认证数据库读写分离功能

安装mariadb服务

# yum -y install mariadb
# systemctl start mariadb

登录数据库,可以看到test数据库和test的user表

# mysql -h127.0.0.1 -P8066 -uroot -p000000
  > show databases;

> use USERDB;
> show tables;

对表user添加一条数据,然后退出

> insert into user values(1,"test");
> quit

查看读写分离情况

# mysql -h127.0.0.1 -P9066 -uroot -p000000 -e 'show @@datasource;'

可以看出通过9066端口查询对数据库读写操作的分离信息,所有的写入操作WRITE_LOAD数都在mysql1主数据库节点上,所有的读取操作READ_LOAD数都在mysql2主数据库节点上,实验成功

 

作者: 红烧悠鸽
本文采用 CC BY-NC-SA 4.0 协议
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇