CentOS 6下安装部署Galera Cluster for MySQL集群

时间:2015-02-09 01:22来源:webmaster.me 作者:webmaster.me 举报 点击:

Galera Cluster for MySQL是一套基于同步复制的多主MySQL集群解决方案,使用简单,没有单点故障,可用性高,能很好保证业务不断增长时我们数据的安全和随时的扩展,主要特点:

同步复制
多主服务器的拓扑结构
可以在任意节点上进行读写
自动剔除故障节点
自动加入新节点
真正行级别的并发复制
客户端连接跟操作单台MySQL数据库的体验一致

Galera本质是一个wsrep提供者(provider),运行依赖于wsrep的API接口。Wsrep API定义了一系列应用回调和复制调用库,来实现事务数据库同步写集(writeset)复制以及相似应用。目的在于从应用细节上实现抽象的,隔离的复制。虽然这个接口的主要目标是基于认证的多主复制,但同样适用于异步和同步的主从复制。
galera_replication

使用前十项注意

1、使用Galera必须要给MySQL-Server打wsrep补丁。可以直接使用官方提供的已经打好补丁的MySQL安装包,如果服务器上已经安装了标准版MYSQL,需要先卸载再重新安装。卸载前注意备份数据。
2、MySQL/Galera集群只支持InnoDB存储引擎。如果你的数据表使用的MyISAM,需要转换为InnoDB,否则记录不会在多台复制。可以在备份老数据时,为mysqldump命令添加–skip-create-options参数,这样会去掉表结构的声明信息,再导入集群时自动使用InnoDB引擎。不过这样会将AUTO_INCREMENT一并去掉,已有AUTO_INCREMENT列的表,必须在导入后重新定义。
3、MySQL 5.5及以下的InnoDB引擎不支持全文索引(FULLTEXT indexes),如果之前使用MyISAM并建了全文索引字段的话,只能安装MySQL 5.6 with wsrep patch。
4、所有数据表必须要有主键(PRIMARY),如果没有主键可以建一条AUTO_INCREMENT列。
5、MySQL/Galera集群不支持下面的查询:LOCK/UNLOCK TABLES,不支持下面的系统变量:character_set_server、utf16、utf32及ucs2。
6、数据库日志不支持保存到表,只能输出到文件(log_output = FILE),不能设置binlog-do-db、binlog-ignore-db。
7、跟其他集群一样,为了避免节点出现脑裂而破坏数据,建议Galera集群最低添加3个节点。
8、在高并发的情况下,多主同时写入时可能会发生事务冲突,此时只有一个事务请求会成功,其他的全部失败。可以在写入/更新失败时,自动重试一次,再返回结果。
9、节点中每个节点的地位是平等的,没有主次,向任何一个节点读写效果都是一样的。实际可以配合VIP/LVS或HA使用,实现高可用性。
10、如果集群中的机器全部重启,如机房断电,第一台启动的服务器必须以空地址启动:mysqld_safe –wsrep_cluster_address=gcomm:// >/dev/null &

典型的Galera集群场景
mm_to_galera_8

安装MySQL with wsrep patch

  1. #先安装依赖库
  2. yum install libaio gcc gcc-c++ boost-devel scons check-devel openssl-devel
  3. ln -sf /usr/lib64/libssl.so.10 /usr/lib64/libssl.so.6
  4. ln -sf /usr/lib64/libcrypto.so.10 /usr/lib64/libcrypto.so.6
  5. #下载MySQL with wsrep源码包,目前最新版本是5.5.34-25.9
  6. wget https://launchpad.net/codership-mysql/5.5/5.5.34-25.9/+download/mysql-5.5.34_wsrep_25.9-linux-x86_64.tar.gz
  7. tar zxvf mysql-5.5*
  8. mv mysql-5.5.34_wsrep_25.9-linux-x86_64 /usr/local/mysql
  9. cd /usr/local/mysql/
  10. groupadd mysql
  11. useradd -r -g mysql mysql
  12. chown -R mysql:mysql .
  13. ./scripts/mysql_install_db --no-defaults --datadir=/opt/mysqldb/ --user=mysql
  14. chown -R root .
  15. chown -R mysql /opt/mysqldb/
  16. echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
  17. source /etc/profile
  18. mysqld_safe --wsrep_cluster_address=gcomm:// >/dev/null &

mysql1 安装Xtrabackup

  1. yum install perl-DBD-MySQL perl-Time-HiRes nc
  2. wget http://www.percona.com/redir/downloads/XtraBackup/LATEST/RPM/rhel6/x86_64/percona-xtrabackup-2.1.9-744.rhel6.x86_64.rpm
  3. rpm -ivh percona-xtrabackup-2.1.9-744.rhel6.x86_64.rpm

安装Galera复制插件

  1. cd ~
  2. wget https://launchpad.net/galera/3.x/25.3.5/+download/galera-25.3.5-src.tar.gz
  3. tar zxvf galera-*
  4. cd galera-*
  5. scons
  6. cp garb/garbd /usr/local/mysql/bin/
  7. cp libgalera_smm.so /usr/local/mysql/lib/plugin/

初始化配置

  1. mkdir -p /var/lib/mysql
  2. mkdir -p /etc/mysql/conf.d/
  3. chown mysql:mysql /var/lib/mysql
  4. cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
  5. /usr/local/mysql/bin/mysqld_safe --wsrep_cluster_address=gcomm:// >/dev/null &
  6. #创建用于同步的帐号,注意替换掉示例值。
  7. mysql -e "SET wsrep_on=OFF; GRANT ALL ON *.* TO tvmining@'%' IDENTIFIED BY 'webmaster.me'";
  8. #修改root帐号密码,注意替换掉示例值。
  9. mysql -e "SET wsrep_on=OFF;GRANT ALL PRIVILEGES ON * . * TO 'root'@'localhost' IDENTIFIED BY 'webmaster.me' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; "
  10. #关闭MySQL
  11. mysqladmin -uroot -p shutdown

配置节点 galera的配置都在my.cnf和其包含目录下,可以自己根据需要设置,也可以下载我配置好的cnf:

  1. wget http://my.downsoft.cn/linux/mysql/galera/my.cnf -o /etc/my.cnf
  2. wget http://my.downsoft.cn/linux/mysql/galera/wsrep.cnf -o /etc/mysql/conf.d/wsrep.cnf

配置第一个节点的/etc/mysql/conf.d/wsrep.cnf:

  1. #MySQL服务器的ID,必须是唯一的
  2. server-id=101
  3. #galera集群的名字,必须是统一的
  4. wsrep_cluster_name='tvm_galera_cluster'
  5. #wsrep节点的ID,必须是唯一的
  6. wsrep_node_name = node1
  7. #集群中的其他节点地址,可以使用主机名或IP
  8. wsrep_cluster_address=gcomm://mysqlnode2,mysqlnode3
  9. #本机节点地址,可以使用主机名或IP
  10. wsrep_node_address='mysqlnode1'
  11. #一个逗号分割的节点串作为状态转移源,比如wsrep_sst_donor=node5,node3, 如果node5可用,用node5,不可用用node3,如果node3不可用,最后的逗号表明让提供商自己选择一个最优的。
  12. wsrep_sst_donor='node3,'
  13. #线程数量。参考设置:1.CPU内核数*2以上;2.其它写节点连接总数的1/4.
  14. wsrep_slave_threads=16
  15. #xtrabackup使用的用户名密码
  16. wsrep_sst_auth=tvmining:webmaster.me

其他节点,根据实际情况修改对应的ID值。 启动集群 启动第一个节点的MySQL:

  1. mysqld_safe --wsrep_cluster_address=gcomm:// >/dev/null &

启动第二个节点的MySQL:

  1. mysqld_safe >/dev/null &

依次类推启动其他节点。

通过查看4567 端口确认集群是否启动:

  1. netstat -plantu | grep mysqld

查询 galera 插件是否已启用:

  1. mysql -e "SHOW status LIKE 'wsrep_ready'" -p
  2. mysql -e "SHOW VARIABLES LIKE 'wsrep_cluster_address'" -p

常见错误

  1. 140530 0:09:18 [Note] WSREP: Running: 'wsrep_sst_xtrabackup --role 'joiner' --address 'mysqlnode2' --auth 'ssttvm:tvmining@123' --datadir '/opt/mysqldb/' --defaults-file '/etc/my.cnf' --parent '21812''
  2. 140530 0:09:18 [ERROR] WSREP: Failed to read 'ready ' from: wsrep_sst_xtrabackup --role 'joiner' --address 'mysqlnode2' --auth 'ssttvm:tvmining@123' --datadir '/opt/mysqldb/' --defaults-file '/etc/my.cnf' --parent '21812'
  3. Read: 'Can't find innobackupex in the path'
  4. 140530 0:09:18 [ERROR] WSREP: Process completed with error: wsrep_sst_xtrabackup --role 'joiner' --address 'mysqlnode2' --auth 'ssttvm:tvmining@123' --datadir '/opt/mysqldb/' --defaults-file '/etc/my.cnf' --parent '21812': 22 (Invalid argument)
  5. 140530 0:09:18 [ERROR] WSREP: Failed to prepare for 'xtrabackup' SST. Unrecoverable.
  6. 140530 0:09:18 [ERROR] Aborting
  7. 该提示为未安装Xtrabackup。

转载自www.webmaster.me

 

------分隔线----------------------------
发表评论
为了和诣的生活,我关闭了评论页面,请大家到QQ群里交流吧:348944156,也欢迎关注本站微信公众号:centoscn