一、工作原理
概念
Galera是一个MySQL(也支持MariaDB,Percona)的同步多主集群软件。
原理
当客户端读写数据时,可连接任一MySQL实例。对于读操作,从每个节点读取到的数据都是相同的。对于写操作,当数据写入某一节点后,集群会将其同步到其它节点。这种架构不共享任何数据,是一种高冗余架构。
特点
- 同步复制
- 真正的multi-master,即所有节点可以同时读写数据库
- 自动的节点成员控制,失效节点自动被清除
- 新节点加入数据自动复制
- 真正的并行复制,行级
- 用户可以直接连接集群,使用感受上与MySQL完全一致
环境图
二、环境准备
操作系统 | 主机地址 | 主机名 |
CentOS 7.4 | 192.168.252.144 | galery1 |
CentOS 7.4 | 192.168.252.145 | galery2 |
CentOS 7.4 | 192.168.252.146 | galery3 |
所有节点均需配置这些操作!!!!
配置解析
vim /etc/hosts
全部内容
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.252.144 galera1
192.168.252.145 galera2
192.168.252.146 galera3
关闭防火墙
setenforce 0 && systemctl stop firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
systemctl disable firewalld
同步时间
修改时区和客户端同步时间
timedatectl set-timezone Asia/Shanghai
ntpdate ntp.aliyun.com
三、安装Galera
安装前检查
1.查询是否有mysql
rpm -qa | grep mysql
清除mysql
yum -y erase `rpm -qa | grep mysql`
安装Galery
1.编辑仓库文件
vim /etc/yum.repos.d/galery.repo
[galera]
name=galera
baseurl=http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/
enabled=1
gpgcheck=0
2.查看安装的软件包
yum list | grep 'galera'
查看中:
galera.x86_64 25.3.12-2.el7 epel
mysql-wsrep-5.7.x86_64 5.7.20-25.13.el7 galera
mysql-wsrep-client-5.7.x86_64 5.7.20-25.13.el7 galera
mysql-wsrep-common-5.7.x86_64 5.7.20-25.13.el7 galera
mysql-wsrep-devel-5.7.x86_64 5.7.20-25.13.el7 galera
mysql-wsrep-libs-5.7.x86_64 5.7.20-25.13.el7 galera
mysql-wsrep-libs-compat-5.7.x86_64 5.7.20-25.13.el7 galera
mysql-wsrep-server-5.7.x86_64 5.7.20-25.13.el7 galera
3.安装
yum install mysql-wsrep-5.7.x86_64 galera rsync -y
4.安装mysql5.7
。。。
5.创建用户
mysql> grant all on *.* to 'syncuser'@'%' identified by '@Syh2025659';
mysql> flush privileges;
四、配置集群
mysql的配置
修改配置文件
galera1配置文件:
vim /etc/my.cnf
server-id=1 #不同节点需要不同的id
binlog_format=row
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='galera' #集群名字,自定义但在同一集群的需要名字一致
wsrep_cluster_address='gcomm://' #所有集群的ip除自己本身外,第一次添加需要带上自己的ip
wsrep_node_name='galera1' #本节点的名称
wsrep_node_address='192.168.252.144' #本节点的ip地址
wsrep_sst_auth=syncuser:'@Syh2025659' #本节点的用户名和密码
wsrep_sst_method=rsync
galera2配置文件:
vim /etc/my.cnf
server-id=2
binlog_format=row
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://[集群ip]'
wsrep_node_name='galera2'
wsrep_node_address='192.168.252.145'
wsrep_sst_auth=syncuser:'@Syh2025659'
wsrep_sst_method=rsync
galera3配置文件:
vim /etc/my.cnf
server-id=3
binlog_format=row
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://[集群ip]'
wsrep_node_name='galera3'
wsrep_node_address='192.168.252.146'
wsrep_sst_auth=syncuser:'@Syh2025659'
wsrep_sst_method=rsync
重启测试
systemctl restart mysqld
tips:
1.如果集群不能一次性全部添加启动失败,就一个一个添加。
2.
五、集群测试
netstat -tnpl 查看两个端口号3306和4567
mysql> show status like 'wsrep%';
+------------------------------+--------------------------------------+
| Variable_name | Value |
+------------------------------+--------------------------------------+
| wsrep_local_state_uuid | 882c705f-5f84-11ef-8410-92d486c7c82f |
| wsrep_protocol_version | 7 |
| 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 | 2 |
| wsrep_received_bytes | 146 |
| 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.500000 |
| 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_incoming_addresses | 192.168.252.144:3306 |
| wsrep_evs_delayed | |
| wsrep_evs_evict_list | |
| wsrep_evs_repl_latency | 0/0/0/0/0 |
| wsrep_evs_state | OPERATIONAL |
| wsrep_gcomm_uuid | 882b18e9-5f84-11ef-b535-7f3b3c80b2c4 |
| wsrep_cluster_conf_id | 1 |
| wsrep_cluster_size | 1 |
| wsrep_cluster_state_uuid | 882c705f-5f84-11ef-8410-92d486c7c82f |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |
| wsrep_local_bf_aborts | 0 |
| wsrep_local_index | 0 |
| wsrep_provider_name | Galera |
| wsrep_provider_vendor | Codership Oy <info@codership.com> |
| wsrep_provider_version | 3.12(r9921e73) |
| wsrep_ready | ON |
+------------------------------+--------------------------------------+
2.创建数据库测试看所有节点是否全部同步