构建读写分离数据库

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 构建读写分离数据库

基础环境

关闭防火墙selinux

systemctl stop firewalld

setenforce 0

(1)修改主机名

# hostnamectl set-hostname db1

# hostnamectl set-hostname db2

# hostnamectl set-hostname mycat

(2)修改主机映射文件

[root@db1 ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.200.33 db1

192.168.200.44 db2

192.168.200.55 mycat

(3)配置yum源

[root@db1 ~]# cat /etc/yum.repos.d/local.repo

[mariadb]

name=mariadb

baseurl=file:///opt/gpmall-repo

gpgcheck=0

enabled=1

[centos]

name=centos

baseurl=file:///opt/centos

enabled=1

gpgcheck=0

mycat节点

1.安装java环境

# yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y

2.关闭防火墙

iptables -F

iptables -X

iptables -Z

iptables-save

db1和db2节点安装mariadb服务

# yum install mariadb mariadb-server -y

# systemctl start mariadb && systemctl enable mariadb

初始化mariadb数据库并设置密码123456

# mysql_secure_installation

配置主节点db1虚拟机的数据库配置文件my.cnf

# vi /etc/my.cnf

[mysqld]

log_bin = mysql-bin #记录操作日志

binlog_ignore_db = mysql #不同步 MySQL 系统数据库

server_id = 18 #数据库集群中的每个节点 id 都要不同,一

般使用 IP 地址的最后段的数字,例如 172.16.51.18,server_id 就写 18

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

[mysqld_safe]

log-error=/var/log/mariadb/mariadb.log

pid-file=/var/run/mariadb/mariadb.pid

重启服务

systemctl restart mariadb

开放主节点db1的数据库权限

在主节点 db1 虚拟机上使用 mysql 命令登录 MariaDB 数据库,授权在任何客户端机器上

可以以 root 用户登录到数据库。

# mysql -uroot -p123456

grant all privileges on *.* to root@'%' identified by "123456";

在主节点 db1 数据库上创建一个 user 用户让从节点 db2 连接,并赋予从节点同步主节点

数据库的权限,命令如下:

grant replication slave on *.* to 'user'@'db2' identified by '123456';

配置从节点db2同步主节点db1

# mysql -uroot -p123456

change master to

master_host='db1',master_user='user',master_password='123456';

配置完毕主从数据库之间的连接信息之后,开启从节点服务。使用 show slave status\G; 命 令并查看从节点服务状态,如果 Slave_IO_Running 和 Slave_SQL_Running 的状态都为 YES,从节点服务开启成功。

start slave;

show slave status\G;

验证主从数据库的同步功能

db1的数据库

create database test;

use test

 create table company(id int not null primary key,name varchar(50),addr

varchar(255));

insert into company values(1,"facebook","usa");

 

db2数据库验证

show databases;

select * from test.company;

 

mycat节点读写分离中间件

安装 Mycat 服务

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

/usr/local/

赋予目录权限

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

在/etc/profile 系统变量文件中添加 Mycat 服务的系统变量,并生效变量。

# echo export MYCAT_HOME=/usr/local/mycat/ >> /etc/profile

# source /etc/profile

[root@mycat ~]# cat /usr/local/mycat/conf/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="172.16.51.18:3306" user="root" password="123456">

<readHost host="hostS1" url="172.16.51.30:3306" user="root" password="123456"/>

</writeHost>

</dataHost>

</mycat:schema>

[root@mycat ~]# chown root:root /usr/local/mycat/conf/schema.xml

**编辑 mycat 的访问用户 修改/usr/local/mycat/conf/目录下的 server.xml 文件,修改 root 用户的访问密码与数据库, 密码设置为 123456,访问 Mycat 的逻辑库为 USERDB,命令如下:

[root@mycat ~]# cat /usr/local/mycat/conf/server.xml

在配置文件的最后部分,

<user name="root">

<property name="password">123456</property>

<property name="schemas">USERDB</property>

删除如下:

<user name="user">

<property name="password">user</property>

<property name="schemas">TESTDB</property>

<property name="readOnly">true</property>

</user>

启动mycat服务

[root@mycat ~]# /bin/bash /usr/local/mycat/bin/mycat star

netstat -ntlp

验证数据库集群服务读写分离功能 (1)用 Mycat 服务查询数据库信息 先在 Mycat 虚拟机上使用 Yum 安装 mariadb-client 服务。

[root@mycat ~]# yum install -y MariaDB-client

在 Mycat 虚拟机上使用 mysql 命令查看 Mycat 服务的逻辑库 USERDB,因为 Mycat 的逻 辑库 USERDB 对应数据库 test(在部署主从数据库时已安装),所以可以查看库中已经创建的 表 company。命令如下。

[root@mycat ~]# mysql -h127.0.0.1 -P8066 -uroot -p123456

show databases;

use USERDB

show tables;

insert into company values(2,"bastetball","usa");

select * from company;

验证 Mycat 服务对数据库读写操作分离

[root@mycat ~]# mysql -h127.0.0.1 -P9066 -uroot -p123456 -e 'show @@datasource;'


相关文章
|
6月前
|
SQL 弹性计算 关系型数据库
如何用读写分离构建高效稳定的数据库架构?
在少写多读业务场景中,主实例读请求压力大,影响性能。通过创建只读实例并使用数据库代理实现读写分离,可有效降低主实例负载,提升系统性能与可用性。本文详解配置步骤,助你构建高效稳定的数据库架构。
存储 人工智能 机器人
203 0
|
6月前
|
安全 关系型数据库 数据管理
阿里云数据库:构建高性能与安全的数据管理系统
阿里云数据库提供RDS、PolarDB、Tair等核心产品,具备高可用、弹性扩展、安全合规及智能运维等技术优势,广泛应用于电商、游戏、金融等行业,助力企业高效管理数据,提升业务连续性与竞争力。
|
11月前
|
安全 OLAP 数据库
拒绝等待!阿里云瑶池数据库 x Qwen3,构建增强式RAG
阿里云瑶池 Dify on DMS + AnalyticDB 现已支持通义千问 Qwen3 全系列模型的私域部署,并提供独占模型服务,实现高效安全的 GraphRAG 业务应用及大模型应用开发解决方案。
|
监控 关系型数据库 MySQL
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
|
关系型数据库 分布式数据库 PolarDB
PolarDB开源数据库进阶课9 读写分离
本文介绍了如何配置读写分离工具pgpool-II for PolarDB,使应用程序能够透明地实现读写分离。
474 1
|
移动开发 监控 关系型数据库
使用云数据库RDS和低代码开发平台“魔笔”,高效构建门户网站,完成任务领智能台灯!
使用云数据库RDS和低代码开发平台“魔笔”,高效构建门户网站,完成任务领智能台灯!
|
人工智能 容灾 关系型数据库
【AI应用启航workshop】构建高可用数据库、拥抱AI智能问数
12月25日(周三)14:00-16:30参与线上闭门会,阿里云诚邀您一同开启AI应用实践之旅!
|
6月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。

热门文章

最新文章