coldsmog运维笔记
Linux 中间件部署
升级MySQL至最新版本
Zabbix与Zabbix-agent2部署
Galera-Cluster-MySQL 部署
JDK8 部署
FastDFS 部署
MySQL 主从备搭建
RabbitMQ 部署
Redis 部署
Nginx 部署
Gitlab + Jenkins + Sonarqube 部署
Docker 部署
keepalive的安装
Gitlab-ce 部署
Graalvm 部署
Nacos 部署
Kafka 部署
PostgreSQL 部署
MongoDB 部署
Fizz网关搭建
Vue项目部署(Nginx)
CentOS 运维笔记
centos 添加自定义服务
Linux 系统挂载
MySQL命令行
故障排查
Docker 运维笔记
keepalived 配置笔记
win 编辑EFI
win 安装 openclaw
本站点使用 MrDoc 构建
-
+
Galera-Cluster-MySQL 部署
## 禁用SELinux 您必须禁用SELinuxmysqld或对其进行配置,以允许mysqld其运行外部程序并在非特权端口上打开侦听套接字,即非特权用户可以执行的操作。 1. 编辑 /etc/selinux/config,令SELINUX=disabled 2. 保存后重启 3. getenforce 命令查看状态 ## 开启数据库端口和集群端口 ``` firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --zone=public --add-port=4567/tcp --permanent firewall-cmd --zone=public --add-port=4568/tcp --permanent firewall-cmd --zone=public --add-port=4444/tcp --permanent firewall-cmd --zone=public --add-port=4567/upd --permanent firewall-cmd --reload ``` ## 写入hosts,非必要 ``` echo 172.16.19.163 mysql.galera.test1 >> /etc/hosts echo 172.16.19.164 mysql.galera.test2 >> /etc/hosts echo 172.16.19.50 mysql.galera.test3 >> /etc/hosts /etc/init.d/network restart ``` ## 下载galera ``` cat > /etc/yum.repos.d/galera.repo <<EOF [galera] name=galera baseurl= http://releases.galeracluster.com/galera-3/centos/7/x86_64/ gpgcheck=0 [mysql-wsrep] name = mysql-wsrep baseurl = http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/ gpgcheck = 0 EOF yum makecache yum repolist yum install -y mysql-wsrep-5.7 galera-3 # 增量备份插件 innobackupex yum localinstall -y https://mirrors.tuna.tsinghua.edu.cn/percona/centos/7/RPMS/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm ``` ## 编辑数据配置并进行调优 ``` [mysqld] user = mysql # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' datadir=/var/lib/mysql #socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 ## see more:https://galeracluster.com/library/training/tutorials/configuration.html wsrep_on=ON # 插件包so的位置 wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so # 所有节点必须一致us wsrep_cluster_name='galera' # 添加所有可能的节点IP,第一个连接需要为初始化集群节点的IP wsrep_cluster_address='gcomm://172.16.18.13,172.16.18.14,172.16.18.15' # 节点名称 wsrep_node_name='galera3' # 节点期望接收客户端连接的IP地址和端口号 wsrep_node_address='172.16.18.15' # 复制时身份验证信息(即用户名:密码),除了逻辑复制mysqldump,其他方法不需要此参数 wsrep_sst_auth=galera:XXXXXXX123 # 定义节点在状态快照传输中使用的方法或脚本。 # mysqldump 除小数据集外,这速度很慢,但它是测试最多的选项 # rsync 默认值.最快,但只能在节点启动时使用,不能和运行中的InnoDB存储引擎一起使用 # rsync_wan 此选项与几乎相同rsync,但是使用delta-xfer算法来最大程度地减少网络流量 # xtrabackup此选项是基于Perconaxtrabackup工具的一种快速且几乎无阻塞的状态转移方法.需要参考官网额外配置 wsrep_sst_method=xtrabackup # MIXED 优先STATEMENT,STATEMENT不能的就ROW记录 # galera只支持ROW binlog_format=ROW # galera只支持InnoDB default_storage_engine=InnoDB # MySQL打开的文件描述符限制,默认最小1024 open_files_limit = 65535 ## see more: https://dev.mysql.com/doc/refman/8.0/en/innodb-auto-increment-handling.html # InnoDB提供了一种可配置的锁定机制,可以显着提高将行添加到带有AUTO_INCREMENT列的表的SQL语句的可伸缩性和性能 # simple insert 可以预先确定要插入行数的语句(最初处理该语句时) # bulk insert 事先不知道要插入行数(以及所需的自动增量值的数目)的语句 # mixed insert 这些是“simple insert”语句,用于指定某些(但不是全部)新行的自动增量值 # 0 traditional 传统锁定,兼容5.1之前,表级AUTO-INC锁定,主从复制时,自增列使用与master相同的值 # 1 consecutive 连续锁定,不同insert不同锁定。主从复制表现跟traditional模式下一样,但是性能会有所提高 # 2 interleaved 交错锁定,主从复制的同一张表下的同一行id有可能不一样 # # 当innodb_autoinc_lock_mode设置为传统锁定模式(即的值0)或连续锁定模式(即的值1)时, # 可能导致无法解决的死锁,并使系统在Galera Cluster中无响应 innodb_autoinc_lock_mode=2 # InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间 # 独立表空间优点: # 1.每个表都有自已独立的表空间。 # 2.每个表的数据和索引都会存在自已的表空间中。 # 3.可以实现单表在不同的数据库中移动。 # 4.空间可以回收(除drop table操作处,表空不能自已回收) # 缺点: # 单表增加过大,如超过100G # 结论: # 共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整:innodb_open_files innodb_file_per_table=1 # InnoDB使用一个缓冲池来保存索引和原始数据, 不像MyISAM. # 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少. # 在一个独立使用的数据库服务器上,推荐设置这个变量到服务器物理内存大小的80% # 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸. # 为了补偿Galera Cluster在独立的MySQL数据库服务器上增加的内存使用量,您应该将通常值减少5% # 注意在32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制. # 这里是 16G*0.75 = 12G innodb_buffer_pool_size = 12G # redo日志(重做日志)文件的大小 = innodb_log_file_size * innodb_log_files_in_group(默认2), # 配置的Redo空间越大,InnoDB就能更好的优化写操作.也意味着更长的恢复时间 # 每1GB的Redo log的恢复时间大约在5分钟 # 单文件恢复1min # 后期依据此调整 https://blog.csdn.net/langkeziju/article/details/51094289 innodb_log_file_size = 256M ## 为了在InnoDB与事务一起使用的复制设置中具有持久性和一致性,请执行以下操作: # innodb_flush_log_at_trx_commit = sync_binlog =1 # 但是galera 采用写集复制,所以可以允许他=0 or 2,除非所有节点down,否则不丢失 # 0:每秒写入一次日志并将其刷新到磁盘。未刷新日志的事务可能会在崩溃中丢失 # 1:默认值。要完全符合ACID,必须使用1。每次事务提交时,日志都会写入并刷新到磁盘。 # 2:在每次事务提交后写入日志,并每秒刷新一次到磁盘。未刷新日志的事务可能会在崩溃中丢失 innodb_flush_log_at_trx_commit = 0 # 0:默认值。事务提交后,将二进制日志从缓冲写入磁盘,但是不进行刷新操作(fsync),此时只是写入了操作系统缓冲 # 1:事务提交后,将二进制文件写入磁盘并立即执行刷新操作,相当于是同步写入磁盘,不经过操作系统的缓存。 # N:每写N次操作系统缓冲就执行一次刷新操作。 sync_binlog =1 ``` ## 启动数据库 ``` systemctl start mysqld systemctl enable mysqld ``` ## 初始密码 ``` export passwd=`grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}'` echo $passwd ``` ## 修改密码 ``` mysql -uroot -p$passwd mysql > set global validate_password_policy=0; mysql > set global validate_password_length=6; mysql > CREATE USER 'root'@'%' IDENTIFIED BY 'XXXXXXX123'; mysql > set password for root@localhost = password('XXXXXXX123'); mysql > update mysql.user set authentication_string=password('XXXXXXX123') where user='root'; mysql > GRANT all privileges ON *.* TO galera@'%' IDENTIFIED BY 'XXXXXXX123'; mysql > FLUSH PRIVILEGES; mysql > exit ``` ## 启动集群 ``` # 第一个节点需要初始化 /usr/bin/mysqld_bootstrap # 其他节点正常启动 systemctl restart mysqld ``` ## 验证 ``` # 端口 ss -tnlp | egrep '3306|4567' # 进入mysql后验证 show status like 'wsrep_local_state_comment'; show status like 'wsrep_cluster%'; ``` ## 如果失败,查看错误日志 ``` # wsrep_cluster_state_uuid 匹配不上的话 # 清理节点缓存 rm -rf /var/lib/mysql/grastate.dat rm -rf /var/lib/mysql/galera.cache rm -rf /var/lock/subsys/mysql # 强制删除死线程 直接关闭可能无法关闭 killall -9 mysqld && systemctl stop mysqld echo "" > /var/log/mysqld.log systemctl start mysqld # 查看日志 tail -n 300 /var/log/mysqld.log ``` ## 备份 https://galeracluster.com/library/training/tutorials/galera-backup.html 源文档:https://galeracluster.com/library/training/tutorials/index.html
寒烟濡雨
2021年7月8日 14:10
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码