yangheng48 发表于 2020-8-1 12:05

Linux学习笔记——构建读写分离的数据库集群

环境:        节点规划如下:


主机名                IP地址                        节点
mycat             192.168.200.166                Mycat中间件服务节点
db1-master    192.168.200.167                MariaDB数据库集群主节点
db2-slave       192.168.200.168                MariaDB数据库集群从节点


Mycat组件,使用 Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 压缩包安装
这里提供给大家mycat下载地址:http://dl.mycat.org.cn/1.6-RELEASE/


1:基础环境配置
        一 :修改3台主机的主机名。
                mycat节点修改主机名:
                        @localhost ~]# hostnamectl set-hostname mycat
                        # bash
                        @MyCat ~]#
                db1-master节点修改主机名:
                        # hostnamectl set-hostname db1
                        # bash
                        #
                db2-slave节点修改主机名:
                        # hostnamectl set-hostname db2
                        # bash
                        #
        二 :编辑 hosts 文件
                #三台集群虚拟机的/etc/hosts 文件配置如下,添加下面三条
                        192.168.200.166         mycat
                        192.168.200.167         db1
                        192.168.200.168         db2
        三:Yum 源配置


# 安装 JDK 环境,在 mycat 节点安装 JDK 环境:
# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
# java -version                //查看jdk版本
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode


# 关闭防火墙 (全部节点)
# iptables -F
# iptables -X
# iptables -Z
# iptables-save


2:部署 MariaDB 主从数据库集群服务
#在 db1 和 db2 节点上安装 MariaDB 服务,并开启,加入开机项目//记得开启,否则后面初始化数据库可能会失败
# yum install -y mariadb mariadb-server
# systemctl start mariadby                  
# systemctl enable mariadb


#初始化 MariaDB 数据库
# mysql_secure_installation
选项如下
        Set root password? y
        New password:
        Re-enter new password:
        Password updated successfully!
        Remove anonymous users? y
        Disallow root login remotely? n
        Remove test database and access to it? y
        Reload privilege tables now? y


3:配置数据库集群主节点 (db1节点)
# vi /etc/my.cnf
        log_bin = mysql-bin                                      //记录操作日志
        binlog_ignore_db = mysql                              //不同步 MySQL 系统数据库
        server_id = 167                                                //这里的 id 直接设置会IP地址最后的数字
# systemctl restart mariadb                //重启服务,这样配置才会生效


4:开放主节点的数据库权限
#在节点 db1 上操作
# mysql -uroot -p000000                     //进入数据库
MariaDB [(none)]> grant all privileges on * . * to root@`%` identified by "000000";        //给予任何客户端可以 以root用户登录到数据库。


#在节点 db1 数据库上创建一个 user 用户,让从节点 db2 连接,并赋予从节点同步主节点数据库的权限
MariaDB [(none)]> grant replication slave on * . * to `user`@`db2` identified by "000000";


5:配置从节点 db2 主机同步主节点 db1
# vi /etc/my.cnf                                 //进入配置文件
server_id = 168        #添加server_id ,注意这里的ID是唯一的,不能和master server id 一样
# mysql -uroot -p000000                //进入数据库
MariaDB [(none)]> change master to master_host='db1',master_user='user',master_password='000000';        //配置连接信息
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;                //这里会给予截图,帮助大家理解
# 查看到这两个为 YES 则从节点开启成功
   Slave_IO_Running: Yes
   Slave_SQL_Running: Yes



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


        一:在 db1 节点上操作:
                # mysql -uroot -p000000                                        //进入数据库
                MariaDB [(none)]> create database test;                                //创建一个表
                MariaDB [(none)]> use test                                                        //编辑它
                MariaDB > create table company(id int not null primary key,name varchar(50),addr varchar(255));        //创建表字段
                MariaDB > insert into company values(1,"facebook","usa");                //添加字段
                MariaDB > select * from company;        #查询表字段
                +----+----------+------+
                | id | name   | addr |
                +----+----------+------+
                |1 | facebook | usa|
                +----+----------+------+
                1 row in set (0.01 sec)       


        二:在 db2 节点上操作:
                # mysql -uroot -p000000                                                //进入数据库
                MariaDB [(none)]> show databases;
                +--------------------+
                | Database         |
                +--------------------+
                | information_schema |
                | mysql            |
                | performance_schema |
                | test               |
                +--------------------+
                MariaDB [(none)]> select * from test.company;                                //显示出facebook 则成功
                +----+----------+------+
                | id | name   | addr |
                +----+----------+------+
                |1 | facebook | usa|
                +----+----------+------+
                1 row in set (0.00 sec)


7:部署 Mycat 读写分离中间件服务
#这里我们简单介绍读写分离的作用,让大家简单理解。因为数据库的 “写” (写10000条数据到MySQL可能要3分钟),操作是比较耗时的,但数据库的“读”(从MySQL读10000条数据可能只要5秒钟)
操作比较快,所以读写分离可以解决数据库写入时影响查询效率的问题。


#这里我们在 Mycat 节点操作
# tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/                        //将 Mycat 压缩包解压到 /usr/local/下
# chown -R 777 /usr/local/mycat/                                                                                              //给予 mycat 文件所有权限
# echo export MYCAT_HOME=/usr/local/mycat/>>/etc/profile                                                      //在/etc/profile系统变量文件中添加Mycat服务的系统变量
# source /etc/profile                                                                                                                        //让配置生效


#编辑 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="192.168.200.167:3306" user="root" password="000000">
                <readHost host="hostS1" url="192.168.200.168:3306" user="root" password="000000" />
      </writeHost>
</dataHost>
</mycat:schema>




# chown root:root /usr/local/mycat/conf/schema.xml                 //修改 schema.xml 的用户权限


#编辑 Mycat 的访问用户
# vim /usr/local/mycat/conf/server.xml                                      //进入配置文件
#编辑说明,编辑区域在 第80行,修改如下,注意下面的需要删除
   <user name="root">
                <property name="password">000000</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>
# /bin/bash /usr/local/mycat/bin/mycat start                        //启动 Mycat 服务
# netstat -ntpl                                               
#查看开启端口,这里我们输入命令看到开放8066端口和9066端口,则表示mycat开启成功,这里会给予截图,帮助大家理解


8:验证数据库集群服务读写分离功能       
#现在 mycat 虚拟机上使用 yum 命令安装 Mariadb-client 服务
# yum install -y MariaDB-client        #注意,可能会安装失败
#若安装失败使用以下方法:
        curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash        //添加仓库
        # yum clean all                                //清除缓存
        # yum repolist all                                  //验证数据
        # yum install -y MariaDB-client          //再次安装就会成功


9:通过 Mycat 服务查看数据库
# mysql -h127.0.0.1 -P8066 -uroot -p000000                //连接数据库
MySQL [(none)]> use USERDB                        #使用数据库
MySQL [(none)]> show databases;                        #这里我们就可以看到有一个表
+----------+
| DATABASE |
+----------+
| USERDB   |
+----------+
1 row in set (0.002 sec)


MySQL > select * from company;        #使用sql查找字段,我们可以看到我们原先创建的字段 facebook
+----+----------+------+
| id | name   | addr |
+----+----------+------+
|1 | facebook | usa|
+----+----------+------+
1 row in set (0.003 sec)


10:通过 Mycat 服务添加数据表
MySQL > insert into company values(2,"鸡你太美","usr");                        //这里我们添加数据
Query OK, 1 row affected, 1 warning (0.012 sec)


MySQL > select * from company;                                        //查询数据库字段,可以看到 “鸡你太美”,已经添加成功了,只不过中文显示乱码而已。
+----+----------+------+
| id | name   | addr |
+----+----------+------+
|1 | facebook | usa|
|2 | ????   | usr|
+----+----------+------+
2 rows in set (0.002 sec)




11:验证 Mycat 服务对数据库读写操作的分离
# mysql -h127.0.0.1 -P9066 -uroot -p000000 -e 'show @@datasource;'         //成功会显示如下图


豫A00001 发表于 2020-8-3 09:38

hiabbyy 发表于 2020-8-2 19:21
留个邮箱可以吗 发一份给我

已发送 注意查收

hiabbyy 发表于 2020-8-2 19:21

豫A00001 发表于 2020-8-1 12:48
我这有另个版本的

留个邮箱可以吗 发一份给我869987579@qq.com

hiabbyy 发表于 2020-8-1 12:30

有pdf吗 或Word

豫A00001 发表于 2020-8-1 12:48

hiabbyy 发表于 2020-8-1 12:30
有pdf吗 或Word

我这有另个版本的

山漆海深 发表于 2020-8-1 13:59

你们Linux都是装在U盘里的吗? 不然一台电脑不方便的样子

hiabbyy 发表于 2020-8-3 14:17

豫A00001 发表于 2020-8-3 09:38
已发送 注意查收

谢谢 收到了

gdp123gd 发表于 2020-8-3 16:48

豫A00001 发表于 2020-8-1 12:48
我这有另个版本的

谢谢老铁,649939036@qq.com,麻烦给我发一份

豫A00001 发表于 2020-8-3 18:56

gdp123gd 发表于 2020-8-3 16:48
谢谢老铁,,麻烦给我发一份

已发送注意查收

gdp123gd 发表于 2020-8-3 23:30

豫A00001 发表于 2020-8-3 18:56
已发送注意查收

收到,感谢
页: [1] 2
查看完整版本: Linux学习笔记——构建读写分离的数据库集群