MySQL多主复制-MySQL Galera安装部署
来源:互联网 发布:用mac怎么在优酷下视频 编辑:程序博客网 时间:2024/06/04 19:01
原文转自http://www.360doc.com/content/17/1124/09/50043420_706660592.shtml,只作为自己留存学习。
MySQL Galera介绍
特性简介
MySQL/Galera是MySQL/InnoDB的多主集群,有以下特性:- 同步复制- Active-active的多主拓扑结构- 集群任意节点可以读和写- 自动身份控制,失败节点自动脱离集群- 自动节点接入- 真正的基于”行”级别和ID检查的并行复制- 无单点故障,易扩展
MySQL Galera安装
安装前准备
- 机器准备 G221 : 192.168.1.221 (Centos 6.5) G222 : 192.168.1.222 (Centos 6.5) G223 : 192.168.1.223 (Centos 6.5)
- 确认安装有gcc和gcc-c++的版本为至少4.4
# yum install gcc gcc-c++
- 确认安装有boost-devel的版本至少为1.4.1
# yum install boost-devel
- 安装scons check-devel openssl-devel
# yum install scons check-devel openssl-devel
MySQL Galera安装
- 安装含wsrep Patch的MySQL 5.5.29
# yum install libaio# wget https://launchpad.net/codership-mysql/5.5/5.5.29-23.7.3/+download/mysql-5.5.29_wsrep_23.7.3-linux-x86_64.tar.gz# tar zxvf mysql-5.5.29_wsrep_23.7.3-linux-x86_64.tar.gz # # mv mysql-5.5.29_wsrep_23.7.3-linux-x86_64 /usr/local/mysql# cd /usr/local/mysql/# groupadd mysql# useradd -r -g mysql mysql# chown -R mysql:mysql .# ./scripts/mysql_install_db --no-defaults --datadir=/usr/local/mysql/data --user=mysql# chown -R root .# chown -R mysql data
- 安装Galera复制插件
# wget https://launchpad.net/galera/2.x/23.2.4/+download/galera-23.2.4-src.tar.gz# tar zxvf galera-23.2.4-src.tar.gz# cd galera-23.2.4-src# scons# cp garb/garbd /usr/local/mysql/bin/# cp libgalera_smm.so /usr/local/mysql/lib/plugin/
- 安装含wsrep Patch的MySQL 5.5.29
MySQL Galera配置
- MySQL Galera配置例子:
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql# mkdir -p /var/lib/mysql# chown mysql:mysql /var/lib/mysql# vi /etc/my.cnf# cat /etc/my.cnf
[client]port = 3306socket = /var/lib/mysql/mysql.sock[mysqld_safe]log-error = /var/lib/mysql/mysql.logpid-file = /var/lib/mysql/mysql.pid[mysqld]wsrep_node_name = node1wsrep_provider = /usr/local/mysql/lib/plugin/libgalera_smm.so#wsrep_provider_options ='gcache.size=1G;socket.ssl_key=my_key;socket.ssl_cert=my_cert'#wsrep_slave_threads=16wsrep_sst_method = rsync#wsrep_sst_auth=root:port = 3306socket = /var/lib/mysql/mysql.sockuser = mysqlbasedir = /usr/local/mysqldatadir = /usr/local/mysql/datadefault_storage_engine=InnoDB#innodb_buffer_pool_size=1G#innodb_log_file_size=256Minnodb_autoinc_lock_mode=2innodb_locks_unsafe_for_binlog=1innodb_flush_log_at_trx_commit=0innodb_doublewrite=0innodb_file_per_table=1binlog_format=ROWlog-bin=mysql-binserver-id=101relay-log=mysql-relay-bin#read_only=1log-slave-updates=1
- MySQL Galera配置例子:
MySQL Galera启动与关闭
- 初次启动:
[root@G221 ~]# /usr/local/mysql/bin/mysqld_safe --wsrep_cluster_address=gcomm:// >/dev/null &
或
[root@G221 ~]# service mysql start --wsrep_cluster_address=gcomm://
查看mysqld监听的端口:
[root@G221 ~]# netstat -plantu | grep mysqldtcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 3656/mysqld tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 3656/mysqld
注:
1)”gcomm://”是特殊的地址,仅仅是galera cluster初始化启动时候使用,再次启动的时候需要使用具体的IP地址.
2) 端口4567是wsrep使用的默认端口.该端口的防火墙设置规则应该和3306的一样. - 关闭:
[root@G221 ~]# /usr/local/mysql/bin/mysqladmin -uroot -p shutdown
- 初次启动:
MySQL Galera新节点
添加新节点
- 节点接入
添加新节点的时候,新接入的节点叫Joiner,给joiner提供复制的节点叫Donor.新的节点接入需要:
1) 安装带wsrep patch的MySQL版本
2) 安装Galera复制插件
3) 配置好新节点的MySQL(参考Donnor的my.cnf)
4) 配置或启动的gcomm://的地址是需要使用donnor的IP.接入节点G222:
[root@G222 data]# /usr/local/mysql/bin/mysqld_safe --wsrep_cluster_address="gcomm://192.168.1.221:4567,192.168.1.223:4567" >/dev/null &
接入节点G223:
[root@G223 data]# service mysql start --wsrep_cluster_address="gcomm://192.168.1.221:4567,192.168.1.222:4567"
- 修改节点的wsrep_cluster_address修改wsrep_cluster_address有两种方式:1)使用新的wsrep_cluster_address重启节点:
[root@G221 data]# service mysql restart --wsrep_cluster_address="gcomm://192.168.1.222:4567,192.168.1.223:4567"Shutting down MySQL.... SUCCESS! Starting MySQL....... SUCCESS!
2)直接修改MySQL全局变量
mysql> SHOW VARIABLES LIKE 'wsrep_cluster_address';+-----------------------+----------------------------+| Variable_name | Value |+-----------------------+----------------------------+| wsrep_cluster_address | gcomm://192.168.1.222:4567 |+-----------------------+----------------------------+1 row in set (0.00 sec)mysql> set global wsrep_cluster_address="gcomm://192.168.1.222:4567,192.168.1.223:4567";Query OK, 0 rows affected (2.20 sec)mysql> SHOW VARIABLES LIKE 'wsrep_cluster_address';+-----------------------+-------------------------------------------------------+| Variable_name | Value |+-----------------------+-------------------------------------------------------+| wsrep_cluster_address | gcomm://192.168.1.222:4567,192.168.1.223:4567 |+-----------------------+-------------------------------------------------------+1 row in set (0.00 sec)
MySQL Galera监控
查看相关变量
查看MySQL版本:
mysql> SHOW GLOBAL VARIABLES LIKE 'version';+---------------+------------+| Variable_name | Value |+---------------+------------+| version | 5.5.29-log |+---------------+------------+1 row in set (0.00 sec)
查看wsrep版本:
mysql> SHOW GLOBAL STATUS LIKE 'wsrep_provider_version';+------------------------+------------+| Variable_name | Value |+------------------------+------------+| wsrep_provider_version | 2.4(rXXXX) |+------------------------+------------+1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'wsrep_cluster_address';+-----------------------+-------------------------------------------------------+| Variable_name | Value |+-----------------------+-------------------------------------------------------+| wsrep_cluster_address | gcomm://192.168.1.222:4567,192.168.1.223:4567 |+-----------------------+-------------------------------------------------------+1 row in set (0.00 sec)
查看Galera集群状态:
mysql> show status like 'wsrep%';+----------------------------+----------------------------------------------------------+| Variable_name | Value |+----------------------------+----------------------------------------------------------+| wsrep_local_state_uuid | 80cdd13d-8cf2-11e2-0800-e0817023b754 || wsrep_protocol_version | 4 || wsrep_last_committed | 3 || wsrep_replicated | 3 || wsrep_replicated_bytes | 522 || wsrep_received | 6 || wsrep_received_bytes | 1134 || wsrep_local_commits | 1 || wsrep_local_cert_failures | 0 || wsrep_local_bf_aborts | 0 || wsrep_local_replays | 0 || wsrep_local_send_queue | 0 || wsrep_local_send_queue_avg | 0.000000 || wsrep_local_recv_queue | 0 || wsrep_local_recv_queue_avg | 0.000000 || wsrep_flow_control_paused | 0.000000 || wsrep_flow_control_sent | 0 || wsrep_flow_control_recv | 0 || wsrep_cert_deps_distance | 1.000000 || wsrep_apply_oooe | 0.000000 || wsrep_apply_oool | 0.000000 || wsrep_apply_window | 1.000000 || wsrep_commit_oooe | 0.000000 || wsrep_commit_oool | 0.000000 || wsrep_commit_window | 1.000000 || wsrep_local_state | 4 || wsrep_local_state_comment | Synced || wsrep_cert_index_size | 5 || wsrep_causal_reads | 0 || wsrep_incoming_addresses | 192.168.1.221:3306,192.168.1.222:3306,192.168.1.223:3306 || wsrep_cluster_conf_id | 13 || wsrep_cluster_size | 3 || wsrep_cluster_state_uuid | 80cdd13d-8cf2-11e2-0800-e0817023b754 || wsrep_cluster_status | Primary || wsrep_connected | ON || wsrep_local_index | 0 || wsrep_provider_name | Galera || wsrep_provider_vendor | Codership Oy <info@codership.com> || wsrep_provider_version | 2.4(rXXXX) || wsrep_ready | ON |+----------------------------+----------------------------------------------------------+40 rows in set (0.00 sec)
监控状态说明
- 集群完整性检查:
- wsrep_cluster_state_uuid:在集群所有节点的值应该是相同的,有不同值的节点,说明其没有连接入集群.
- wsrep_cluster_conf_id:正常情况下所有节点上该值是一样的.如果值不同,说明该节点被临时”分区”了.当节点之间网络连接恢复的时候应该会恢复一样的值.
- wsrep_cluster_size:如果这个值跟预期的节点数一致,则所有的集群节点已经连接.
- wsrep_cluster_status:集群组成的状态.如果不为”Primary”,说明出现”分区”或是”split-brain”状况.
- 节点状态检查:
- wsrep_ready: 该值为ON,则说明可以接受SQL负载.如果为Off,则需要检查wsrep_connected.
- wsrep_connected: 如果该值为Off,且wsrep_ready的值也为Off,则说明该节点没有连接到集群.(可能是wsrep_cluster_address或wsrep_cluster_name等配置错造成的.具体错误需要查看错误日志)
- wsrep_local_state_comment:如果wsrep_connected为On,但wsrep_ready为OFF,则可以从该项查看原因.
- 复制健康检查:
- wsrep_flow_control_paused:表示复制停止了多长时间.即表明集群因为Slave延迟而慢的程度.值为0~1,越靠近0越好,值为1表示复制完全停止.可优化wsrep_slave_threads的值来改善.
- wsrep_cert_deps_distance:有多少事务可以并行应用处理.wsrep_slave_threads设置的值不应该高出该值太多.
- wsrep_flow_control_sent:表示该节点已经停止复制了多少次.
- wsrep_local_recv_queue_avg:表示slave事务队列的平均长度.slave瓶颈的预兆.
最慢的节点的wsrep_flow_control_sent和wsrep_local_recv_queue_avg这两个值最高.这两个值较低的话,相对更好.
- 检测慢网络问题:
- wsrep_local_send_queue_avg:网络瓶颈的预兆.如果这个值比较高的话,可能存在网络瓶
- 冲突或死锁的数目:
- wsrep_last_committed:最后提交的事务数目
- wsrep_local_cert_failures和wsrep_local_bf_aborts:回滚,检测到的冲突数
- 集群完整性检查:
MySQL Galera其它特性
Galera arbitrator
garbd可以做为一个无数据的Galera节点运行,该节点可以用一种优化的方式帮助检测和处理网络分裂(network splits).
一个好的garbd节点可以防止”split-brain”状况发生.SSL支持
Galera支持SSL通讯,这对增加数据安全性很重要(特别是云部署).可以通过参数socket.ssl_cert和socket.ssl_key来定义.
SST方式选择
SST允许新接入的节点使用定制的方法来获取最初的数据.SST方式有mysqldump(默认,比较慢),rsync,和xtrabackup(很快).
可通过wsrep_sst_method来定义.Production环境中建议使用rsync或是xtrabackup方式.
- MySQL多主复制-MySQL Galera安装部署
- MariaDB Galera Cluster 部署(mysql 集群部署)
- MySQL galera 的安装使用
- MySQL/Galera
- Ubuntu14.04安装Mysql Galera Cluster
- 基于Galera 的高可靠解决方案---从galera集群复制到单独MySQL节点
- Galera/mysql 集群 备忘
- Galera/mysql 集群
- MySQL Galera集群搭建
- Galera replication for MySQL
- MySQL(11)- Galera 多主多活
- Galera Cluster for MySQL
- mysql主从复制部署
- mysql 主从复制部署
- mysql主从复制部署
- Mysql集群HA方案Galera的安装配置
- MySQL galera 安装过程遇到的问题及解决方案
- mysql galera 集群常见问题处理
- Xcode主工程建立多个子工程结合联编开发SDK
- 关于array.prototype.slice.call
- interface use spring bean 方案
- ASM磁盘组的相关操作
- word中MathType使用出现Mathpage.wll未找到解决方案
- MySQL多主复制-MySQL Galera安装部署
- fedora27 Bcm4322
- Hadoop运行MR程序报错
- 时间就是金钱
- Unix 目录结构是怎么由来的?
- Mysql decode()函数的实现
- url编码实践
- 微信小程序canvas绘制图形基础
- 运维是否有前(钱)途?