mariadb 10.6 galera 集群 - docker部署 mysql



docker run -d  -p 3361:3306 --name db01 -h db01 --restart=always --net=mynet --ip 172.19.0.61 -v /etc/localtime:/etc/localtime:ro  -e MYSQL_ROOT_PASSWORD=wdqdmm@r  -e MYSQL_ALLOW_EMPTY_PASSWORD=no  -v  /data/file:/data/file/  -v /data/docker/mysql/mariadb/50-server.cnf:/etc/mysql/mariadb.conf.d/50-server.cnf:ro  -v /data/docker/mysql/mariadb/60-galera-01.cnf:/etc/mysql/mariadb.conf.d/60-galera.cnf  mariadb:latest  --wsrep-new-cluster


docker run -d  -p 3362:3306 --name db02 -h db02 --restart=always --net=mynet --ip 172.19.0.62 -v /etc/localtime:/etc/localtime:ro  -e MYSQL_ROOT_PASSWORD=wdqdmm@r  -e MYSQL_ALLOW_EMPTY_PASSWORD=no  -v  /data/file:/data/file/  -v /data/docker/mysql/mariadb/50-server.cnf:/etc/mysql/mariadb.conf.d/50-server.cnf:ro  -v /data/docker/mysql/mariadb/60-galera-02.cnf:/etc/mysql/mariadb.conf.d/60-galera.cnf  mariadb:latest  --wsrep-new-cluster


docker run -d  -p 3363:3306 --name db03 -h db03 --restart=always --net=mynet --ip 172.19.0.63 -v /etc/localtime:/etc/localtime:ro  -e MYSQL_ROOT_PASSWORD=wdqdmm@r  -e MYSQL_ALLOW_EMPTY_PASSWORD=no  -v  /data/file:/data/file/  -v /data/docker/mysql/mariadb/50-server.cnf:/etc/mysql/mariadb.conf.d/50-server.cnf:ro  -v /data/docker/mysql/mariadb/60-galera-02.cnf:/etc/mysql/mariadb.conf.d/60-galera.cnf  mariadb:latest  --wsrep-new-cluster


docker exec -it db01 /bin/bash

docker exec -it db02 /bin/bash

docker exec -it db03 /bin/bash


apt-get update -y

apt-get install -y wget vim net-tools curl git cron rsync

apt install iputils-ping

apt-get dist-upgrade -y 

apt-get upgrade -y 

apt autoremove    

apt clean


#只有使用--subnet创建的网络才能指定静态IP

docker network create --driver bridge --subnet 172.19.0.0/24 --gateway 172.19.0.1 mynet


# MariaDB-Galera部署

----Galera Cluster的特点

  多主架构:真正的多点读写的集群,在任何时候读写数据,都是最新的

  同步复制:集群不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失

  并发复制:从节点APPLY数据时,支持并行执行,更好的性能

  障切换:在出现数据库故障时,因支持多点写入,切换容易

  热插拔:在服务期间,如果数据库挂了,只要监控程序发现的够快,不可服务时间就会非常少。在节点故障期间,节点本身对集群的影响非常小

  自动节点克隆:在新增节点,或者停机维护时,增量数据或者基础数据不需要人工手动备份提供,Galera Cluster会自动拉取在线节点数据,最终集群会变为一致

  对应用透明:集群的维护,对应用程序是透明的


---配置主机对应关系

cat >>/etc/hosts<<"EOF"

192.168.142.136 db136

192.168.142.137 db137

192.168.142.138 db138

EOF

---配置公钥认证(可选)

ssh-keygen # 一路回车即可(三台机器都需要操作)

ssh-copy-id -i ~/.ssh/id_rsa.pub db137 (只需要在第一台操作)

ssh-copy-id -i ~/.ssh/id_rsa.pub db138 (只需要在第一台操作)

-验证登录

ssh root@db137

ssh root@db138


---三台数据库使用同样的配置文件


# vim /data/docker/mysql/mariadb/60-galera.cnf

[galera]
# Mandatory settings
wsrep_on                 = ON
wsrep_cluster_name       = "MariaDB Galera"
wsrep_provider=/usr/lib/galera/libgalera_smm.so
#本机的ip 不要放在第一位
wsrep_cluster_address    = "gcomm://127.0.0.1:4567,127.0.0.1:4568,127.0.0.1:4569"
binlog_format            = row
default_storage_engine   = InnoDB
innodb_autoinc_lock_mode = 2
wsrep_causal_reads=ON
# Allow server to accept connections on all interfaces.
bind-address = 0.0.0.0
# Optional settings
wsrep_slave_threads = 1
innodb_flush_log_at_trx_commit = 0
wsrep_sst_method=rsync
wsrep_sst_auth=root:wdqdmm@r
[galera]
wsrep_on=ON 
wsrep_cluster_name=”cluster”  
wsrep_provider=/usr/lib/galera/libgalera_smm.so     #galera的库文件的地址
wsrep_cluster_address="gcomm://192.168.206.3,192.168.206.5,192.168.206.6"   #各节点的ip
wsrep_node_name=node1         #当前节点主机名  
wsrep_node_address=192.168.206.3             #当前节点IP
binlog_format=row        #二进制日志设置为行模式  row (安全性最高,性能最低)
default_storage_engine=InnoDB    #使用的默认引擎 innoDB  支持事务
innodb_autoinc_lock_mode=2      #2为性能最好  
bind-address=0.0.0.0               #本台机器所有网卡  
wsrep_slave_threads=1              #并发线程数
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(刷到磁盘)操作
innodb_buffer_pool_size=120M       #设置缓存池大小
#state_snapshot_transfer(SST)使用的传输方法,
#可用方法有mysqldump、rsync和xtrabackup,
#前两者在传输时都需要对Donor加全局只读锁(FLUSH TABLES WITH READ LOCK),
#xtrabackup则不需要(它使用percona自己提供的backup lock)。强烈建议采用xtrabackup
wsrep_sst_method=rsync                 #复制方式为rsync,要确保安装了rsync
wsrep_sst_auth=sst:123456          #节点N的数据库账户和密码
wsrep_causal_reads=ON      
#避免各个节点的数据不一致,这种情况需要等待全同步复制 将此文件复制到master1、master2,
#pxc_strict_mode=ENFORCING          #PXC严格模式,建议开启
#注意要把 wsrep_node_name 和 wsrep_node_address 改成相应节点的 hostname 和 ip。

注:graler 集群最好至少三个,两个的话。如果出现网络波动可能会出现脑裂;


---重置仲裁将主组件引导到最高级的节点上

set global wsrep_provider_options='pc.bootstrap=yes


---启动服务

首次启动时,需要初始化集群,在其中一个节点上执行命令

/etc/init.d/mysql start  --wsrep-new-cluster

-而后正常启动其它节点

service mysql start


---验证

show status like "wsrep_ready";           # 查看是否启用galera插件, ON表示是

show status like 'wsrep_cluster_size';   # 这里应该显示集群里有3个节点

show status like 'wsrep_connected';    # 这里应该显示ON

show status like 'wsrep_local_state_comment';  # 当前的节点是正常提供服务的状态,且与集群数据状态是一致的

show status like 'wsrep_cluster_status';    # 集群的目前状态,PRIMARY(正常)/NON_PRIMARY(不一致)

show status like 'wsrep_incoming_addresses';  # 查看集群节点ip


Open:节点启动成功,尝试连接到集群

Primary: 节点已处于集群中,在新节点加入时,选取donor进行数据库同步时会产生的状态

Joiner: 节点处于等待接收或正在接收同步文件的状态

Joined: 节点完成数据同步,但还有部分数据不是最新的,在追赶与集群数据一致的状态

Synced: 节点正常提供服务的状态,表示当前节点数据状态与集群数据状态是一致的

Donor: 表示该节点被选为Donor节点,正在为新加进来的节点进行全量数据同步,此时该节点对客户端不提供服务


---查看集群全部相关状态参数

show status like 'wsrep_%';

-正常的集群显示结果: 

wsrep_connected = on 链接已开启 

wsrep_cluster_size =2 集群中节点的数量 

wsrep_incoming_addresses=ip1,ip2 


---端口

3306:数据库对外服务的端口号

4444:请求SST SST: 指数据一个镜象传输 xtrabackup , rsync ,mysqldump 在新节点加入时起作用

4567:  组成员之间进行沟通的一个端口号

4568:  传输IST用的。相对于SST来说的一个增量  ,节点下线,重启加入时起作用


---名词:

WS:write set 写数据集

IST: Incremental State Transfer 增量同步

SST:State Snapshot Transfer 全量同步


签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回