MariaDB 集群,多主技术的快速上手

老思想总是认为 MySQL 就是一个 master 多个 Slave, 但是看完这篇文章, 将会颠覆你的“传统”思路,而且其配置之简单,令人惊讶!

在一台 Ubuntu18 的 物理机上用 KVM 安装(克隆)了多个 CentOS 7 的虚拟机。 以两台虚拟机(以下称节点) centos-02 (192.168.7.162/24) 和 centos-03 (192.168.7.163/24) 为例。

在 CentOS 7 上首先准备清华大学的 MariaDB 源,官方文档默认的都是国外的,下载速度呵呵。

然后就是 yum update; yum install mariadb-server galera-4; systemctl start mariadb;

以上需要在每个节点上都运行一遍,毕竟这个是基础,略过不表。

接下来我们在每个节点的 /etc/my.cnf.d/ 目录下创建一个 galera.cnf 的文件,截图是节点 02 的配置,如果是节点 03,只要修改 IP 和节点名即可。

[mysqld]
mysql settings
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
query_cache_size=0
query_cache_type=0
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=256M
bind-address=192.168.7.162
# Galera settings
wsrep_provider=”/usr/lib64/galera-4/libgalera_smm.so”
# SSL for Galera
# wsrep_provider_options=”socket.ssl_key=/etc/mysql/ssl/server-key.pem;socket.ssl_cert=/etc/mysql/ssl/server-cert.pem;socket.ssl_ca=/etc/mysql/ssl/ca-cert.pem”
wsrep_cluster_name=”yj_cluster”
wsrep_cluster_address=”gcomm://192.168.7.162,192.168.7.163″
wsrep_sst_method=rsync
wsrep_on=ON
wsrep_node_address=”192.168.7.162″
wsrep_node_name=”centos-02″

配置好以上,在第一个节点 02 上运行 galera_new_cluster ,进入命令行 mysql 界面,运行 show status like ‘wsrep%’ 就可以看到 cluster 的情况了。 wsrep_cluster_size 就是集群里的活动节点数量。

如果所有的节点都 down 了, 第一个启动的节点,必须先运行 galera_new_cluster 才能启动集群。直接用 systemctl start mariadb 会报错,因为它在尝试连接集群。

多主技术就这么简单!数据库在内网复制的话,无需安装证书相关,十分简便。 IPtables 和 SELinux 这些烦人的东西,只要关闭即可,所谓 眼不见为净。

为了防止偶数节点产生集群的脑裂(split brain),我们需要另外找一个节点安装 Galera Arbitrator(仲裁器) 服务。
假设新节点为: centos-01(192.168.7.161) 我们只要往 /etc/sysconfig/garb 文件写入以下两行:
GALERA_NODES=”192.168.7.162 192.168.7.163 192.168.7.164″
GALERA_GROUP=”yj_cluster”
然后运行 systemctl start garb 即可。
然后用 MySQL 客户端,查看 wsrep_cluster_size 可以看到新加了一个数字。
这个能有效防止集群 down 机。

CentOS7 安装 Oracle 12c 客户端

  1. 下载地址:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
    选两个 RPM 文件:
    oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
    oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm
    用 rpm -ivh 文件名 先后安装以上两个文件。
    sqlplus 会被安装到 /usr/lib/oracle/12.2/client64/bin 下。
  2. 配置环境变量 #vim  .bash_profile
    export  ORACLE_HOME=/usr/lib/oracle/12.2/client64
    export  TNS_ADMIN=$ORACLE_HOME/network/admin
    export  NLS_LANG=’simplified chinese_china’.ZHS16GBK
    export  LD_LIBRARY_PATH=$ORACLE_HOME/lib
    export  PATH=$ORACLE_HOME/bin:$PATH使以上环境变量生效:
    #. ./.bash_profile
  3. 创建监听文件: #mkdir -p $ORACLE_HOME/network/admin/
    # vim $ORACLE_HOME/network/admin/tnsnames.ora*tnsname*=
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = *IP*)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = *SID*)
    )
    )
  4. 设置 alias 添加到  .bash_profile
    alias .db=”$ORACLE_HOME/bin/sqlplus username/password@tnsname”
    从安全角度考虑,这个设置不好, 但是是偷懒的好办法。