Sign inSign up

veadan/mariadb-galera

By veadan

•Updated almost 6 years ago

mysql集群部署,并配置负载均衡

Image
0

401

veadan/mariadb-galera repository overview

Mariadb Galera Cluster 集群镜像(下面简称MGC),仅支持Host网络模式。

⁠相比官方镜像的改进点:
  • 一键式下发,无人值守创建MGC集群;
  • 支持MySQL(包含galera)全局任意参数设置;
  • 支持镜像之外的任何自定义脚本,支持sh、sql、gz、env等;
  • 成员节点故障恢复后自动探测,找到可用点后重新加入集群;
  • 支持集群、单点以及普通三种模式,可以覆盖各种关系存储场景;
  • 支持数据库初始化自定义设置,包含root、自定义账号、数据库、密码、主机等相关信息;
  • 支持节点恢复时的传输限速(单位KB/s),解决官方镜像恢复顶满带宽问题,支持rsync / mariadbbackup2种同步方式限速。
⁠使用方法:
⁠集群模式启动必须传入的参数
  • my_port 默认3307,其他galera通信端口将使用前面加1、加2、加3约定规则,比如 gcast 采用13307。
  • node1=192.168.1.100
  • node2=192.168.1.101
  • node3=192.168.1.102
⁠目前已支持的参数
  • mysql_user 创建用户
  • mysql_user_database 用户权限DB
  • mysql_user_password 用户密码
  • mysql_user_grand grand权限
  • mysql_database 创建数据库
  • mysql_root_host root可远程的主机
  • mysql_root_password root密码
  • mysql_random_root_password 随机密码
  • transfer_limit 传输限速,单位 kb/s
  • cluster_name 集群名字
  • cluster_mode 是否使用集群模式
  • join_address 指定已存在的成员IP
  • interface 指定绑定的网卡,用于集群自动探测时确认容器身份(nodeX),缺省优先级为:br0 > eth1 > eth0,若不符合要求请务必指定实际网卡名
  • local_addr 指定本地IP,用于兼容本地网卡上绑定了VIP的特殊情况
⁠支持任意mysql、galera参数

MySQLl参数使用my_${参数名} 形式,比如:my_tmp_talbe_size=512M Galera参数使用wsrep_${参数名} 形式,比如:wsrep_sst_method=rsync

⁠快速启动demo

在192.168.1.100、192.168.1.101、192.168.1.102三个节点上分别执行如下命令即可(不要求先后,会自动组建集群):

docker run -d \
    --net=host \
    --name=mysql-3306 \
    -e cluster_name=mysql \
    -e my_port=3310 \
    -e node1=192.168.1.100 \
    -e node2=192.168.1.101 \
    -e node3=192.168.1.102 \
    -e mysql_user=demo \
    -e mysql_user_password=123456 \
    -v /data/mariadb-galera:/data/mariadb-galera \
   veadan/mariadb-galera

执行后,可以执行 docker logs -f mysql-3306 查看启动日志,也可以执行 tail -f /data/mariadb-galera/logs/error.log 查看运行日,启动成功后,可以执行如下命令查看集群状态:

mysql -h192.168.1.100 -P3310 -udemo -p123456 -e "show status like '%wsrep%'"

⁠安装负载均衡
yum install -y haproxy keepalived

# 备份之前的配置文件
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup

vim /etc/haproxy/haproxy.cfg
⁠全量覆盖haproxy的配置
#---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

# 默认的defaults模块以上不动,以下部分替换成如下内容,两台haproxy配置一致.

listen MysqlDb_proxy
        bind 0.0.0.0:3316
        mode tcp
        option tcplog
        balance leastconn     #使用最少连接方式调度
        server MysqlDb1 172.16.164.129:3306 check port 3306 maxconn 300
        server MysqlDb2 172.16.164.130:3306 check port 3306 maxconn 300
        server MysqlDb3 172.16.164.128:3306 check port 3306 maxconn 300

listen stats     #监控
       mode http
       bind 0.0.0.0:8888                    #web监控登录端口
       stats enable
       stats uri /dbs                        #we监控端登录地址http:ip:8888/dbs
       stats realm haproxy\ statistics
       stats auth admin:admin                #web监控登端录用户和密码
⁠修改日志系统:
vim /etc/rsyslog.conf

#在centos6.x系统中,系统日志的配置文件原来的/etc/syslog.conf已经变为/etc/rsyslog.conf
 
###Provides UDP syslog reception               //去掉下面两行注释,开启UDP监听
 
$ModLoad imudp
$UDPServerRun 514
 
local2.* /var/log/haproxy.log           #添加此行


vim  /etc/sysconfig/rsyslog,添加如下内容
SYSLOGD_OPTIONS="-c 2 -r -m 0"          
 
#注释:-c 2 使用兼容模式,默认是 -c 5,-r开启远程日志,-m 0标记时间戳。单位是分钟,为0时,表示禁用该功能  
⁠重启日志

service rsyslog restart

⁠启动haproxy

systemctl start haproxy

编辑vim /etc/keepalived/check_haproxy.sh脚本
#!/bin/bash
A=`ps -C haproxy --no-header | wc -l`
if [ $A -eq 0 ]
then
	systemctl restart haproxy
	echo $(date "+%Y-%m-%d %H:%M:%S")" [info] Start haproxy" >> /dev/null	
	sleep 3
	if [ `ps -C haproxy --no-header | wc -l` -eq 0 ]
	then
		systemctl stop keepalived
		echo $(date "+%Y-%m-%d %H:%M:%S")" [info] Stop keepalived" >> /dev/null
	fi
fi


cd /etc/keepalived
chmod +x ./check_haproxy.sh



配置keeplived
# 备份之前的配置文件
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.backup

vim /etc/keepalived/keepalived.conf
⁠配置如下全量覆盖
! Configuration File for keepalived
#简单的头部,这里主要可以做邮件通知报警等的设置
global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from root@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_Master

}
⁠预先定义一个脚本,方便后面调用,也可以定义多个,方便选择;
vrrp_script chk_haproxy {
    script "/etc/keepalived/check_haproxy.sh"   #具体脚本路径
    interval 5  #脚本循环运行间隔
    weight -5
}
#VRRP虚拟路由冗余协议配置
vrrp_instance VI_1 {    #VI_1 是自定义的名称;
    state BACKUP        #MASTER表示是一台主设备,BACKUP表示为备用设备【我们这里因为设置为开启不抢占,所以都设置为备用】
    nopreempt   #开启不抢占
    interface ens33     #指定VIP需要绑定的物理网卡
    virtual_router_id 51        #VRID虚拟路由标识,也叫做分组名称,该组内的设备需要相同
    priority 100                #定义这台设备的优先级 1-254;开启了不抢占,所以此处优先级必须高于另一台
    advert_int 1        #生存检测时的组播信息发送间隔,组内一致
    authentication {    #设置验证信息,组内一致
        auth_type PASS  #有PASS 和 AH 两种,常用 PASS
        auth_pass 1111  #密码
    }
    track_script {      #使用在这个域中使用预先定义的脚本,上面定义的
        chk_haproxy
    }
    virtual_ipaddress {
        172.16.164.188  #指定VIP地址,组内一致,可以设置多个IP
    }
    notify_master /etc/keepalived/sendmail.pl

Tag summary

Content type

Image

Digest

Size

176.1 MB

Last updated

almost 6 years ago

docker pull veadan/mariadb-galera