博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
负载均衡的mariadb集群搭建
阅读量:4563 次
发布时间:2019-06-08

本文共 3644 字,大约阅读时间需要 12 分钟。

集群介绍:

Galera是一个MySQL(也支持MariaDB,Percona)的同步多主集群软件,目前只支持InnoDB引擎。

主要功能:

  • 同步复制
  • 真正的multi-master,即所有节点可以同时读写数据库
  • 自动的节点成员控制,失效节点自动被清除
  • 新节点加入数据自动复制
  • 真正的并行复制,行级
  • 用户可以直接连接集群,使用感受上与MySQL完全一致

优势:

  • 因为是多主,所以不存在Slave lag(延迟)
  • 不存在丢失交易的情况
  • 同时具有读和写的扩展能力
  • 更小的客户端延迟
  • 节点间数据是同步的,而Master/Slave模式是异步的,不同slave上的binlog可能是不同的

实现技术:

Galera集群的复制功能基于Galera library实现,为了让MySQL与Galera library通讯,特别针对MySQL开发了wsrep API。

      

实践操作:负载均衡集群搭建

  

 

1 .下载mariadb集群

 wget

 

2. 添加mariadb用户和组

  groupadd mariadb

  useradd -g mariadb mariadb

3. 将下载的文件拷贝到目录/usr/src下

4. 解压并拷贝解压后的文件到/usr/local/mysql下

   root@ubuntu:/usr/src# tar -zxvf mariadb-galera-10.0.17-linux-x86_64.tar.gz

   root@ubuntu:/usr/local# cp -R mariadb-galera-10.0.17-linux-x86_64 /usr/local/mysql

5. 修改文件夹的所属用户和组

   root@ubuntu:/usr/local# chown -R mariadb:mariadb mysql/

6. 安装mariadb字典数据库,确保数据库安装成功

  mariadb@ubuntu:/usr/local/mysql$ ./scripts/mysql_install_db

  在数据库中创建一个专门用来在各节点间进行复制的节点

7. 配置集群中节点1的启动参数文件,my1.cnf

   主要在[mysqld]选项下面,加入如下配置:

   log-bin=mysql-bin

binlog_format = ROW

server-id       = 1

innodb_autoinc_lock_mode = 2

wsrep_provider = /usr/local/mysql/lib/libgalera_smm.so

wsrep_cluster_name = "my_mariadb_cluster"

wsrep_cluster_address="gcomm://"

wsrep_node_name = "cluster_node1"

wsrep_node_address = 127.0.0.1:4406

启动节点1:

./bin/mysqld --defaults-file=my1.cnf --wsrep-new-cluster

 

8. 配置集群中节点2的启动参数文件,my2.cnf

   主要在[mysqld]选项下面,加入如下配置:

log-bin=mysql-bin

binlog_format = ROW

datadir = /usr/local/mysql/data1

server-id   = 2

innodb_autoinc_lock_mode = 2

wsrep_provider = /usr/local/mysql/lib/libgalera_smm.so

wsrep_cluster_name = "my_mariadb_cluster"

wsrep_cluster_address="gcomm://127.0.0.1:4406"

wsrep_node_name = "cluster_node2"

wsrep_node_address = 127.0.0.1:4407

 

9. 配置集群中节点3的启动参数文件,my3.cnf

   主要在[mysqld]选项下面,加入如下配置: 

    log-bin=mysql-bin

binlog_format = ROW

datadir = /usr/local/mysql/data2

server-id  = 3

innodb_autoinc_lock_mode = 2

wsrep_provider = /usr/local/mysql/lib/libgalera_smm.so

wsrep_cluster_name = "my_mariadb_cluster"

wsrep_cluster_address="gcomm://127.0.0.1:4407"

wsrep_node_name = "cluster_node3"

wsrep_node_address = 127.0.0.1:4408

 

10. 检查并测试集群是否启动成功

观察命令show status like 'wsrep%'; 的输出信息,看是否有3个节点。

连接到集群中的任何一个节点:

./bin/mysql --host 127.0.0.1 --port 3307 -umycluster -p123456

在test数据库下创建一个表goods

create table goods (id int(11) not null, name varchar(20));

插入一条记录:

insert into goods(id,name) value(1,'iphone7');

然后登录到另外一个节点检查刚才创建的表和记录是否存在:

./bin/mysql --host 127.0.0.1 --port 3306 -umycluster -p12345

MariaDB [test]> select * from goods;

+----+---------+

| id | name    |

+----+---------+

|  1 | iphone7 |

+----+---------+

我们看到记录已经存在,再次证明集群已经搭配好。

 

11.配置haproxy

 下载:wget

 编译:make TARGET=linux26 PREFIX=/usr/local/haproxy

 安装:make install PREFIX=/usr/local/haproxy

在/usr/local/haproxy下添加配置文件haproxy.cfg

    修改配置文件内容如下:

global

        log            127.0.0.1        local0

        log            127.0.0.1        local1 notice

        #log loghost    local0 info

        maxconn         4096

        user            haproxy      #所属运行的用户

        group           haproxy      #所属运行的组

        nbproc          1

        pidfile         /usr/local/haproxy/haproxy1.pid

        #debug

        #quiet

 

defaults

        log            global

        option         tcplog

        option         dontlognull

        retries         3

        option          redispatch

        maxconn         4096

        timeout         connect  50000ms

        timeout         client   50000ms

        timeout         server   50000ms

 

listen  mariadb-galera

        bind 127.0.0.1:3399  #客户端监听端口

        mode tcp

        balance  leastconn  #最少连接的负载均衡算法

        server   db1  127.0.0.1:3306 check

        server   db1  127.0.0.1:3307 check

        server   db1  127.0.0.1:3308 check

 

启动haproxy:

./sbin/haproxy -f haproxy.cfg

 

根据最少连接的负载均衡算法,haproxy将读写请求重定向到最少连接的数据库服务器上。

检查haproxy是否配置正确:

 

先连接上: mariadb@ubuntu:/usr/local/mysql$ ./bin/mysql --host 127.0.0.1 --port 3399 -umycluster -p123456 #注意连接端口为3399,是haproxy服务器的监听端口

 

插入一条记录试试:insert into goods(id,name) value (2,'lumia');

Query OK, 1 row affected (0.19 sec)

成功,说明haproxy配置ok

转载于:https://www.cnblogs.com/guoyuanwei/p/4509475.html

你可能感兴趣的文章
多租户
查看>>
IIS下安装Joomla的注意事项
查看>>
转帖 使用eclipse创建之前没有创建的web.xml
查看>>
前端开发之JavaScript
查看>>
intellij idea 如何更改比编辑器文本字体和大小
查看>>
Unity3D脚本中文系列教程(一)
查看>>
Java50道经典习题-程序25 根据输入求输出
查看>>
加载静态文件,父模板的继承和扩展
查看>>
Watto and Mechanism CodeForces - 514C (字典树,哈希)
查看>>
js里面“===”与“==”的区别
查看>>
关于开发ActiveX 控件的安装问题
查看>>
2019春第六周作业
查看>>
elasticsearch单机与服务器环境搭建
查看>>
tab 被字面的意思迷惑了,DBA_TAB_PRIVS
查看>>
Oracle数据库中分区表的操作方法
查看>>
Set和HashSet LinkedHashSet
查看>>
Django:评论文章后局部刷新评论区
查看>>
0.数据结构学习笔记大纲
查看>>
Springboot下事务管理的简单使用
查看>>
当css样式表遇到层
查看>>