MySQL Galera Cluster集群部署 CentOS7

  • 简介

MySQL/Galera是MySQL/InnoDB的多主集群,有以下特性: - 同步复制 - Active-active的多主拓扑结构 - 集群任意节点可以读和写 - 自动身份控制,失败节点自动脱离集群 - 自动节点接入 - 真正的基于”行”级别和ID检查的并行复制 - 无单点故障,易扩展

  • 角色划定
主机名 IP地址 MGR角色
mgr001 192.168.80.232 primary
mgr002 192.168.80.231 primary
mgr003 192.168.80.230 primary
  • 安装依赖
确认安装有gcc和gcc-c++
# yum install gcc gcc-c++

确认安装有boost-devel rsync lsof
# yum install boost-devel

安装scons check-devel openssl-devel
# yum install scons check-devel openssl-devel
  • 安装部署
  • 创建目录 增加用户
创建用户组
# groupadd mysql

添加用户并加入组
# useradd -g mysql -M mysql

设置用户密码
# passwd mysql

新建mysql数据目录,日志目录,临时目录
# mkdir -p /ops/mysql-galera/{data,logs,temp}

设置mysql的basedir目录权限
# chown -R mysql:mysql /ops/mysql-galera

切换至mysql用户
# su - mysql
  • 下载

http://releases.galeracluster.com//galera-3/source/galera-3-25.3.25.tar.gz

http://releases.galeracluster.com//mysql-wsrep-5.7/binary/mysql-wsrep-5.7.24-25.16-linux-x86_64.tar.gz

  • 安装含wsrep Patch的MySQL 5.7.24
解压带有wsrep patch的mysql
# cd /home/mysql/sorftware
# tar zxf mysql-wsrep-5.7.24-25.16-linux-x86_64.tar.gz -C /ops/mysql-galera/

重命名
# cd /ops/mysql-galera
# mv mysql-wsrep-5.7.24-25.16-linux-x86_64/ mysql-wsrep-5.7.24
  • 安装galera插件
# cd /home/mysql/sorftware
# tar zxf galera-3-25.3.25.tar.gz -C /ops/mysql-galera/
# mv galera-3-25.3.25/ galera-3.25
# cd galera-3.25/
# scons
# cp -f garb/garbd /ops/mysql-gelera/mysql-wsrep-5.7.24/bin/
# cp -f libgalera_smm.so /ops/mysql-gelera/mysql-wsrep-5.7.24/lib/plugin/
  • 配置
  • mysql配置文件my.cnf
# rm -f /etc/my.cnf
# touch /etc/my.cnf.d/wsrep.cnf
# cat <<EOF > /etc/my.cnf
[client]
port=36806
socket=/ops/mysql-gelera/mysql.sock

[mysqldump]
quick
max_allowed_packet=32M

[mysqld_safe]
log-error=/ops/mysql-gelera/logs/mysqld.log
pid-file=/ops/mysql-gelera/mysqld.pid

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-bin-trust-function-creators=1
skip-external-locking
skip-name-resolve=1
user=mysql
port=36806
basedir=/ops/mysql-gelera/mysql-wsrep-5.7.24
datadir=/ops/mysql-gelera/data
tmpdir=/ops/mysql-gelera/temp
socket=/ops/mysql-gelera/mysql.sock
log-error=/ops/mysql-gelera/logs/mysql_error.log
pid-file=/ops/mysql-gelera/mysqld.pid
slow-query-log-file=/ops/mysql-gelera/logs/mysql-slow.log
server_id=3
log_bin=mysql-bin
relay-log=mgc003-relay-bin
binlog_format=row
#auto_increment_increment=2
#auto_increment_offset=1
open_files_limit=10240
back_log=600
max_connections=500
max_connect_errors=6000
wait_timeout=605800
max_allowed_packet=32M
sort_buffer_size=4M
join_buffer_size=4M
thread_cache_size=300
query_cache_type=1
query_cache_size=256M
query_cache_limit=2M
query_cache_min_res_unit=16k
tmp_table_size=256M
max_heap_table_size=256M
key_buffer_size=256M
read_buffer_size=1M
read_rnd_buffer_size=16M
bulk_insert_buffer_size=64M
lower_case_table_names=1
default-storage-engine=INNODB
innodb_buffer_pool_size=2G
innodb_log_buffer_size=32M
innodb_log_file_size=128M
innodb_flush_method=O_DIRECT
long_query_time=2
slow-query-log=on
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
!includedir /etc/my.cnf.d
EOF

   

wsrep配置文件wsrep.cnf

# cat <<EOF > /etc/my.cnf.d/wsrep.cnf
[mysqld]
wsrep_provider=/ops/mysql-gelera/mysql-wsrep-5.7.24/lib/plugin/libgalera_smm.so
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://192.168.80.232,192.168.80.231,192.168.80.230"
#wsrep_provider_options ='gcache.size=1G;socket.ssl_key=my_key;socket.ssl_cert=my_cert'
wsrep_node_name=mgr003
wsrep_node_address='192.168.80.230'
wsrep_sst_donor='mgr003,mgr002,mgr001'
wsrep_slave_threads=1
wsrep_certify_nonPK=1
wsrep_max_ws_rows=131072
wsrep_max_ws_size=1073741824
wsrep_debug=0
wsrep_convert_LOCK_to_trx=0
wsrep_retry_autocommit=1
wsrep_auto_increment_control=2
wsrep_drupal_282555_workaround=0
wsrep_causal_reads=0
#wsrep_notify_cmd=
wsrep_sst_method=rsync
#awsrep_sst_auth=root:
EOF
  • 启动
# /ops/mysql-galera/mysql-wsrep-5.7.24/bin/mysqld_safe --wsrep_cluster_address=gcomm:// >/dev/null &

# ss -tunpl|grep mysqld

# /ops/mysql-galera/mysql-wsrep-5.7.24/bin/mysqladmin -uroot -p shutdown
  • 集群重启

  在集群停止之后重启时,先在每个节点上使用mysqld_safe --wsrep-recover查看节点的Recovered position的值,选择值最大的一个作为第一个节点启动,如果启动失败,则在将作为第一个启动节点的服务器上编辑grastate.dat文件(可以使用find命令查找位置),将safe_to_bootstrap的值设为1,使用/usr/bin/mysqld_bootstrap命令启动该节点,其他节点启动与以前一致

注意:
"gcomm://" 是特殊的地址,仅仅是Galera cluster初始化启动时候使用。如果集群启动以后,节点有变化,再次启动的时候必须先修改
"gcomm://"为其他节点的集群地址,对应各节点的hostname或者dns名称
启动第一个节点的时候,"gcomm://"为空值,不指定任何机器
设置第二个节点的时候,指定第一个节点的IP"gcomm://192.168.80.230"
设置第三个节点的时候,指定第一和第二节点的IP:"gcomm://192.168.80.230,192.168.80.231"
wsrep_node_name 本节点计算机名
wsrep_node_address 本节点IP

  • 加入节点
第二个节点加入,地址写第一个节点地址
# /ops/mysql-galera/mysql-wsrep-5.7.24/bin/mysqld_safe --wsrep_cluster_address=gcomm://192.168.80.230 >/dev/null &

第三个节点加入,地址写第一个和第二个节点地址
# /ops/mysql-galera/mysql-wsrep-5.7.24/bin/mysqld_safe --wsrep_cluster_address=gcomm://192.168.80.230,192.168.80.231 >/dev/null &
  • 监控
查看mysql版本
mysql> SHOW GLOBAL VARIABLES LIKE 'version';

查看wsrep版本
mysql> SHOW GLOBAL STATUS LIKE 'wsrep_provider_version';

查看集群地址
mysql> SHOW VARIABLES LIKE 'wsrep_cluster_address';

查看Galera集群状态
mysql> show status like 'wsrep%';
  • 监控状态说明
  • 集群完整性检查:
    • wsrep_cluster_state_uuid:在集群所有节点的值应该是相同的,有不同值的节点,说明其没有连接入集群.
    • wsrep_cluster_conf_id:正常情况下所有节点上该值是一样的.如果值不同,说明该节点被临时”分区”了.当节点之间网络连接恢复的时候应该会恢复一样的值.
    • wsrep_cluster_size:如果这个值跟预期的节点数一致,则所有的集群节点已经连接.
    • wsrep_cluster_status:集群组成的状态.如果不为”Primary”,说明出现”分区”或是”split-brain”状况.
  • 节点状态检查:
    • wsrep_ready: 该值为ON,则说明可以接受SQL负载.如果为Off,则需要检查wsrep_connected.
    • wsrep_connected: 如果该值为Off,且wsrep_ready的值也为Off,则说明该节点没有连接到集群.(可能是wsrep_cluster_address或wsrep_cluster_name等配置错造成的.具体错误需要查看错误日志)
    • wsrep_local_state_comment:如果wsrep_connected为On,但wsrep_ready为OFF,则可以从该项查看原因.
  • 复制健康检查:
    • wsrep_flow_control_paused:表示复制停止了多长时间.即表明集群因为Slave延迟而慢的程度.值为0~1,越靠近0越好,值为1表示复制完全停止.可优化wsrep_slave_threads的值来改善.
    • wsrep_cert_deps_distance:有多少事务可以并行应用处理.wsrep_slave_threads设置的值不应该高出该值太多.
    • wsrep_flow_control_sent:表示该节点已经停止复制了多少次.
    • wsrep_local_recv_queue_avg:表示slave事务队列的平均长度.slave瓶颈的预兆.

    最慢的节点的wsrep_flow_control_sent和wsrep_local_recv_queue_avg这两个值最高.这两个值较低的话,相对更好.

  • 检测慢网络问题:
    • wsrep_local_send_queue_avg:网络瓶颈的预兆.如果这个值比较高的话,可能存在网络瓶
  • 冲突或死锁的数目:
    • wsrep_last_committed:最后提交的事务数目
    • wsrep_local_cert_failures和wsrep_local_bf_aborts:回滚,检测到的冲突数
  • 其他特性
  • Galera arbitrator

        garbd可以做为一个无数据的Galera节点运行,该节点可以用一种优化的方式帮助检测和处理网络分裂(network splits).
一个好的garbd节点可以防止”split-brain”状况发生.

  • SSL支持

    Galera支持SSL通讯,这对增加数据安全性很重要(特别是云部署).可以通过参数socket.ssl_cert和socket.ssl_key来定义.

  • SST方式选择

    SST允许新接入的节点使用定制的方法来获取最初的数据.SST方式有mysqldump(默认,比较慢),rsync,和xtrabackup(很快).
    可通过wsrep_sst_method来定义.Production环境中建议使用rsync或是xtrabackup方式

猜你喜欢

转载自blog.csdn.net/qq_15753385/article/details/86287247