Galera測試

環境:

192.168.205.37: as member of  galera-server 
192.168.205.47: as member of  galera-server
192.168.205.57: as member of  galera-server

版本:

OS: centos 7 1810 with mini install 
mariadb-server 5.5.64

目地:

集成了Galera插件的MySQL集羣,是一種新型的,數據不共享的,高度冗餘的高可用方案,目前Galera Cluster有兩個版本,分別是Percona Xtradb Cluster及MariaDB Cluster,Galera本身是具有多主特性的,即採用multi-master的集羣架構,是一個既穩健,又在數據一致性、完整性及高性能方面有出色表現的高可用解決方案。

Galera要求至少三個節點組成集羣,與普通的主從架構不同,它們都可以作爲主節點,三個節點是對等的,稱爲multi-master架構,當有客戶端要寫入或者讀取數據時,連接哪個實例都是一樣的,讀到的數據是相同的,寫入某一個節點之後,集羣自己會將新數據同步到其它節點上面,這種架構不共享任何數據,是一種高冗餘架構。

步驟

  1. 準備yum 源,此包與mariadb-server衝突,必須不能安裝mariadb-server,在三個節點上全部安裝
    [root@centos7 ~]#cat > /etc/yum.repos.d/mysql.repo <<EOF
    > [mysql]
    > baseurl=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.64/yum/centos7-amd64/
    > gpgcheck=0
    > EOF
  2. 安裝mariadb-galera-server
    [root@centos7 ~]#yum install MariaDB-Galera-server
  3. 修改配置文件三臺全部相同
    [root@centos7 ~]#vi /etc/my.cnf.d/server.cnf
    [galera]
    wsrep_provider = /usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address="gcomm://192.168.205.37,192.168.205
    .47,192.168.205.57"
    binlog_format=row                                        
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    bind-address=0.0.0.0
    wsrep_cluster_name = 'testcluster'
  4. 第一個啓動時需要執行如下,表示新建集羣
    [root@centos7 ~]#/etc/init.d/mysql start --wsrep-new-cluster
    Starting MariaDB.190813 08:55:40 mysqld_safe Logging to '/var/lib/mysql/centos7.localdomain.err'.
    190813 08:55:40 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
    ... SUCCESS! 
  5. 其它二個節點使用如下啓動
    [root@centos7 ~]#service mysql start
  6. 導入一個數據庫進行測試
    [root@centos7 ~]#mysql < hellodb_innodb.sql 
  7. 查看其它節點的數據是否正常複製
    MariaDB [(none)]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | hellodb            |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    5 rows in set (0.00 sec)
  8. 查看集羣中相關係統變量和狀態變量
    SHOW VARIABLES LIKE 'wsrep_%';
    SHOW STATUS LIKE 'wsrep_%';
    SHOW STATUS LIKE 'wsrep_cluster_size';
  9. 在三個服務器上同時在一個庫中建表,我們可以看到這三個只會有一個成功,另外兩個提示已經存在
    MariaDB [hellodb]> create table t1(id int);
    Query OK, 0 rows affected (0.01 sec)
    MariaDB [hellodb]> create table t1(id int);
    ERROR 1050 (42S01): Table 't1' already exists
    MariaDB [hellodb]> create table t1(id int);
    ERROR 1050 (42S01): Table 't1' already exists
  10. 測試一下存儲過程,會比一主一從慢很多,所以會犧牲一些性能問題,一般一主一從虛擬機插入10萬條大概要15秒,但本實驗用了分多鐘。

    MariaDB [hellodb]> create table testlog (id int auto_increment primary key,name char(10),age int default 20);
    
    Query OK, 0 rows affected (0.02 sec)
    
    MariaDB [hellodb]> 
    MariaDB [hellodb]> delimiter $$
    MariaDB [hellodb]> 
    MariaDB [hellodb]> create procedure  sp_testlog() 
        -> begin  
        -> declare i int;
        -> set i = 1; 
        -> while i <= 100000 
        -> do  insert into testlog(name,age) values (concat('wang',i),i); 
        -> set i = i +1; 
        -> end while; 
        -> end$$
    Query OK, 0 rows affected (0.01 sec)
    
    MariaDB [hellodb]> 
    MariaDB [hellodb]> delimiter ;
    MariaDB [hellodb]> call sp_testlog;
    Query OK, 1 row affected (3 min 5.20 sec)  
  11. 我們以事務方式提交,發現快了很多

    MariaDB [hellodb]> begin;
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [hellodb]> call sp_testlog;
    Query OK, 1 row affected (1.49 sec)
    
    MariaDB [hellodb]> commit;
    Query OK, 0 rows affected (0.42 sec)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章