MySQL 集群

摘要:
MySQL Galera引入了主要功能:同步复制真正的多主机,即所有节点都可以同时读写数据库。自动节点成员控制,并自动清除无效节点。新节点加入数据自动复制。真正的并行复制。行级用户可以直接连接到集群。使用体验与MySQL的优势完全一致:因为它是多主机,因此,没有Slavelag(延迟),没有事务丢失,客户端的读写可扩展性较差,延迟节点之间的数据是同步的,而主/从模式是
MySQL Galera介绍

主要功能:

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

优势:

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

 

环境

 IP 地址         主机名         描述
10.0.0.10       node1       第一个启动
10.0.0.11       node2
10.0.0.12       node3

版本信息

[root@node1 ~]#  cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core) 
[root@node1 ~]# uname -a
Linux node2 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

修改主机名

 [root@localhost ~]# hostnamectl set-hostname node1

关闭防火墙和SElinux

[root@node1 ~]# systemctl stop firewalld.service
[root@node1 ~]# setenforce 0

清除原有Mysql

[root@node1 ~]# yum erase mysql mysql-devel mysql-libs -y
[root@node1 ~]# rpm -qa |grep mysql

组件下载地址

http://releases.galeracluster.com/mysql-wsrep-5.6/centos/7/x86_64/
http://releases.galeracluster.com/galera-3/centos/7/x86_64/

安装组件(yum 安装,依次安装了,如果失败,等其他安装包安装好以后,重新安装一遍)

[root@node1 ~]# yum install -y http://releases.galeracluster.com/mysql-wsrep-5.6/centos/7/x86_64/mysql-wsrep-client-5.6-5.6.38-25.21.el7.x86_64.rpm
[root@node1 ~]# yum install -y http://releases.galeracluster.com/mysql-wsrep-5.6/centos/7/x86_64/mysql-wsrep-devel-5.6-5.6.38-25.21.el7.x86_64.rpm
[root@node1 ~]# yum install -y http://releases.galeracluster.com/mysql-wsrep-5.6/centos/7/x86_64/mysql-wsrep-shared-5.6-5.6.38-25.21.el7.x86_64.rpm
[root@node1 ~]# yum install -y http://releases.galeracluster.com/mysql-wsrep-5.6/centos/7/x86_64/mysql-wsrep-test-5.6-5.6.38-25.21.el7.x86_64.rpm
[root@node1 ~]# yum install -y http://releases.galeracluster.com/galera-3/centos/7/x86_64/galera-3-25.3.22-2.el7.x86_64.rpm
[root@node1 ~]# yum install -y http://releases.galeracluster.com/mysql-wsrep-5.6/centos/7/x86_64/mysql-wsrep-server-5.6-5.6.38-25.21.el7.x86_64.rpm

启动 mysql 并添加用户名、密码和对应数据库的用户名、密码权限

[root@node1 ~]# service mysql start --skip-grant-tables
[root@node1 ~]# mysql
 mysql> use mysql;
 mysql> update user set password=PASSWORD("123456") where USER="root";
 mysql> quit

重启mysql服务,使用创建的用户名和密码登录.再次进入的时候回提示你设置密码

[root@node1 ~]# service mysql restart
[root@node1 ~]# mysql -uroot -p
mysql> SET PASSWORD=PASSWORD("123456");

创建同步账号并授权

mysql> grant all on *.* to 'wsrep'@'%' identified by 'nx111111';
mysql> quit

设置Mysql为开机启动

[root@node1 ~]# chkconfig mysql on

去掉Postfix,这个可能跟MySQL配置有冲突

[root@node1 ~]# yum remove postfix -y

关闭Mysql

[root@node1 ~]# service mysql stop

配置文件

[root@node1 ~]# vim /etc/my.cnf 
!includedir /etc/my.cnf.d/   # 添加此行

拷贝swrep.conf 文件到/etc/my.cnf.d/下

[root@node1 ~]# cp -r /usr/share/doc/mysql-wsrep-server-5.6-5.6.38/wsrep.cnf /etc/my.cnf.d/

将以下配置替原有配置

MySQL 集群第1张MySQL 集群第2张
vim /etc/my.cnf.d/wsrep.cnf

[mysqld]
server_id = 10    # 每个节点都不一样,分别是 10、11、12
default_storage_engine = InnoDB
datadir =/var/lib/mysql/
binlog_format = ROW
log-bin = mysql-bin
log-slave-updates = 1              
innodb_autoinc_lock_mode = 2
lower_case_table_names = 1   # 修改这个配置必须重启
log_bin_trust_function_creators = 1

wsrep_provider = /usr/lib64/galera-3/libgalera_smm.so
wsrep_sst_auth = wsrep:nx111111
wsrep_sst_method = xtrabackup
wsrep_cluster_name = 'nx_wsrep'  # 集群名,一定要一致。
wsrep_node_name = node1  #本节点主机名
wsrep_cluster_address = gcomm://10.0.0.11,10.0.0.12  # 其它节点 IP
wsrep_node_address = 10.0.0.10  # 本节点 IP
wsrep_sst_donor=node2,node3,  # 其它节点的名称
wsrep_sst_method = rsync
wsrep_slave_threads=8

innodb_buffer_pool_size=10737418240
innodb_log_file_size=134217728
innodb_flush_log_at_trx_commit=2

#innodb_buffer_pool_dump_at_shutdown=1
#innodb_buffer_pool_load_at_startup=1
#innodb_log_file_buffer_size=16777216
skip-name-resolve

[client]
user = wsrep
password = nx111111
View Code

启动 mysql-wsrep

集群中的第一个节点,以空地址启动

[root@node1 ~]# mysqld_safe --wsrep_cluster_address=gcomm:// >/dev/null &

其它节点,启动方式

[root@node1 ~]# mysqld_safe > /dev/null &

更新数据库

[root@node1 ~]# mysql_upgrade

增加数据库的安全性

[root@node1 ~]# mysql_secure_installation
查看集群状态

查看集群配置

mysql> show status like "wsrep%";

确认MySQL的3306端口和wsrep的4567端口处于监听状态

[root@node3 ~]# netstat -tulpn | grep -e 4567 -e 3306
tcp        0      0 0.0.0.0:4567            0.0.0.0:*               LISTEN      5036/mysqld         
tcp6       0      0 :::3306                 :::*                    LISTEN      5036/mysqld

集群功能是否开启

mysql> show status like 'wsrep_ready'; 
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wsrep_ready   | ON    |
+---------------+-------+
1 row in set (0.00 sec)

集群ID号

mysql> SHOW  GLOBAL  STATUS  LIKE  'wsrep_cluster_state_uuid' ;
+--------------------------+--------------------------------------+
| Variable_name            | Value                                |
+--------------------------+--------------------------------------+
| wsrep_cluster_state_uuid | 176a8d84-e0ba-11e7-9e7b-d7b3a39130ff |
+--------------------------+--------------------------------------+
1 row in set (0.00 sec)

集群中的节点数量

mysql> SHOW  GLOBAL  STATUS  LIKE  'wsrep_cluster_size' ;
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+
1 row in set (0.00 sec)

集群(其他)节点地址

mysql> show variables like 'wsrep_cluster_address';
+-----------------------+----------+
| Variable_name         | Value    |
+-----------------------+----------+
| wsrep_cluster_address | gcomm:// |
+-----------------------+----------+
1 row in set (0.00 sec)

 

参考

http://blog.csdn.net/yangchuan_csdn91/article/details/52689981?locationNum=2

免责声明:文章转载自《MySQL 集群》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何实现QQ附件在线预览功能使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mysql----浅入浅出之视图、存储过程、触发器

一、视图 VIEW 视图是虚拟的表,本身不存储不论什么数据。仅仅有执行时,才包括动态检索出来的数据。 eg:SELECT sid, name, sex, s_num FROM  student, school WHERE sid = 2 AND student.sid = scholl.sid ; 这个简单的查询涉及到两个表。 所以不论什么须要这个数据的...

Mysql常见报错解决方法

一:登录报错 ERROR 1045 (28000): Access denied for user 'mysql'@'localhost' (using password: NO) mysql日志文件总结此问题的整体步骤如下: 第一步:修改pid路径 查看日志文件中错误信息: cat /var/log/mysqld.log 2013-10-26 16:39...

MySQL创建表

1.不控制主键的起点 -- 1.不控制主键的起点 create table emb_t_dictBusType ( emb_c_busTypeID int unsigned primary key not null auto_increment, emb_c_busTypeEnName varchar(255) not null,...

centos7.6下定时监测MySQL进程终止后自动重启的方法

前言 最近发现MySQL服务隔三差五就会挂掉,导致我的网站和爬虫都无法正常运作。自己的网站是基于MySQL,在做爬虫存取一些资料的时候也是基于MySQL,数据量一大了,MySQL它就有点受不了了,时不时会崩掉,虽然我自己有网站监控和邮件通知,但是好多时候还是需要我来手动连接我的服务器重新启动一下我的MySQL,这样简直太不友好了,所以,我就觉定自己写个脚本...

10种 分布式ID生成方式(新增MongoDB的ObjectId)

一、为什么要用分布式ID? 在说分布式ID的具体实现之前,我们来简单分析一下为什么用分布式ID?分布式ID应该满足哪些特征? 1、什么是分布式ID? 拿MySQL数据库举个栗子: 在我们业务数据量不大的时候,单库单表完全可以支撑现有业务,数据再大一点搞个MySQL主从同步读写分离也能对付。 但随着数据日渐增长,主从同步也扛不住了,就需要对数据库进行分库分表...

MySQL快速回顾:计算字段与函数

9.1 计算字段 存储在数据库表中的数据一般不是应用程序所需要的格式。比如: 如果想要在一个字段中既显示公司名,又显示公式的地址,但这两个信息一般包含在不同的表列中。 城市、州和邮政编码存储在不同的列中,但邮件标签打印程序却需要把它们作为一个恰当格式的字段检索出来。 列数据是大小写混合的,但报表程序需要把所有数据按大写表示出来。 在上面举的例子中,存储...