Galera Cluster 介绍
Galera是一个MySQL(也支持MariaDB,Percona)的同步多主集群软件。
主要功能
同步复制
Active-active的多主拓扑结构
真正的multi-master,即所有节点可以同时读写数据库
自动成员资格控制,失败节点从群集中删除
新节点加入数据自动复制
真正的并行复制,行级
一、准备环境
一定要固定ip地址
防火墙关闭
systemctl stop firewalld.service
setenforce 0
主机解析:
[root@mysql-1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.62.131 galera1
192.168.62.231 galera2
192.168.62.168 galera3
192.168.62.166 galera4
修改主机名(容易识别)
[root@localhost ~] hostnamectl set-hostname mysql-1
[root@localhost ~] hostnamectl set-hostname mysql-2
[root@localhost ~] hostnamectl set-hostname mysql-3
[root@localhost ~] hostnamectl set-hostname mysql-4
同步时间
yum -y install ntp
ntpdatae ntp1.aliyun.com
二、下载和安装Galera(每台都需要安装)
我们要下载带wsrep扩展补丁的版本,比如:
MySQL 5.7.20 extended with wsrep patch version 25.13
删除原版本mysql:
进入到yum.
[root@mysql-1 yum.repos.d]# yum erase `rpm -qa | grep mysql` -y
使用yum安装的方式安装mysql(脚本如下)
#!/usr/bin/bash
sed -ri s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config && setenforce 0
systemctl stop firewalld && systemctl disable firewalld
echo "正在检查网络通信"
ping -c3 www.baidu.com 2&> /dev/null
if [ $? = 0 ]
then
echo "网络连接正常!"
else
echo "网络连接异常,请先检查网络!!!"
exit 2
fi
yum_mysql() {
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
yum -y install yum-utils 2&> /dev/null
yum-config-manager --enable mysql57-community # 将禁用的yum源库启用
yum-config-manager --disable mysql80-community # 将启用的yum源库禁用
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
yum install -y mysql-community-server
if [ $? -eq 0 ]
then
echo "yum安装成功!"
exit 0
else
echo "yum安装失败!!!"
exit 2
fi
}
by_mysql() {
#清理安装环境
yum erase mariadb mariadb-server mariadb-libs mariadb-devel -y
userdel -r mysql
rm -rf /etc/my* #配置文件
rm -rf /var/lib/mysql #安装目录
rm -rf /var/log/mysqld.log #日志文件
#创建MySQL用户
useradd -r mysql -M -s /bin/false #-r创建系统用户、Mb不创建家目录、-s指定shell方式登录
#从官网下载tar包
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.27.tar.gz
#安装编译工具
yum -y install ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make cmake
#创建MySQL目录
mkdir -p /usr/local/mysql/{data,log} #自定义目录
#解压
tar xzvf mysql-boost-5.7.27.tar.gz -C /usr/local/
#编译安装
cd /usr/local/mysql-5.7.27/
cmake . \
-DWITH_BOOST=boost/boost_1_59_0/ \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DINSTALL_MANDIR=/usr/share/man \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1
make && make install
if [ $? = 0 ]
then
echo "编译安装成功,初始化操作请手动执行!"
exit 0
else
echo "编译安装失败!!!"
exit 3
fi
}
while :
do
echo " 功能展示"
cat <<EOF
++++++++++++++++++++++++++++++++++
+ 1. 编译安装mysql +
+ 2. yum安装mysql +
+ 3. 退出 +
++++++++++++++++++++++++++++++++++
EOF
read -p "请输入你的选项:" num
case $num in
1)
by_mysql
;;
2)
yum_mysql
;;
3)
exit 0;;
*)
echo "请输入所给有效选项"
esac
done
注:如果失败就手动执行命令,可能时进程被占用了,需要杀死进程
下载扩展源
yum -y install epel-release
cd到/etc/yum.repos.d/的目录下写repo文件
vim galera.repo
########写以下内容############
[galera]
name=galera
baseurl=http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/
enabled=1
gpgcheck=0
然后看一下提供的包
安装
[root@mysql-1 yum.repos.d]# yum install mysql-wsrep-5.7.x86_64 galera rsync -y
4台全部启动并查看与修改密码(四台操作相同)
[root@mysql-1 ~]# systemctl start mysqld
[root@mysql-1 ~]# grep password /var/log/mysqld.log
修改密码
mysqladmin -u root -p'wAs:?/wdd4av' password 'Tom@123456'
进入mysql创建用户
mysql -u root -p'Tom@123456'
三、配置(四台配置大多相同)
配置Galera Replication:
galera1配置:主配置文件/etc/my.cnf追加如下内容
server-id=1
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://'
wsrep_node_name='galera1'
wsrep_node_address='192.168.245.133'
wsrep_sst_auth=lihuafeng:'LiHuaFeng@123'
wsrep_sst_method=rsync
galera2配置:主配置文件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://galera1,galera3,galera4'
wsrep_node_name='galera2'
wsrep_node_address='192.168.245.136'
wsrep_sst_auth=lihuafeng:'LiHuaFeng@123'
wsrep_sst_method=rsync
galera3配置:主配置文件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://galera1,galera2,galera4'
wsrep_node_name='galera3'
wsrep_node_address='192.168.245.10'
wsrep_sst_auth=lihuafeng:'LiHuaFeng@123'
wsrep_sst_method=rsync
galera4配置:主配置文件my.cnf追加如下内容
server-id=4
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://galera1,galera2,galera3'
wsrep_node_name='galera4'
wsrep_node_address='192.168.245.135'
wsrep_sst_auth=lihuafeng:'LiHuaFeng@123'
wsrep_sst_method=rsync
重启服务:每台机器
systemctl restart mysqld
查看端口:galera端口4567 mysql端口3306
ss -auntpl | grep -E '3306|4567'
四、测试
在任何一台机器上写入数据,其他机器全部会同步
然后在其他机器上show一下是否同步即可!!!!!