zoukankan      html  css  js  c++  java
  • 搭建mysql_galera数据库集群

    1,Mariadb Galera Cluster 集群介绍

    Mariadb Galera Cluster MySQL高可用性和可扩展的解决方案

    官网:http://galeracluster.com/products/

    Mariadb Galera Cluster 是一套在mysql innodb 存储引擎上面实现multi-master 及数据实时同步复制的系统架构,业务层面无需做读写分离工作

    特性:

    (1)同步复制 Synchronous replication

    (2)Active-Active multi-master 拓扑逻辑

    (3)可对集群中任一几点进行读写

    (4)自动成员控制,故障节点自动从集群中移除

    (5)自动节点加入

    (6)真正并行复制,基于行级

    (7)每个节点都包含原生的数据副本

    架构图:

     

    2,配置mariadb的官方源地址

    三个节点执行下面操作,目的是安装Galera,保留centos 原有的repo文件

    /etc/yum.repos.d/ 添加一个repo文件,内容如下:

    [mariadb]

    name=mariadb

    baseurl=http://yum.mariadb.org/10.1/centos7-amd64/

    gpgcheck=0

    enable=1

    #yum clean all

    #yum makecache

    3,安装Mariadb Galera

    在三个node上分别执行:

    # yum install mariadb-server mariadb mariadb-server-galera galera xinetd rsync

    #systemctl start mariadb.service

    #mysql_secure_installation  (执行设置mysql密码,此次试验密码为teamsun)

    然后在每个节点登录mysql测试

    #mysql -uroot -p

    4,配置MariaDB Galera 集群

    第一个节点上添加如下内容

    #vim /etc/my.cnf.d/client.cnf

    添加内容:

    [client]

    port = 3306

    scoket = /var/lib/mysql/mysql.sock

    #vim /etc/my.cnf.d/galera.cnf

    添加内容

    [isamchk]

    key_buffer_size = 16M

    [mysqld]

    binlog_format = ROW

    character-set-server = utf8

    collation-server = utf8_general_ci

    max_connections = 10000

    ignore-db-dirs = lost+found

    init-connect = SET NAMES utf8

    innodb_autoinc_lock_mode = 2

    innodb_buffer_pool_size = 2000M

    innodb_doublewrite = 0

    innodb_file_format = Barracuda

    innodb_file_per_table = 1

    innodb_flush_log_at_trx_commit = 2

    innodb_flush_method = O_DIRECT

    innodb_io_capacity = 500

    innodb_locks_unsafe_for_binlog = 1

    innodb_log_file_size = 2000M

    innodb_read_io_threads = 8

    innodb_write_io_threads = 8

    key_buffer_size = 64

    myisam-recover-options = BACKUP

    myisam_sort_buffer_size = 64M

    open_files_limit = 102400

    performance_schema = on

    query_cache_limit = 1M

    query_cache_type = 0

    query_cache_size = 0

    skip-external-locking

    skip-name-resolve = 1

    socket = /var/lib/mysql/mysql.sock

    table_open_cache = 10000

    thread_cache_size = 8

    thread_stack = 256K

    tmpdir = /tmp

    user = mysql

    wait_timeout = 1800

    log-error = /var/log/mariadb/mariadb.log

    datadir = /var/lib/mysql

    pid-file = /var/run/mariadb/mariadb.pid

    [galera]

    bind-address=172.16.194.36

    wsrep_provider = /usr/lib64/galera/libgalera_smm.so

    wsrep_cluster_address = "gcomm://172.16.194.36,172.16.194.37,172.16.194.39"

    wsrep_cluster_name = galera_cluster

    wsrep_convert_LOCK_to_trx = 0

    wsrep_debug = 0

    wsrep_drupal_282555_workaround = 0

    wsrep_retry_autocommit = 1

    wsrep_node_name = controller1

    wsrep_node_address = 172.16.194.36

    wsrep_on = ON

    wsrep_slave_threads = 1

    wsrep_sst_method = rsync

    default_storage_engine = innodb

     

    [mysqld_safe]

    nice = 0

    socket = /var/lib/mysql/mysql.sock

    log-error = /var/log/mariadb/mariadb.log

     

     

    #vim mysql-clients.cnf

    添加内容:

    [mysqldump]

    max_allowed_packet = 16M

    quick

    quote-names

    第二个和第三个节点的配置如下,注意更改相关IP和节点名称

    #vim /var/lib/mysql/client.cnf

    [client]

    port = 3306

    socket = /var/lib/mysql/mysql.sock

    #vim /etc/my.cnf/server.cnf

    [isamchk]

    key_buffer_size = 16M

    [mysqld]

    binlog_format = ROW

    character-set-server = utf8

    collation-server = utf8_general_ci

    max_connections = 10000

    ignore-db-dirs = lost+found

    init-connect = SET NAMES utf8

    innodb_autoinc_lock_mode = 2

    innodb_buffer_pool_size = 2000M

    innodb_doublewrite = 0

    innodb_file_format = Barracuda

    innodb_file_per_table = 1

    innodb_flush_log_at_trx_commit = 2

    innodb_flush_method = O_DIRECT

    innodb_io_capacity = 500

    innodb_locks_unsafe_for_binlog = 1

    innodb_log_file_size = 2000M

    innodb_read_io_threads = 8

    innodb_write_io_threads = 8

    key_buffer_size = 64

    myisam-recover-options = BACKUP

    myisam_sort_buffer_size = 64M

    open_files_limit = 102400

    performance_schema = on

    query_cache_limit = 1M

    query_cache_type = 0

    query_cache_size = 0

    skip-external-locking

    skip-name-resolve

    socket = /var/lib/mysql/mysql.sock

    table_open_cache = 10000

    thread_cache_size = 8

    thread_stack = 256K

    tmpdir = /tmp

    user = mysql

    wait_timeout = 1800

    [galera]                                注意修改主机名和ip

    bind-address=172.16.194.37

    wsrep_provider = /usr/lib64/galera/libgalera_smm.so

    wsrep_cluster_address = "gcomm://172.16.194.36,172.16.194.37,172.16.194.39"

    wsrep_cluster_name = openstack

    wsrep_node_name = controller2

    wsrep_node_address = 172.16.194.37

    wsrep_on = ON

    wsrep_slave_threads = 4

    wsrep_sst_method = rsync

    default_storage_engine=InnoDB

     

    [mysqld_safe]

    nice = 0

    socket = /var/lib/mysql/mysql.sock

    syslog = /var/log/mariadb/mariadb.log

     

    #vim mysql-clients.cnf

    [mysqldump]

    max_allowed_packet = 16M

    quick

    quote-names

     

    5,设置mysql最大连接数

    修改完server.cnf ,然后修改下mysql.service 文件,让数据库支持最大连接数为10000 (当虚拟数量较多负载较大时

    ,会出现因数据库连接数不够导致访问界面出现各种内容刷不出的情况)

    #vim /usr/lib/systemd/system/mariadb.service

    [Service]段添加如下两行

    LimitNOFILE=10000

    LimitNPROC=10000

    都修改完毕后执行:

    #systemctl daemon-reload

    6,关于mysql服务的启动顺序

    三个节点my.cnf.d 都配置完后,全部执行:

    #systemctl stop mariadb.service && systemctl disable mariadb.service

    然后在第一个节点用下面的命令初始化启动mariadb集群服务

    #/usr/libexec/mysqld --wsrep-new-cluster --user=root &

    其他两个节点分别启动mariadb

    #systemctl start mariadb.service

    #systemctl status mariadb.service

    最后其他两个节点启动成功,在回第一个节点执行

     

    #pkill -9 mysql

    #pkill -9 mysql

    #systemctl start mariadb.service

    #systemctl status mariadb.service

    注意:如果遇到服务启动不了的情况,看下具体错误,如果是[ERROR]Can’t init tc log 错误可通过以下方式解决:

    #cd /var/lib/mysql

    #chown mysql:mysql *

    更改完重启服务即可,因为/var/lib/mysql/tc.log 用户组和用户名不是mysql

    7,查看mariadb数据库集群状态

    #mysql -uroot -p

    #mysql>show status like ‘wsrep_cluster_size%’;

    登录这两节点的mysql里,发现mysql集群数变成了3,说明这个集群有三个节点,到这里galera集群就已搭建成功

    8,测试

    下面来测试一下,在controller3中创建一张表,并插入相关记录,看controller1 controller2 中能否查询得到

    Mysql@controller3>create database happy;

    mysql@controller2>use happy;  controller2上也能看到创建的库‘happy.

  • 相关阅读:
    【转】In ASP.NET using jQuery Uploadify upload attachment
    golang 初体验
    Node.js(express) + MongoDB(mongoose) 简单开发(二)
    Node.js(express) + MongoDB(mongoose) 简单开发(一)
    windows下修改mysql的root密码
    新网站添加百度官方认证
    手写单例模式
    浏览器内核
    IE内核浏览器
    没有猜中开头,更加没有预料结尾的我,正努力走在向程序媛发展的道路上……
  • 原文地址:https://www.cnblogs.com/lxqr/p/8693943.html
Copyright © 2011-2022 走看看