mysql--Galera集群

Galera Cluster是Codership公司开发的免费开源高可用解决方案,提供多主写入和数据一致性保证。本文详细介绍了Galera Cluster的原理、部署配置步骤,包括下载安装包、设置数据库密码、启动节点等,并提醒注意防火墙端口和配置文件的修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Galera集群

一、galera-cluster 的介绍

Galera Cluster是Codership公司开发的一套免费开源的高可用方案,官网为http://galeracluster.com。Galera Cluster即为安装了Galera的Mariadb集群(本文只介绍Mariadb Garela集群)。其本身具有multi-master特性,支持多点写入。Galera Cluster的三个(或多个)节点是对等关系,每个节点均支持写入,集群内部会保证写入数据的一致性与完整性,具体实现原理会在本篇中做简要介绍。

官方给出的特性如下:

  • 真正的多主集群,Active-Active架构;

  • 同步复制,没有复制延迟;

  • 多线程复制;

  • 没有主从切换操作,无需使用虚IP;

  • 热备份,单个节点故障期间不会影响数据库业务;

  • 支持节点自动加入,无需手动拷贝数据;

  • 支持InnoDB存储引擎;

  • 对应用程序透明,原生MySQL接口;

  • 无需做读写分离;

  • 部署使用简单。

二、galera-cluster 的运行原理

主要关注点是数据一致性。 事务既可以应用于每个节点,也可以不全部应用。 所以,只要它们配置正确,数据库保持同步。

Galera复制插件不同于传统的MySQL复制,可以解决多个问题,包括多主写入冲突,复制滞后和主从不同步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N1z6qxVi-1640172973337)(media/image1.jpeg)]{width="6.960928477690289in" height="5.452187226596675in"}

由于galera集群 需要MySQL 服务器支持 wsrep API

所以我们需要下载一个有wsrepAPI的模块或者支持该模块的mysql

wsrep API 是数据库的通用复制插件接口,比较类似一种应用程序,主要针对写复制, 主要用于定义应用程序如何调用复制库实现回写

[http://galeracluster.com/downloads/]{.underline}

三、部署配置

  1. 准备环境**(准备4台机器,做好域名解析)**

node0:192.168.10.100 node1:192.168.10.101 node2:192.168.10.102 node3:192.168.10.103

1.官网下载安装包

[https://galeracluster.com/downloads/]{.underline}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Patwi2GN-1640172973339)(media/image2.jpeg)]{width="7.782358923884514in" height="5.386666666666667in"}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2qVqW06P-1640172973340)(media/image3.jpeg)]{width="7.217291119860017in" height="4.563124453193351in"}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oEyBZ4XJ-1640172973340)(media/image4.png)]{width="7.675416666666667in" height="2.0210411198600173in"}
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

galera-3-25.3.30-1.el7.x86_64.rpm

mysql-wsrep-5.7-5.7.30-25.22.el7.x86_64.rpm mysql-wsrep-client-5.7-5.7.30-25.22.el7.x86_64.rpm

mysql-wsrep-common-5.7-5.7.30-25.22.el7.x86_64.rpm mysql-wsrep-devel-5.7-5.7.30-25.22.el7.x86_64_(1).rpm mysql-wsrep-libs-5.7-5.7.30-25.22.el7.x86_64.rpm

mysql-wsrep-libs-compat-5.7-5.7.30-25.22.el7.x86_64.rpm mysql-wsrep-server-5.7-5.7.30-25.22.el7.x86_64.rpm

  1. 安装依赖包

#yum -y install lsof net-tools perl socat openssl openssl-devel boost-devel

  1. 上传安装包并安装rpm包**(**它们之间有依赖关系 按顺序安装)

#mkdir /galera # cd /galera #rz

#ls

galera-3-25.3.30-1.el7.x86_64.rpm

mysql-wsrep-5.7-5.7.30-25.22.el7.x86_64.rpm
mysql-wsrep-client-5.7-5.7.30-25.22.el7.x86_64.rpm

mysql-wsrep-common-5.7-5.7.30-25.22.el7.x86_64.rpm
mysql-wsrep-devel-5.7-5.7.30-25.22.el7.x86_64_(1).rpm
mysql-wsrep-libs-5.7-5.7.30-25.22.el7.x86_64.rpm

mysql-wsrep-libs-compat-5.7-5.7.30-25.22.el7.x86_64.rpm

mysql-wsrep-server-5.7-5.7.30-25.22.el7.x86_64.rpm
mysql-wsrep-test-5.7-5.7.30-25.22.el7.x86_64.rpm

1) # rpm -ivh mysql-wsrep-common-5.7-5.7.30-25.22.el7.x86_64.rpm 2)
# rpm -ivh mysql-wsrep-libs-5.7-5.7.30-25.22.el7.x86_64.rpm

3) # rpm -ivh mysql-wsrep-client-5.7-5.7.30-25.22.el7.x86_64.rpm

4) # rpm -ivh
mysql-wsrep-libs-compat-5.7-5.7.30-25.22.el7.x86_64.rpm

5) # rpm -ivh mysql-wsrep-server-5.7-5.7.30-25.22.el7.x86_64.rpm

6) # rpm -ivh
mysql-wsrep-devel-5.7-5.7.30-25.22.el7.x86_64_\(1\).rpm 7) # rpm
-ivh galera-3-25.3.30-1.el7.x86_64.rp

m

  1. 启动 mysql 查看密码

#systemctl start mysqld #systemctl enable mysqld

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

2020-07-26T07:44:57.765418Z 1 [Note] A temporary password is
generated for root@localhost: DQlapE%oU91(
2020-07-26T07:45:01.129527Z 0 [Note] Shutting down plugin
‘validate_password’

2020-07-26T07:45:02.758080Z 0 [Note] Shutting down plugin
‘sha256_password’

2020-07-26T07:45:02.758093Z 0 [Note] Shutting down plugin
‘mysql_native_password’

2020-07-26T07:49:32.646601Z 2 [Warning] Plugin validate_password
reported: ‘Effective value of validate_password_length is changed.
New value is 4’

2.进入数据库设置密码

# mysql -uroot -p’DQlapE%oU91(’

mysql> set global validate_password_policy=0; Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=0; Query OK, 0 rows affected (0.00 sec)

mysql> set password=password(‘pass’);

Query OK, 0 rows affected, 1 warning (0.00 sec)

关于 mysql 密码策略相关参数;

1)、validate_password_length 固定密码的总长度; 2)、validate_password_dictionary_file 指定密码验证的文件路径; 3)、validate_password_mixed_case_count 整个密码中至少要包含大/小写字母的总个数; 4)、validate_password_number_count 整个密码中至少要包含阿拉伯数字的个数; 5)、validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM;

关于 validate_password_policy 的取值:

0/LOW:只验证长度;

1/MEDIUM:验证长度、数字、大小写、特殊字符;

2/STRONG:验证长度、数字、大小写、特殊字符、字典文件; 6)、validate_password_special_char_count 整个密码中至少要包含特殊字符的个数; 更多说明查看mysql官网关于密码验证选项和变量[https://dev.mysql.com/doc/refman/8.0/en/validate-password-options-variables.html]{.underline}

为方便我们将mysql密码插件给删除

mysql> UNINSTALL PLUGIN validate_password; Query OK, 0 rows affected (0.01 sec)

mysql> set password=password(‘1’); 设置简易密码

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;

# mysql -p1

mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 5

Server version: 5.7.30 MySQL Community Server - (GPL), wsrep_25.22 Copyright © 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement. mysql>

mysql> grant all on *.* to ‘galera1’@’%’ identified by ‘1’; // 授权用户

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;

  1. 配置galera集群**,防火墙放行端口.**

vim /etc/my.cnf 在最后加入下边内容:

server_id=1 binlog_format=row

default_storage_engine=InnoDB innodb_file_per_table=1
innodb_autoinc_lock_mode=2

wsrep_on=ON

wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name=‘galera’ wsrep_cluster_address=‘gcomm://’
wsrep_node_name=‘node0’ wsrep_node_address=‘192.168.10.100’
wsrep_sst_auth=galera1:1 wsrep_sst_method=rsync

server_id 要集群内唯一,比如 node1的为1,node2的为2… binlog_format=row binlog的格式

innodb_file_per_table=1 独立的表空间

innodb_autoinc_lock_mode=2 自增锁模式取值:0这个表示tradition 传统 1 这个表示consecutive 连续 2 这个表示

interleaved 交错

wsrep_on=ON wsrep功能开启wsrep_provider=/usr/lib64/galera/libgalera_smm.so 开启so模块wsrep_cluster_name 集群名字,可以自定义,但是同一集群要保持一致

wsrep_cluster_address 第一个节点的值为 ‘gcomm://’ ,第一个节点起来后,其他节点可以配置为集群除自身外所有节点ip地址 如:‘gcomm://192.168.10.100,192.168.10.102’

wsrep_node_name 节点主机名

wsrep_node_address 节点ip

wsrep_sst_auth 创建的用于同步的用户和密码 (我创建的用户为galera1密码为1)

注意:配置文件里红色字体是要修改的跟据自己的server-idip和授权的用户

,修改成相应的内容.

firewall-cmd --add-port=3306**/tcp** --permanent success

# firewall-cmd --add-port=4567/tcp --permanent success

# firewall-cmd --add-port=4567/udp --permanent success

# firewall-cmd --add-port=4568/tcp --permanent success

# firewall-cmd --add-port=4444/tcp --permanent success

# firewall-cmd --reload success

4567 , Galera做数据复制的通讯和数据传输端口,需要在防火墙放开TCP和UDP

4568 , Galera做增量数据传输使用的端口(Incremental State Transfer, IST),需要防火墙放开TCP 4444 , Galera做快照状态传输使用的端口(State Snapshot Transfer, SST),需要防火墙放开TCP

#yum -y install rsync

#systemctl enable rsyncd #systemctl start rsyncd

3.启动第一个节点

# systemctl restart mysqld # systemctl status mysqld

mysql> show status like ‘wsrep%’;

+ + +

| Variable_name | Value |

+ + +

| wsrep_local_state_uuid | 7fba10bc-cfd8-11ea-bcde-cf2a02bd2853 |

| wsrep_protocol_version | 9 |

| wsrep_last_committed | 0 |

| wsrep_replicated | 0 |

| wsrep_replicated_bytes | 0 |

| wsrep_repl_keys | 0 |

| wsrep_repl_keys_bytes | 0 |

| wsrep_repl_data_bytes | 0 |

| wsrep_repl_other_bytes | 0 |

| wsrep_received | 145 |

| wsrep_received_bytes | 23387 |

| wsrep_local_commits | 0 |

| wsrep_local_cert_failures | 0 |

| wsrep_local_replays | 0 |

| wsrep_local_send_queue | 0 |

| wsrep_local_send_queue_max | 1 |

| wsrep_local_send_queue_min | 0 |

| wsrep_local_send_queue_avg | 0.000000 |

| wsrep_local_recv_queue | 0 |

| wsrep_local_recv_queue_max | 2 |

| wsrep_local_recv_queue_min | 0 |

| wsrep_local_recv_queue_avg | 0.013793 |

| wsrep_local_cached_downto | 18446744073709551615 |

| wsrep_flow_control_paused_ns | 0 |

| wsrep_flow_control_paused | 0.000000 |

| wsrep_flow_control_sent | 0 |

| wsrep_flow_control_recv | 0 |

| wsrep_cert_deps_distance | 0.000000 |

| wsrep_apply_oooe | 0.000000 |

| wsrep_apply_oool | 0.000000 |

| wsrep_apply_window | 0.000000 |

| wsrep_commit_oooe | 0.000000 |

| wsrep_commit_oool | 0.000000 |

| wsrep_commit_window | 0.000000 |

| wsrep_local_state | 4 |

| wsrep_local_state_comment | Synced |

| wsrep_cert_index_size | 0 |

| wsrep_causal_reads | 0 |

| wsrep_cert_interval | 0.000000 |

| wsrep_open_transactions | 0 |

| wsrep_open_connections | 0 |

| wsrep_incoming_addresses |
192.168.10.101:3306,192.168.10.102:3306,192.168.10.100:3306,192.168.10.103:3306 |

| wsrep_cluster_weight | 4 |

| wsrep_desync_count | 0 |

| wsrep_evs_delayed | |

| wsrep_evs_evict_list | |

| wsrep_evs_repl_latency | 0/0/0/0/0 |

| wsrep_evs_state | OPERATIONAL |

| wsrep_gcomm_uuid | 6278e7af-cfde-11ea-adbd-8b9c01e51722 |

| wsrep_cluster_conf_id | 130 |

| wsrep_cluster_size | 4 |

| wsrep_cluster_state_uuid | 7fba10bc-cfd8-11ea-bcde-cf2a02bd2853 |

| wsrep_cluster_status | Primary |

| wsrep_connected | ON |

| wsrep_local_bf_aborts | 0 |

| wsrep_local_index | 2 |

| wsrep_provider_name | Galera |

| wsrep_provider_vendor | Codership Oy
<info@codership.com>
|

| wsrep_provider_version | 3.30(r4e1a604) |

| wsrep_ready | ON |

+ + +

60 rows in set (0.09 sec)

接下来的每一台机器都做以上操做。

[https://blog.youkuaiyun.com/Lbg_007/article/details/106709353]{.underline}

注意:如果第一台节点起不来就将 **/var/lib/mysql/**目录下的两个缓存文件删除再启动。

# ls /var/lib/mysql/

auto.cnf client-cert.pem GRA_2_3.log ib_buffer_pool ib_logfile1 mysql.sock private_key.pem server- key.pem test1

ca-key.pem client-key.pem grastate.dat ibdata1 ibtmp1 mysql.sock.lock public_key.pem sys ca.pem galera.cache gvwstate.dat ib_logfile0 mysql performance_schema server-cert.pem test

#rm -rf /var/lib/mysql/grastate.dat #rm -rf /var/lib/mysql/galera.cache
uto.cnf client-cert.pem GRA_2_3.log ib_buffer_pool ib_logfile1 mysql.sock private_key.pem server- key.pem test1

ca-key.pem client-key.pem grastate.dat ibdata1 ibtmp1 mysql.sock.lock public_key.pem sys ca.pem galera.cache gvwstate.dat ib_logfile0 mysql performance_schema server-cert.pem test

#rm -rf /var/lib/mysql/grastate.dat #rm -rf /var/lib/mysql/galera.cache

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值