一、介绍

  传统架构的使用,一直被人们所诟病,因为MySQL的主从模式,天生的不能完全保证数据一致,很多大公司会花很大人力物力去解决这个问题,而效果却一般,可以说,只能是通过牺牲性能,来获得数据一致性,但也只是在降低数据不一致性的可能性而已。所以现在就急需一种新型架构,从根本上解决这样的问题,天生的摆脱掉主从复制模式这样的“美中不足”之处了。

  Galera Cluster :集成了Galera插件的MySQL集群,是一种新型的,数据不共享的,高度冗余的高可用方案,多节点都可以作为主节点,节点是对等的,当有客户端要写入或者读取数据时,随便连接哪个实例都是一样的,读到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其它节点上面,这种架构不共享任何数据,是一种高冗余架构。相比传统架构,Galera Cluster解决的最核心问题是,在三个实例(节点)之间,它们的关系是对等的,multi-master架构的,在多节点同时写入的时候,能够保证整个集群数据的一致性,完整性与正确性。

  本博客的部署始于本人openstack中 mysql 多主集群部署的一个小功能。第一次接触,记录下自己的心路历程。排除了很多坑点,记录下应该注意到的细节。

二、环境介绍

  1、系统:

    CentOS Linux release 7.4.1708 (Core)

  2、节点(3台):

    openstack1:10.6.32.51  

    openstack2:10.6.32.52  

    openstack3:10.6.32.53

  3、关闭 firewall 、selinux

  4、设置时间同步:chrony

  5、部署工具安装(可选):

    #   yum -y install bash-completion.noarch bash-completion-extras.noarch vim net-tools 

  6、查看和卸载 系统原有的 mariadb、mysql (必须卸载,否则后期会有问题):

    #  rpm -qa | grep maria

    #  rpm -qa | grep mysql

    #  yum remove mariiadb

    #  yum remove mysql

  7、更新  epel 源

    #   yum -y install epel-release

 三、mysql 5.7 Galera Cluster  部署

  1、下载 集成 galera 的mysql rpm包(所有节点)   

cd /usr/local/src
wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-5.7-5.7.21-25.14.el7.x86_64.rpm
wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-client-5.7-5.7.21-25.14.el7.x86_64.rpm
wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-common-5.7-5.7.21-25.14.el7.x86_64.rpm
wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-devel-5.7-5.7.21-25.14.el7.x86_64.rpm
wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-libs-5.7-5.7.21-25.14.el7.x86_64.rpm
wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-libs-compat-5.7-5.7.21-25.14.el7.x86_64.rpm
wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-server-5.7-5.7.21-25.14.el7.x86_64.rpm
wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-test-5.7-5.7.21-25.14.el7.x86_64.rpm

  2、安装mysql、galera(所有节点)

    # yum -y install ./mysql*.rpm

    # yum -y install galera

  3、数据库启动 (openstack1上操作)

    #   systemctl start mysqld

    #   systemctl enable mysqld

  4、添加Galera Cluster 数据同步用户(openstack1上操作)

    a、mysql 5.7 默认有密码,密码查看方式:

      #   more /var/log/mysqld.log | grep password

          A temporary password is generated for root@localhost:kqi6>roGB.lF 默认随机密码

        

    b、修改mysql root 密码及添加 数据同步用户galera:

      #  mysql -uroot -p kqi6>roGB.lF

      #  SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');

      # GRANT ALL ON  *.* TO 'galera'@'localhost' IDENTIFIED BY 'youpasswd';   (添加用户:galera,后期集群配置文件用到 )

    c、停止数据库,开始配置同步集群文件。

      # systemctl stop mysqld

  5、配合集群文件(所有节点上操作)

    # vim /etc/my.cnf      

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html [mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at % of total RAM for dedicated server, else %.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links= log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
log_timestamps = SYSTEM #设置数据库日志时间为系统时间
server-id=101 #集群节点ID,集群内唯一ID。
wsrep_cluster_name=openstack_cluster
wsrep-provider=/usr/lib64/galera/libgalera_smm.so #查看实际安装路径
wsrep_node_name = openstack_db01    #集群节点名称
wsrep_cluster_address=gcomm://10.6.32.51,10.6.32.52,10.6.32.53
wsrep_node_address=10.6.32.51
wsrep_provider_options =gmcast.listen_addr=tcp://10.6.32.51:4567
wsrep_sst_donor=openstack_db01,openstack_db02,openstack_db03
wsrep_sst_method=xtrabackup-v2 #集群数据同步方式( xtrabackup-v2或rsync 都需要安装所匹配的插件)
wsrep_sst_auth=galera:youpasswd # 之前添加的数据同步用户
slow_query_log=on max_allowed_packet = 1M
table_open_cache =
sort_buffer_size = 64K
read_buffer_size = 256K
net_buffer_length = 2K
read_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 256K
max_connections = 2000    #数据库最大连接数

    #openstack2 不同之处:

      # vim /etc/mycnf        

server-id=
wsrep_node_name = openstack_db02
wsrep_node_address=10.6.32.52
wsrep_provider_options =gmcast.listen_addr=tcp://10.6.32.52:4567

    #openstack3 不同之处:

      # vim /etc/mycnf 

server-id=
wsrep_node_name = openstack_db03
wsrep_node_address=10.6.32.53
wsrep_provider_options =gmcast.listen_addr=tcp://10.6.32.53:4567

  6、安装数据同步插件,本博客使用的是:  xtrabackup-v2(注意:xtrabackup 2.3的版本不支持,mysql 5.7 需要安装 xtrabackup 2.4)(所有节点上操作)

    #  yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

    #  yum search xtrabackup

      

    #  yum -y install percona-xtrabackup-24.x86_64      mysql 5.7 一定要安装 percona-xtrabackup-24.x86_64,否则后续的报错会让你怀疑人生。

  7、集群启动

    a、当集群中还没有节点启动时,确认所有节点上没有mysql进程,如果有请关闭。(所有节点操作)

      # ps -aux | grep mysql

      # kill -9 mysql-id

    b、启动集群中第一个节点。(openstack1 上操作)  

      #  /usr/sbin/mysqld --wsrep-new-cluster --user=root &     (当且仅当 集群中没有任何节点开启,启动第一个节点时使用)

    c、启动其他节点,逐台启动,然后查看集群状态

      # systemctl start mysqld    (集群中有节点后就可以正常启动。openstack2 和openstack3 上依次启动,启动一台查看依次集群状态)

      集群状态查看,数据库中查看:

        mysql> show status like 'wsrep_%';

      

      我们可以关注几个关键的参数:

        wsrep_connected = on链接已开启

        wsrep_local_index = 1在集群中的索引值

        wsrep_cluster_size =3集群中节点的数量 (每启动一台,如果加入到集群中,size 会+1)

        wsrep_incoming_addresses =10.6.32.51:3306,10.6.32.53:3306,10.6.32.52:3306集群中节点的访问地址

    d、重新启动第一个节点的数据库(opoenstsck1上操作)

      # kill -i mysq-id    (因为第一次为非正常启动,需要使用kill 杀掉进程来关闭mysql)

      # systemctl restart mysqld

        (如果重启失败,请查看/var/lib/mysql/mysql.sock.lock 是否存在,如果存在,删除后重新启动。)

    e、在各节点使用 数据同步用户galera登录,如果可以正常启动并登录成功。到此,Galera Cluster 已经成功部署。

四、测试

  1、在openstck1 节点上创建测试数据库test,其他节点查看是否可以看到测试库。

    mysql> create database test;

    

  2、其他节点查看:

         

    数据库实时自动同步,再次证明 Galera Cluster 集群部署成功。

  3、附加,查看数据库最大连接数

      mysql> show variables like '%max_connections%';

    

    如期,已经修改为2000,数据库最大连接太小,后期openstack 会报错:数据库连接数太小。

谢谢~~~

Centos 7 下 Mysql 5.7 Galera Cluster 集群部署的更多相关文章

  1. 【原】基于 HAproxy 1.6.3 Keeplived 在 Centos 7 中实现mysql mariadb galera cluster 集群分发读写 —— 上篇

    前言 有一段时间没有写blogs,乘着周末开始整理下haproxy + keeplived 实现 mysql mariadb galera cluster 集群访问环境的搭建工作. 本文集中讲hapr ...

  2. MariaDB Galera Cluster集群搭建

    MariaDB Galera Cluster是什么?   Galera Cluster是由第三方公司Codership所研发的一套免费开源的集群高可用方案,实现了数据零丢失,官网地址为http://g ...

  3. MySQL Cluster 集群部署

    前言 此篇博客用以介绍 MySQL Cluster 集群部署方法 一.节点规划 序号 IP地址 节点名称 1 172.16.1.201 mysql-manage 2 172.16.1.202 mysq ...

  4. centos6下redis cluster集群部署过程

    一般来说,redis主从和mysql主从目的差不多,但redis主从配置很简单,主要在从节点配置文件指定主节点ip和端口,比如:slaveof 192.168.10.10 6379,然后启动主从,主从 ...

  5. 一次galera cluster集群故障节点无法启动问题排查

    现象 环境: Server version: 10.0.25-MariaDB-wsrep MariaDB Server, wsrep_25.13.raf7f02e 配置文件: [root@node-2 ...

  6. mysql galera cluster 集群的分裂与仲裁机制

    集群的分裂 当集群由于网络原因分裂为几个单独的组时(一组可能是单节点,也可能是几个互联的节点),数据出现不一致,此时可能产生脑裂及数据不一致.这种情况 下,只有一组节点能够继续提供服务,这组节点的状态 ...

  7. 2、Redis 底层原理:Cluster 集群部署与详解

    Redis 简介 Redis 提供数据缓存服务,内部数据都存在内存中,所以访问速度非常快. 早期,Redis 单应用服务亦能满足企业的需求.之后,业务量的上升,单机的读写能力满足不了业务的需求,技术上 ...

  8. Centos6.9下RocketMQ3.4.6高可用集群部署记录(双主双从+Nameserver+Console)

    之前的文章已对RocketMQ做了详细介绍,这里就不再赘述了,下面是本人在测试和生产环境下RocketMQ3.4.6高可用集群的部署手册,在此分享下: 1) 基础环境 ip地址 主机名 角色 192. ...

  9. redis cluster集群部署

    上一篇http://www.cnblogs.com/qinyujie/p/9029153.html,主要讲解了 redis cluster 集群架构 的优势.redis cluster 和 redis ...

随机推荐

  1. 关于URI和URL的区别

    URI:统一资源标志符(Uniform Resource Identifier)URL:统一资源定位符(uniform resource location) URN = Universal Resou ...

  2. Human Interface Device (HID) Class Decoder

    http://www.usblyzer.com/usb-human-interface-device-hid-class-decoder.htm   Human Interface Device (H ...

  3. 线程池构造类 ThreadPoolExecutor 的 5 个参数

    1.corePoolSize :核心线程数 2.maxPoolSize: 最大线程数 3.keepAliveTime :闲置线程存活时间 4.unit:参数keepAliveTime的时间单位,有7种 ...

  4. binlog开启和查看

    1. 首先需要将mysql的binlog日志打开.默认是关闭的. 参考网址:Windows下Mysql5.7开启binlog步骤及注意事项(https://www.cnblogs.com/wangwu ...

  5. Seaweed-FS综合使用测试(转)

    2016-03-16 12:17:48   Seaweed-FS综合使用测试 参考信息 https://github.com/chrislusf/seaweedfs/ https://bintray. ...

  6. Rust语言学习笔记(7)

    模块 // 兄弟模块 mod network { fn connect() { } } mod client { fn connect() { } } // 父子模块 mod network { fn ...

  7. ImportError: No module named etree.ElementTree问题解决方法

    学习python操作xml文档过程中碰到的ImportError: No module named etree.ElementTree问题,问题现象比较奇怪,做个记录. 操作环境 Python3.6+ ...

  8. [Shell]Bash基本功能:输入输出重定向

    /*----------------------------------------------------------------------------------------------- @黑 ...

  9. C:\\MFC控件大小随窗体大小而改变

    一.大小和位置都改变 1.首先为窗体类添加CRect m_rect,该成员变量用来记录窗体的当前大小. 2.在类向导里面(Ctrl+W),为窗体添加消息WM_SIZE的响应函数OnSize(): 注意 ...

  10. Python unindent dese not match any out indentation level 问题

    今天写个小程序出现 “unindent dese not  match any out indentation level”. 一直没找到原因,经过仔细对比发现实际上是缩进的问题. 上下两行的缩进用的 ...