Galera集群

集群介绍:

Galera是一个mysql的同步多主集群软件,目前只支持INnoDB存储引擎
功能:
同步复制
Multi-master,及所有节点都可以同时进行读写操作
自动的成员节点控制,失效节点自动被剔除
新节点加入数据自动复制
真正的并行复制,行级
优点:
因为是多主,不存在slave lag(延迟)
不存在丢失交易的情况
同时具有读写的能力
更小的客户端延迟
节点间的数据是同步的(使用rsync进行同步)
部署图:
Galera集群_第1张图片
过程解析图:
Galera集群_第2张图片
Galera应用程序实际上是库文件,但是mysql只是通过底层galera软件(生成的库文件)是做不到数据同步的,要借用wsrepc插件(或者mysql的补丁)。可以到http://galeracluster.com/这个官网下载。
首先客户端向数据库更新数据并按下确认键,wsapi通过hook的方式侵入Innodb中事务的commit流程,获取事务内所有数据行的更改,构造一个write set并将其复制到group产生GTID然后发送给其他服务器,看是否能执行,如果能执行,则更新本地文件,不能执行则发生回滚,回滚到原来数据。

实验:

前提:
(1)为了更好的看到效果,把所有的数据都删掉,停掉所有的数据库服务。
(2)时间要同步
(3)至少要3台数据库服务器,2台其实也可以但是如果再网络不稳定情况下可能发生脑裂(当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。)
1.软件的安装

yum install rsync (保证数据同步)
yum remove   mariadb-libs  ##卸载mariadb 冲突的软件包
rpm -ivh mysql-wsrep-common-5.7-5.7.21-25.14.el7.x86_64.rpm
rpm -ivh mysql-wsrep-libs-5.7-5.7.21-25.14.el7.x86_64.rpm
rpm -ivh mysql-wsrep-client-5.7-5.7.21.25.14.el7.x86_64.rpm
yum install mysql-wsrep-server-5.7-5.7.21-25.14.el7.x86_64.rpm
yum install galera-3-25.3.23-2.el7.x86_64.rpm

2.域名解析(三台数据库服务器进行通信时,进行本地域名解析)

 vim /etc/hosts 
 server-146 192.168.72.146 
 server-147 192.168.72.147 
 server-148 192.168.72.148 

3.galera集群发起人192.168.72.146
主配置文件/etc/my.cnf
vim /etc/my.cnf

 [client] 
 port=3306 
 socket=/mysql/mysql.sock
 [mysqld]
character-set-server=utf8         #字符集utf-8
collation-server=utf8_general_ci 
skip-name-resolve                    ##跳过主机名
user=mysql
port=3306                                ##端口
datadir=/mysql                        ###数据存放路径
tmpdir=/tmp                           ###临时目录
socket=/mysql/mysql.sock   ##套接字产生路径
binlog_rows_query_log_events=OFF ###这个选项应该关掉,否则会产生内部错误
wsrep_on=on
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so         #插件    
wsrep_cluster_name='cluster1'                       ##集群名称
wsrep_cluster_address='gcomm://'                ##首次作为发起人,此处为空,不向任何人同步数据。
wsrep_node_name='server-146'
wsrep_node_address='192.168.72.146'
wsrep_sst_auth=mary:123123                         ##同步数据时,使用的账号密码,各个集群节点应该一致。
wsrep_sst_method=rsync                                 ##同步数据时使用的工具。
skip-grant-tables ##跳过授权表

log-error=/mysql/mysqld.log

执行数据初始化:

  mysqld --initialize --user=mysql   
 ##此时会在  /mysql 下,产生全新的数据库

跳过授权表,启动数据库服务 : (由于在数据初始化时会产出随机密码)

      vim /usr/lib/systemd/system/mysqld.service ##会看到数据库的启动主程序
      mysqld --daemonize --datadir=/mysql       #####启动数据库服务(前面已经跳过授权表)
      修改密码:
      mysql  #登录
      ALTER USER 'root'@'localhost'  IDENTIFIED BY  '123123'; 
        flush privileges;                   ###刷新权限表
      修改好密码之后要记得去到/etc/my.cnf中去掉skip-grant-tables之后重新启动数据库

授权一个新用户 mary(可以让另外两台数据库服务器登录)

  grant all on *.* to 'mary'@'192.168.72.%' identified by '123123';
  #允许192.168.72.%端的用Mary用户登录并使用密码123123;

配置192.168.72.147

vim /etc/my.cnf 
 [client] 
 port=3306 
 socket=/mysql/mysql.sock
 password=123123 ##客户端启动时会读取这个文件,密码自然也就会读取到
 [mysqld]
character-set-server=utf8       
collation-server=utf8_general_ci 
skip-name-resolve      
user=mysql
port=3306                              
datadir=/mysql                       
 tmpdir=/tmp        
 socket=/mysql/mysql.sock                 
  binlog_rows_query_log_events=OFF 
  wsrep_on=on
  wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so 
  wsrep_cluster_name='cluster1'        
  wsrep_cluster_address='gcomm://192.168.72.146,192.168.72.148'
  #向谁同步数据         
  wsrep_node_name='server-146'
wsrep_sst_auth=mary:123123   
wsrep_sst_method=rsync   

启动数据库服务

    mysqld --daemonize --datadir=/mysql   
    ls /mysql #发现数据已经同步过来了

配置192.168.72.148(跟上面192.168.72.147一样)

  wsrep_cluster_address='gcomm://192.168.72.146,          192.168.72.147' 
  #这个地方不同,其他配置相同。

如果发起人停止了服务,如果再启动服务时,应该修改配置文件中的

 killall mysqld ###停止服务
  wsrep_cluster_address='gcomm://192.168.72.148,192.168.72.147'       ###发起人要向他们进行数据库同步。

如果3个中有一个不是最后离开的数据库,想要先启动则要修改/mysql/grastate.dat 文件中
safe_to_bootstrap: 0 把0改成1,再进行启动

你可能感兴趣的:(Galera集群)