1.准备工作
准备三台主机(当前使用阿里云主机):
master1 10.0.0.8 (内网ip)
master2 10.0.0.9
master3 10.0.0.10
2.生成yum repo文件
[root@master1 ~]# tee /etc/yum.repos.d/galera.repo <<EOF
> [galera]
> name = Galera
> baseurl = https://releases.galeracluster.com/galera-3/centos/7/x86_64
> gpgkey = https://releases.galeracluster.com/GPG-KEY-galeracluster.com
> gpgcheck = 1
>
> [mysql-wsrep]
> name = MySQL-wsrep
> baseurl = http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64
> gpgkey = http://releases.galeracluster.com/mysql-wsrep-5.7/GPG-KEY-galeracluster.com
> gpgcheck = 1
> EOF
2.安装Galera
yum -y install galera-3 mysql-wsrep-5.7
(访问Galera的repo会很慢,也可先下载下来上传到本地进行安装)
3.配置Swap分区
为了避免内存不足导致mysql服务崩溃,Galera建议最好配置Swap分区
(1)创建并初始化Swap分区:
dd if=/dev/zero of=/swapfile bs=1M count=512
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
(2)执行成功后需要在/etc/fstab文件中声明分区,以确保每次重启都能挂载该分区,打开/etc/fstab文件,在最后添加一行:
/swapfile none swap defaults 0 0
(3)reboot重启,查看Swap分区状况:
swapon --summary
4.配置Galera集群
配置/etc/my.cnf文件
tee /etc/my.cnf <<EOF
!includedir /etc/my.cnf.d/
[mysqld]
max_connections=1000
max_connect_errors=10000
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
binlog_format=ROW
bind-address=0.0.0.0
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=122M
character-set-server=utf8
collation-server=utf8_general_ci
character_set_server=utf8
collation_server=utf8_general_ci
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_provider_options="gcache.size=300M; gcache.page_size=300M"
wsrep_cluster_name="mysql_cluster"
wsrep_cluster_address="gcomm://master1.cluster,master2.cluster,utility1.cluster"
wsrep_node_name="master1.cluster"
wsrep_node_address="10.0.0.8"
wsrep_sst_method=rsync
wsrep相关配置:
(1)wsrep_provider:指定wsrep provider文件的位置, Galera使用这个provider来实现数据的Replication,本例中,其值为/usr/lib64/galera-3/libgalera _smm.so,不同操作系统下这个文件的位置可能不一样,请注意提前确定文件的位置。三个 Master节点上的该项配置相同。
(2)wsrep_provider_options:为wsrep provider指定一些参数,如本例中指定了缓存及缓存页的大小。三个 Master节点上的该项配置相同。
(3)wsrep_cluster_name:为整个cluster取名,所有集群内的节点都配置同样的值,不同名称会导致该节点无法加入集群。本例中,我们取名为 mysql_cluster。三个 Master节点上的该项配置相同。
(4)wsrep_cluster_address:集群的IP地址,由于集群是由多个节点组成的,所以这个地址是由每一个节点的IP地址拼接出来的,中间使用“,”分割,前面加 gcomm://前缀,本例中,其值为 gcomm://master1.cluster,master2.cluster,master3.cluster。三个 Master节点上的该项配置相同。
(5)wsrep_node_name:为当前节点取一个逻辑名称,本例中,我们取名为 master1.cluster与机器同名即可。三个 Master节点上的该项配置是不同的,分别为 master1.cluster,master2.cluster,master3.cluster。
(6)wsrep_node_address:当前节点的IP地址,本例中,其值为10.0.0.8。三个 Master节点上的该项配置是不同的,分别为10.0.0.8、10.0.0.9和10.0.0.10
(7)wsrep_sst_method:用来指明实施State Snapshot Transfer(SST)时使用的方法, State Snapshot Transfer指的是将一个节点的全部数据复制到新加入的节点。本例中,我们使用rsync。三个Master节点上的该项配置相同.
(重复2~4,在另外两台主机上分别安装Galera)
5.启动Galera集群
(1)查看mysqld服务是否已经启动
systemctl status mysqld
注:在启动第一个节点之前需要先检查一下当前节点是否已经启动了mysqld服务,有的安装脚本会将mysqld服务设为自动启动,在安装完成或系统重启mysqld服务就自动启动了,务必要先停止mysqld服务,同时关闭自动启动。因为我们必须在master1上通过 mysqld_bootstrap启动mysqld服务,如果mysqld服务已经启动了, mysqld bootstrap就无法成功运行。
systemctl stop mysqld
systemctl disable mysqld
(2)启动第一个节点
(Galera集群的第一个节点的启动方式和其他节点的启动方式是不同的)
/usr/bin/mysqld_bootstrap
再次查看:
(3)重置密码
查看mysql临时密码:
grep -i password /var/log/messages
重置密码:
mysqladmin -uroot -p password '新密码'
为了便于从本地及其他节点上使用root账号登录数据库,需要添加一个root账号:
drop user if exists 'root'@'%';
create user if not exists 'root'@'%' identified by '密码';
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;
(4)重置密码后登录mysql检查集群规模
mysql> show status like 'wsrep_cluster_size'
此时wsrep_cluster_size的值是1
(5)分别启动第二个mysql节点和第三个mysql节点
(常规启动命令启动)
systemctl start mysqld
此时查看mysql集群状态:
wsrep_cluster_size的值是3,说明另外两个节点已成功加入到集群中。
6.重启Galera集群
如果需要重启集群,需要注意启停的顺序,最先启动的节点要最后停止。
systemctl stop mysqld
如果集群非正常停止,可能会造成下次无法启动,需要以安全模式启动。
安全模式启动:
修改/var/lib/mysql/grastate.bat文件,将safe_to_bootstrap:0改为safe_to_bootstrap:1重启mysql集群即可。