企業私有云之mariadb集羣高可用

上篇文章介紹了openstack組件rabbitmq高可用,現在介紹其另一個重要組件mysql高可用。

我是本次選擇mysql的版本是mariadb,集羣方法是galera cluster多主集羣。

其實也有很多其他方案,如pxc、mha等等,選擇galera的原因是安裝方便,使用與維護也方便,多主模式任何一個節點掛了都可以在另外節點查看數據,同時openstack各組件也支持配置集羣方式的配置。

簡介

MariaDB Galera Cluster 是一套在mysql innodb存儲引擎上面實現multi-master及數據實時同步的系統架構,業務層面無需做讀寫分離工作,數據庫讀寫壓力都能按照既定的規則分發到 各個節點上去。在數據方面完全兼容 MariaDB 和 MySQL。

特性

(1).同步複製 Synchronous replication
(2).Active-active multi-master 拓撲邏輯
(3).可對集羣中任一節點進行數據讀寫
(4).自動成員控制,故障節點自動從集羣中移除
(5).自動節點加入
(6).真正並行的複製,基於行級
(7).直接客戶端連接,原生的 MySQL 接口
(8).每個節點都包含完整的數據副本
(9).多臺數據庫中數據同步由 wsrep 接口實現

不過侷限性也有很多,比如複製僅支持innode,節點必須是3個等等,具體看官網介紹。

下面是安裝

環境

系統centos 7.1

/etc/hosts是

node1 192.168.1.18
node2 192.168.1.20
node3 192.168.1.19

一、安裝基礎庫(所有節點運行)

yum -y install make cmake bc gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel nss_ldap openldap openldap-devel  openldap-clients openldap-servers libxslt-devel libevent-devel ntp  libtool-ltdl bison libtool vim-enhanced tar wget readline-devel libyaml-devel  patch telnet lrzsz sysstat screen parted rsync libselinux-python dmidecode ntpdate sar openssh-clients man

二、配置mariadb源(所有節點運行)

cat >/etc/yum.repos.d/mariadb.repo <<EOF
# MariaDB 10.1 CentOS repository list - created 2016-05-24 07:59 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64 
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB 
gpgcheck=1
EOF

三、安裝(所有節點運行)

yum install MariaDB-server MariaDB-client -y

四、配置

1、在node1裏運行

主要是修改bind-address、wsrep_cluster_name、wsrep_node_address、wsrep_node_name

[root@mysql-cluster-1 my.cnf.d]# cat /etc/my.cnf.d/server.cnf |grep -v '^#'|sed '/^$/d'
[server]
[mysqld]
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
skip-name-resolve
skip-host-cache
open_files_limit = 65535
max_connections = 5000
bind-address=192.168.1.18
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_file_per_table
character-set-server = utf8
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_provider_options="pc.recovery=TRUE;gcache.size=300M"
wsrep_cluster_address='gcomm://'

wsrep_cluster_name='ck-galera'
wsrep_node_address='192.168.1.18'
wsrep_node_name='m-1'
wsrep_sst_method=rsync
[embedded]
[mariadb]
[mariadb-10.1]

啓動

systemctl enable mariadb
systemctl start mariadb

初始化

[root@mysql-cluster-1 log]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n
 ... skipping.

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

查詢集羣數量

[root@mysql-cluster-1 log]# mysql -uroot -p -e "show status where Variable_name like 'wsrep_cluster_size'"
Enter password:
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 1     |
+--------------------+-------+

可以看到只有一個

查看當前集羣ip

[root@mysql-cluster-1 log]# mysql -uroot -p -e "show status where Variable_name like 'wsrep_incoming_addresses'"
Enter password:
+--------------------------+-------------------+
| Variable_name            | Value             |
+--------------------------+-------------------+
| wsrep_incoming_addresses | 192.168.1.18:3306 |
+--------------------------+-------------------+

2、在node裏配置

同樣修改bind-address、wsrep_cluster_name、wsrep_node_address、wsrep_node_name

[root@mysql-cluster-2 log]# grep -v '^#' /etc/my.cnf.d/server.cnf |sed '/^$/d'
[server]
[mysqld]
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
skip-name-resolve
skip-host-cache
open_files_limit = 65535
max_connections = 5000
bind-address=192.168.1.20
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_file_per_table
character-set-server = utf8
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_provider_options="pc.recovery=TRUE;gcache.size=300M"
wsrep_cluster_address='gcomm://192.168.1.18'
wsrep_cluster_name='ck-galera'
wsrep_node_address='192.168.1.20'
wsrep_node_name='m-2'
wsrep_sst_method=rsync
[embedded]
[mariadb]
[mariadb-10.1]

啓動

systemctl enable mariadb
systemctl start mariadb

查看集羣數量

[root@mysql-cluster-2 log]# mysql -uroot -p -e "show status where Variable_name like 'wsrep_cluster_size'"
Enter password:
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 2     |
+--------------------+-------+

可以看到已經有2個節點了

查看集羣ip

[root@mysql-cluster-2 log]# mysql -uroot -p -e "show status where Variable_name like 'wsrep_incoming_addresses'"
Enter password:
+--------------------------+-------------------------------------+
| Variable_name            | Value                               |
+--------------------------+-------------------------------------+
| wsrep_incoming_addresses | 192.168.1.20:3306,192.168.1.18:3306 |
+--------------------------+-------------------------------------+

可以看到node1與node2都在裏面

3、在node3裏配置

修改跟node1與node2一樣

[root@mysql-cluster-3 ~]# grep -v '^#' /etc/my.cnf.d/server.cnf |sed '/^$/d'
[server]
[mysqld]
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
skip-name-resolve
skip-host-cache
open_files_limit = 65535
max_connections = 5000
bind-address=192.168.1.19
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_file_per_table
character-set-server = utf8
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_provider_options="pc.recovery=TRUE;gcache.size=300M"
wsrep_cluster_address='gcomm://192.168.1.18,192.168.1.20'
wsrep_cluster_name='ck-galera'
wsrep_node_address='192.168.1.19'
wsrep_node_name='m-3'
wsrep_sst_method=rsync
[embedded]
[mariadb]
[mariadb-10.1]

啓動

systemctl enable mariadb
systemctl start mariadb

查看集羣數量

[root@mysql-cluster-3 ~]# mysql -uroot -p -e "show status where Variable_name like 'wsrep_cluster_size'"
Enter password:
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+

查看集羣ip

[root@mysql-cluster-3 ~]# mysql -uroot -p -e "show status where Variable_name like 'wsrep_incoming_addresses'"
Enter password:
+--------------------------+-------------------------------------------------------+
| Variable_name            | Value                                                 |
+--------------------------+-------------------------------------------------------+
| wsrep_incoming_addresses | 192.168.1.19:3306,192.168.1.20:3306,192.168.1.18:3306 |
+--------------------------+-------------------------------------------------------+

可以看到3個節點都在裏面了。

下一步大家如果想測試,可以在任意一個節點裏創建數據庫與表,插入數據後,在另外節點裏查看是否有對應信息,我這裏就不列舉了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章