zoukankan      html  css  js  c++  java
  • mysql基础之mariadb galera集群(多主)

    一、概念

      galera集群多用于关键性业务,因为galera集群为了数据的一致性,采用的是同步的机制,这就使galera牺牲了一部分性能来换取数据一致性。

      galera集群是基于wsrep协议(端口4567)工作的,目前只支持INnoDB存储引擎。 

      功能:
      (1)同步复制
      (2)Multi-master,及所有节点都可以同时进行读写操作
      (3)自动的成员节点控制,失效节点自动被剔除
      (4)新节点加入数据自动复制
      (5)真正的并行复制,行级
      优点:
      (1)因为是多主,不存在slave lag(延迟)
      (2)不存在丢失交易的情况
      (3)同时具有读写的能力
      (4)更小的客户端延迟
      (5)节点间的数据是同步的(使用rsync进行同步)

      在搭建galera集群时尽量用奇数台主机,防止出现脑裂现象

    二、搭建步骤

     1、准备

      集群数量:3个节点(都已下载mariadb)

      192.168.11.6(主节点)(galera发起人)

      192.168.11.7

      192.168.11.8

    --检查环境
    [
    root@ren6 ~]# setenforce 0 setenforce: SELinux is disabled [root@ren6 ~]# getenforce Disabled [root@ren6 ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since 一 2019-09-09 14:07:52 CST; 1h 56min ago Docs: man:firewalld(1) Main PID: 6548 (firewalld) CGroup: /system.slice/firewalld.service └─6548 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopi... 9月 09 14:07:48 localhost.localdomain systemd[1]: Starting firewalld - d... 9月 09 14:07:52 localhost.localdomain systemd[1]: Started firewalld - dy... Hint: Some lines were ellipsized, use -l to show in full. --添加防火墙规则(firewall-cmd命令需要添加3306、4567、4444三个端口)

      iptables -A INPUT -s 192.168.11.6 -p tcp -j ACCEPT
      iptables -A INPUT -s 192.168.11.7 -p tcp -j ACCEPT
      iptables -A INPUT -s 192.168.11.8 -p tcp -j ACCEPT

    --关闭数据库
    [root@ren6 ~]# systemctl stop mariadb

    2、配置galera(三个节点)

    [root@ren6 ~]# vim /etc/my.cnf.d/server.cnf
     1 [mysqld]
     2 #character-set-server=utf8      #字符集utf-8
     3 #skip-name-resolve      #跳过主机名
     4 #skip-grant-tables      #跳过授权表
     5 [galera]
     6 # Mandatory settings
     7 wsrep_on=ON      #开启wsrep协议
     8 wsrep_provider=/usr/lib64/galera/libgalera_smm.so    #galera的库文件地址
     9 wsrep_cluster_address="gcomm://192.168.11.6,192.168.11.7,192.168.11.8"  #各个节点的IP
    10 binlog_format=row      #二进制日志设置为行模式
    11 default_storage_engine=InnoDB    #使用的默认引擎InnoDB
    12 #wsrep_cluster_name='cluster'    #集群名称
    13 wsrep_node_name=ren6          #节点名称(和主机名无关,和其它节点不能一样(ren7,ren8))
    14 #wsrep_node_address=192.168.11.6   #节点IP
    15 #innodb_autoinc_lock_mode=2      #性能最好
    16 #wsrep_slave_threads=1         #并行复制线程数
    17 #innodb_flush_log_at_trx_commit=0  #0--log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作。
                            #1--每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认。
                            #2--每次事务提交时MySQL都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作 18 #innodb_buffer_pool_size=120M     #设置缓存池大小 19 #wsrep_set_method=rsync        #远程同步 20 #wsrep_causal_resds=ON         #避免各个节点的数据不一致,这种情况需要等待全同步复制

    3、初始化(三个节点)

    [root@ren6 ~]# mysqld_safe --wsrep_cluster_address=gcomm://192.168.11.6,192.168.11.7,192.168.11.8
    190909 15:37:14 mysqld_safe Logging to '/var/lib/mysql/ren6.err'.
    190909 15:37:14 mysqld_safe A mysqld process already exists

    4、启动集群服务(Mariadb Galera Cluster服务)

    --在一个节点上执行以下语句,将其作为主节点
    [root@ren6 ~]# galera_new_cluster
    --剩余两个节点正常启动
    [root@ren7 mysql]# systemctl restart mariadb
    [root@ren8 mysql]# systemctl restart mariadb
    --查看集群状态(集群服务使用了4567和3306端口)
    [
    root@ren6 ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 128 *:4567 *:* LISTEN 0 80 :::3306 :::* LISTEN 0 128 :::22 :::*

    5、验证集群状态

    --进入数据库
    [
    root@ren6 ~]# mysql -uroot -proot --查看是否启用galera插件 MariaDB [(none)]> show status like 'wsrep_ready'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | wsrep_ready | ON | +---------------+-------+ 1 row in set (0.02 sec) --查看目前集群机器数 MariaDB [(none)]> show status like 'wsrep_cluster_size'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+ 1 row in set (0.00 sec) --查看链接的主机 MariaDB [(none)]> show status like 'wsrep_incoming_addresses'; +--------------------------+-------------------------------------------------------+ | Variable_name | Value | +--------------------------+-------------------------------------------------------+ | wsrep_incoming_addresses | 192.168.11.6:3306,192.168.11.7:3306,192.168.11.8:3306 | +--------------------------+-------------------------------------------------------+ 1 row in set (0.00 sec) --查看集群状态 MariaDB [(none)]> show status like 'wsrep%'; +-------------------------------+-------------------------------------------------------+ | Variable_name | Value | +-------------------------------+-------------------------------------------------------+ | wsrep_applier_thread_count | 1 | | wsrep_apply_oooe | 0.000000 | | wsrep_apply_oool | 0.000000 | | wsrep_apply_window | 0.000000 | | wsrep_causal_reads | 0 | | wsrep_cert_deps_distance | 0.000000 | | wsrep_cert_index_size | 0 | | wsrep_cert_interval | 0.000000 | | wsrep_cluster_conf_id | 3 | | wsrep_cluster_size | 3 #集群成员数量 | | wsrep_cluster_state_uuid | 8afd1e06-d2e1-11e9-a236-57d18eb2550f #UUID 集群唯一标记 | | wsrep_cluster_status | Primary #主服务器 | | wsrep_cluster_weight | 3 | | wsrep_commit_oooe | 0.000000 | | wsrep_commit_oool | 0.000000 | | wsrep_commit_window | 0.000000 | | wsrep_connected | ON #当前是否连接中 | | wsrep_desync_count | 0 | | wsrep_evs_delayed | | | wsrep_evs_evict_list | | | wsrep_evs_repl_latency | 0/0/0/0/0 | | wsrep_evs_state | OPERATIONAL | | wsrep_flow_control_paused | 0.000000 | | wsrep_flow_control_paused_ns | 0 | | wsrep_flow_control_recv | 0 | | wsrep_flow_control_sent | 0 | | wsrep_gcomm_uuid | 3403bfae-d2e9-11e9-93b9-6ff8fad2851a | | wsrep_incoming_addresses | 192.168.11.6:3306,192.168.11.7:3306,192.168.11.8:3306 | | wsrep_last_committed | 0 #sql 提交记录 | | wsrep_local_bf_aborts | 0 #从执行事务过程被本地中断 | | wsrep_local_cached_downto | 18446744073709551615 | | wsrep_local_cert_failures | 0 #本地失败事务 | | wsrep_local_commits | 0 #本地执行的sql | | wsrep_local_index | 0 | | wsrep_local_recv_queue | 0 | | wsrep_local_recv_queue_avg | 0.250000 | | wsrep_local_recv_queue_max | 2 | | wsrep_local_recv_queue_min | 0 | | wsrep_local_replays | 0 | | wsrep_local_send_queue | 0 #本地发出的队列 | | wsrep_local_send_queue_avg | 0.000000 #队列平均时间间隔 | | wsrep_local_send_queue_max | 1 | | wsrep_local_send_queue_min | 0 | | wsrep_local_state | 4 | | wsrep_local_state_comment | Synced | | wsrep_local_state_uuid | 8afd1e06-d2e1-11e9-a236-57d18eb2550f #集群ID | | wsrep_open_connections | 0 | | wsrep_open_transactions | 0 | | wsrep_protocol_version | 9 | | wsrep_provider_name | Galera | | wsrep_provider_vendor | Codership Oy <info@codership.com> | | wsrep_provider_version | 25.3.26(r3857) | | wsrep_ready | ON #插件是否应用中 | | wsrep_received | 4 #数据复制接收次数 | | wsrep_received_bytes | 608 | | wsrep_repl_data_bytes | 0 | | wsrep_repl_keys | 0 | | wsrep_repl_keys_bytes | 0 | | wsrep_repl_other_bytes | 0 | | wsrep_replicated | 0 #随着复制发出的次数 | | wsrep_replicated_bytes | 0 #数据复制发出的字节数 | | wsrep_rollbacker_thread_count | 1 | | wsrep_thread_count | 2 | +-------------------------------+-------------------------------------------------------+ 63 rows in set (0.00 sec)

    6、测试集群mariadb数据是否同步

    --在主节点创建一个新数据库qinqin
    MariaDB [(none)]> create database qinqin; Query OK, 1 row affected (0.00 sec)
    --在其它两个节点上查看是否已经同步
    [root@ren7 mysql]# mysql -uroot -proot MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | qinqin | +--------------------+ 4 rows in set (0.00 sec)

    注意:
      如果启动集群出错可参考以下方案,如果galera集群为3个节点(a,b,c),那么如果关闭的顺序为a->b->c
      那么如果要再次启动集群就要先在c上面启动服务galera_new_cluster,再在另外两个节点上启动数据库service mariadb restart
      可以查看/var/lib/mysql/grastate.dat文件的safe_to_bootstrap: 1参数,如果为1代表最后一个停数据库的
    解决方案1:
      vim /var/lib/mysql/grastate.dat
      把safe_to_bootstrap更改为1
      # GALERA saved state
      version: 2.1
      uuid: a393feef-f639-11e8-9b89-4e75f9b8fb0f
      seqno: -1
      safe_to_bootstrap: 1
    解决方案2:
      vim /var/lib/mysql/grastate.dat
      查看你的UUID是否是集群的UUID,如果不是需要手动修改为集群的UUID之后在启动

  • 相关阅读:
    网络七层
    微信小程序开发工具 常用快捷键
    BZOJ 1026 windy数 (数位DP)
    BZOJ 1026 windy数 (数位DP)
    CodeForces 55D Beautiful numbers (SPOJ JZPEXT 数位DP)
    CodeForces 55D Beautiful numbers (SPOJ JZPEXT 数位DP)
    HDU 3709 Balanced Number (数位DP)
    HDU 3709 Balanced Number (数位DP)
    UVA 11361 Investigating Div-Sum Property (数位DP)
    UVA 11361 Investigating Div-Sum Property (数位DP)
  • 原文地址:https://www.cnblogs.com/renyz/p/11489853.html
Copyright © 2011-2022 走看看