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复制,可以解决多个问题,包括多主写入冲突,复制滞后和主从不同步
由于galera集群 需要MySQL 服务器支持 wsrep API
所以我们需要下载一个有wsrepAPI的模块或者支持该模块的mysql
wsrep API 是数据库的通用复制插件接口,比较类似一种应用程序,主要针对写复制, 主要用于定义应用程序如何调用复制库实现回写
[http://galeracluster.com/downloads/]{.underline}
三、部署配置
- 准备环境**(准备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}
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
- 安装依赖包
#yum -y install lsof net-tools perl socat openssl openssl-devel boost-devel
- 上传安装包并安装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.rpmmysql-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.rpmmysql-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.rpm1) # 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.rpm3) # 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.rpm5) # 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
- 启动 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;
- 配置galera集群**,防火墙放行端口.**
vim /etc/my.cnf 在最后加入下边内容:
server_id=1 binlog_format=row
default_storage_engine=InnoDB innodb_file_per_table=1
innodb_autoinc_lock_mode=2wsrep_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-id、ip和授权的用户
,修改成相应的内容.
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