如何进行mysql的galera

44次阅读
没有评论

共计 5367 个字符,预计需要花费 14 分钟才能阅读完成。

本篇文章为大家展示了如何进行 mysql 的 galera_cluster 安装配置,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

本次试验都是用 rsync 同步的,xtrabackup 第三个节点起不来,而且在做将数据文件全部删除恢复时 xtrabackup 不能恢复
SST:全量恢复
IST : 增量恢复

注意事项:
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

yum install libaio gcc gcc-c++ boost-devel scons check-devel openssl-devel

1、# cat /etc/hosts
172.16.100.131   node1
172.16.100.224   node2
172.16.99.161 node3

2、修改文件描述符 65535
# vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

3、# vim /etc/sysctl.conf 
fs.file-max=655350
net.ipv4.ip_local_port_range = 1025 65000
net.ipv4.tcp_tw_reuse = 1

# sysctl -p

4、安装 percona xtrabackup 备份工具

如二进制安装的
# tar zxvf percona-xtrabackup-2.3.2-Linux-x86_64.tar.gz
# cd percona-xtrabackup-2.3.2-Linux-x86_64/bin/
# cp -a * /usr/bin/
rpm 则略

5、下载地址
Codership 下载地址:
http://releases.galeracluster.com/binary/mysql-wsrep-5.6.31-25.16-linux-x86_64.tar.gz
# tar xvfz mysql-wsrep-5.6.31-25.16-linux-x86_64.tar.gz 
# mv mysql-wsrep-5.6.31-25.16-linux-x86_64 /usr/local/mysql

6、安装 Galera 复制插件
https://launchpad.net/galera/3.x/25.3.5/+download/galera-25.3.5-src.tar.gz
tar zxvf galera-*
cd galera-*
scons
cp garb/garbd /usr/local/mysql/bin/
cp libgalera_smm.so /usr/local/mysql/lib/plugin/
注:scons yum 源中没有找到,下载的 tar 包
# python setup.py install  

7、
# vim /etc/my.cnf
[mysqld]
server_id=129
datadir=/data/galera
socket=/tmp/mysql.sock
user=mysql
skip-external-locking
skip-name-resolve
character-set-server = utf8
###########################################################
##Galera Cluster
wsrep_provider =/usr/local/mysql/lib/plugin/libgalera_smm.so      —- 设置 galera 类库
#wsrep_cluster_address= gcomm://172.16.100.131,172.16.100.224,172.16.99.161     每个节点的 ip 地址
#wsrep_provider_options= gcache.size=4G     —- 类似于缓存的大小,增量恢复都靠这个,默认 128M
wsrep_cluster_name=MariaDB Galera Cluster     —— 集群名字,随便起
wsrep_sst_auth=admin:123456                   —— 同步的用户名密码,必须是 all 权限
#wsrep_sst_method=xtrabackup-v2           ——- 同步方式,还有 mysqldump 和 rsync
wsrep_sst_method=rsync
#wsrep_sst_method=mysqldump
wsrep_node_name=172.16.100.224            —— 节点名称,可以是 ip 或者服务器名字(每个节点的名称不一样)
wsrep_slave_threads=2          ——- 开启并行复制线程,根据 CPU 核数设置
wsrep_on=ON           ——– 开启全同步复制模式
binlog_format   =  ROW     必须为 row 模式
innodb_flush_log_at_trx_commit = 0    —- 因为 Galera Cluster 的节点恢复是通过远端节点,这里为了性能考虑,设置为 0,即事务提交每隔 1 秒刷盘
innodb_autoinc_lock_mode=2      —— 将主键自增模式修改为交叉模式
query_cache_size = 0   —— 关闭查询缓存

8. 初始化
# cd /usr/local/mysql/scripts/
./mysql_install_db –user=mysql –basedir=/usr/local/mysql –datadir=/data/galera

9. 第一个节点启动
 ./mysqld_safe –user=mysql –wsrep-cluster-address= gcomm://
注:–wsrep-new-cluster         第一次启动要加上 –wsrep-new-cluster 参数,以后再重启不用加了(不确定加不加,反正都能起来)
进入数据库
mysql grant all on *.* to admin@ % identified by 123456
必须是 all 权限

第二个节点和第三个节点就正常启动就好了,有几个节点就添加就好了
./mysqld_safe –user=mysql –wsrep-cluster-address= gcomm://172.16.100.131:4567,172.16.100.224:4567
./mysqld_safe –user=mysql –wsrep-cluster-address= gcomm://172.16.100.131:4567,172.16.99.161:4567  
进入数据库查看
mysql show status like %ws%
wsrep_cluster_size           | 3 
wsrep_cluster_status         | Primary
wsrep_ready                  | ON
看到这几个就没问题了

在查看一下 admin 用户是否自动创建了

注:要使用 xtrabackup 做同步需要安装 lsof socat tar     其中 socat 我的 yum 源中没有找到
    下载地址:
http://www.dest-unreach.org/socat/download/socat-2.0.0-b9.tar.gz
# tar xvrz socat-2.0.0-b9.tar.gz
# cd socat-2.0.0-b9
#./configure
#make make install
在重启第二个节点和第三个节点,第二个起来了,第三个起不来了
报错如下:
2016-07-29 01:09:36 30877 [Note] WSREP: Member 0.0 (172.16.99.161) requested state transfer from *any* . Selected 1.0 (172.16.100.131)(SYNCED) as donor.
2016-07-29 01:09:36 30877 [Note] WSREP: Shifting PRIMARY – JOINER (TO: 4)
2016-07-29 01:09:36 30877 [Note] WSREP: Requesting state transfer: success, donor: 1
2016-07-29 01:09:36 30877 [Warning] WSREP: 1.0 (172.16.100.131): State transfer to 0.0 (172.16.99.161) failed: -2 (No such file or directory)
2016-07-29 01:09:36 30877 [ERROR] WSREP: gcs/src/gcs_group.c:gcs_group_handle_join_msg():723: Will never receive state. Need to abort.
2016-07-29 01:09:36 30877 [Note] WSREP: gcomm: terminating thread
2016-07-29 01:09:36 30877 [Note] WSREP: gcomm: joining thread
2016-07-29 01:09:36 30877 [Note] WSREP: gcomm: closing backend
2016-07-29 01:09:36 30877 [Note] WSREP: view(view_id(NON_PRIM,0ee11156-54e6-11e6-b16e-a303ff8a662b,11) memb {
        0ee11156-54e6-11e6-b16e-a303ff8a662b,0
} joined {
} left {
} partitioned {
        4d838aa2-5633-11e6-ba70-fb0ade4193cd,0
        d1533158-6a9f-11e6-bea7-7fa18ade38f5,0
})
2016-07-29 01:09:36 30877 [Note] WSREP: view((empty))
2016-07-29 01:09:36 30877 [Note] WSREP: gcomm: closed
2016-07-29 01:09:36 30877 [Note] WSREP: /usr/local/mysql/bin/mysqld: Terminated.
160729 01:09:36 mysqld_safe mysqld from pid file /data/galera/zabbixserver.pid ended
具体原因不明,最后用的 rsyc 的同步方式进行同步

10、测试
用 xtrabackup 不行,全都换了 rsync 了
将第三个节点的数据文件删除掉,在配合文件中指定从哪个节点恢复 在 my.cnf 中添加 wsrep_sst_donor=172.16.100.224(从第二个节点恢复),重启,没有问题。看日志。

上述内容就是如何进行 mysql 的 galera_cluster 安装配置,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计5367字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)