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的集羣架構,是一個既穩健,又在數據一致性、完整性及高性能方面有出色表現的高可用解決方案。mysql
Galera要求至少三個節點組成集羣,與普通的主從架構不一樣,它們均可以做爲主節點,三個節點是對等的,稱爲multi-master架構,當有客戶端要寫入或者讀取數據時,鏈接哪一個實例都是同樣的,讀到的數據是相同的,寫入某一個節點以後,集羣本身會將新數據同步到其它節點上面,這種架構不共享任何數據,是一種高冗餘架構。sql
[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
[root@centos7 ~]#yum install MariaDB-Galera-server
[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'
[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!
[root@centos7 ~]#service mysql start
[root@centos7 ~]#mysql < hellodb_innodb.sql
MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | hellodb | | mysql | | performance_schema | | test | +--------------------+ 5 rows in set (0.00 sec)
SHOW VARIABLES LIKE 'wsrep_%'; SHOW STATUS LIKE 'wsrep_%'; SHOW STATUS LIKE 'wsrep_cluster_size';
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萬條大概要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)
咱們以事務方式提交,發現快了不少centos
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)