构建Gelera集群
搭建 galera 集群环境 ############################
前提条件: ==================================
建议 搭建 管理跳板机, 接下来的 操作,能够 利用 批量 管理脚本 来执行
集群中的节点, 必须相互能解析 彼此 的主机名 (/etc/hosts 文件一致,相互解析)
集群中的所有节点,时钟必须一致。
阿里云同步时间:ntpdate ntp1.aliyun.com
在此使用了自动化运维管理
1、 画好架构图,确定参数的主机数量
2、 停止所有的 监控脚本,停止 所有主机上的 编译版本 的 mysql 的服务, 确定 21上拥有原始数据备份。
其余的 25 26 , 删除他们的所有数据,确保 他们是空库。
此时: 21 上有数据, 25 26 都是空库状态。
3、确认所有节点的 编译版的mysql 不会 在 开机 自启动。 rc.local 检查一下。
4、所有 主机 统一执行
## 库文件, 都是 rpm安装的话,这个库会冲突。
[root@mysql-21 ~/gelera]# yum remove mariadb-libs
5、 安装rpm包,使用本地源即可 ============
将 gelera 相关的 rpm 包,发送 至所有主机, 这里 我们存放在 /root/gelera 目录下
[root@mysql-21 ~/gelera]#yum install rsync
[root@mysql-21 ~/gelera]#rpm -ivh /root/gelera/mysql-wsrep-common-5.7-5.7.21-25.14.el7.x86_64.rpm
[root@mysql-21 ~/gelera]#rpm -ivh /root/gelera/mysql-wsrep-libs-5.7-5.7.21-25.14.el7.x86_64.rpm
[root@mysql-21 ~/gelera]#rpm -ivh /root/gelera/mysql-wsrep-client-5.7-5.7.21-25.14.el7.x86_64.rpm
[root@mysql-21 ~/gelera]#yum install -y /root/gelera/mysql-wsrep-server-5.7-5.7.21-25.14.el7.x86_64.rpm
[root@mysql-21 ~/gelera]# yum -y install /root/gelera/galera-3-25.3.23-2.el7.x86_64.rpm
6、 修改 配置文件 =======================
原先编译版的 配置文件, 被替换掉,重新命名为 /etc/my.cnf.rpmsave
还原回来
[root@mysql-21 ~/gelera]# mv /etc/my.cnf.rpmsave /etc/my.cnf
使用之前的 配置文件,做出以下修改################
192.168.217.21
============================================================
[root@mysql-21 ~/gelera]# cat /etc/my.cnf
[client]
port=3306
socket=/tmp/mysql.sock
password=123123
[mysqld]
default_password_lifetime=30
character-set-server=utf8
collation-server=utf8_general_ci
default_storage_engine=InnoDB
max_connections=2000
#max_connect_errors=100
innodb_buffer_pool_size=800M
innodb_flush_log_at_trx_commit=2
innodb_file_per_table=ON
innodb_data_home_dir="/data/mysql"
innodb_data_file_path=ibdata1:12M:autoextend
innodb_log_buffer_size=16M
innodb_log_file_size=52428800
innodb_log_files_in_group=2
#innodb_log_group_home_dir="./"
transaction-isolation=REPEATABLE-READ
general_log=OFF
log_output=file
general_log_file=/data/mysql/general.log
slow_query_log=ON
slow_query_log_file=/data/mysql/slow.log
long_query_time=2.000000
log-bin=/bin-log/mysql-bin
**server-id=21** #主机名
max_binlog_size=1073741824
expire_logs_days=0
binlog_format=row
binlog_rows_query_log_events=OFF
#binlog-do-db=class
#relay-log=/bin-log/relay-log ##注释掉所有中继日志内容
#relay-log-index=/bin-log/relay-log.index
#slave_net_timeout=10
#connect_timeout=20
#relay_log_info_repository=Table
#master_info_repository=Table
#relay_log_recovery=ON
#read_only=OFF
#sync_relay_log=10000
#sync_binlog=1
#relay_log_purge=0
#plugin-load=rpl_semi_sync_master=semisync_master.so ## 关闭 半同步复制机制,现在已经是完全同步复制。
#rpl_semi_sync_master_enabled=1
gtid-mode=on
enforce-gtid-consistency=ON
wsrep_on=on ## 新加入以下配置
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so ##写集复制模块
wsrep_cluster_name='cluster1' ##新建集群的名称,可以自行命名
wsrep_cluster_address=**'gcomm://'** ## 进入集群时的,参考对象,如果是集群发起人,这里应该为空。
wsrep_node_name=**'mysql-21'** ##本机主机名
wsrep_node_address='**192.168.10.21**' ## 本机IP地址
wsrep_sst_auth=uplooking:123123 ## 统一的数据库 访问的 账号密码
wsrep_sst_method=rsync ## 用于新加入的 节点,同步数据时,使用的工具。
skip-name-resolve
#skip-grant-tables
user=mysql
port=3306
#basedir=/usr/local/mysql57 ##注释掉
datadir=/data/mysql
tmpdir=/tmp
socket=/tmp/mysql.sock
query_cache_size=128M
query_cache_type=OFF
query_cache_wlock_invalidate=OFF
log-error=/data/mysql/mysqld.log
pid-file=/data/mysql/mysqld.pid
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
============================================================
7、在192.168.217.21 ( 集群发起人 )上 启动服务 =================
启动数据库:
systemctl start mysqld
### PXC/Galera Cluster集群端口
如果能正常启动,查看一下端口
[root@mysql-80 ~/gelera]# netstat -ntl
3306 数据库对外提供服务的端口
4567 集群节点间相互通信 (相互监听健康状况) 的端口
------------------------------------------------------------------------------------------------
4444 镜像数据传输SST,集群数据同步端口,全量同步,新节点加入时起作用
4568 增量数据同步IST,节点下线、重启后使用该端口,增量同步数据。
8、登录mysql,查看写集复制的状态
mysql> show status like “%wsrep%”;
看到以下信息,表明集群已经开始运行,此时集群只有一个节点。
查看显示有以下这些参数则满足
==========================================
| wsrep_local_state_comment | Synced
| wsrep_incoming_addresses | 192.168.217.21:3306,
| wsrep_connected | ON
| wsrep_ready
==========================================
至此,gelera 集群的 第一台 主机,(发起人)已经架构好了
给集群加入新的节点 =======================
将192.168.217.25 加入当前集群,确认该主机数据库目录是空库。
等会会由集群中的主机,自动执行 全量 备份 过来。
1、 安装相关组件 ====================
将 gelera 相关的 rpm 包,发送 至所有主机, 这里 我们存放在 /root/gelera 目录下
[root@mysql-25 ~/gelera]#yum install rsync
[root@mysql-25 ~/gelera]#rpm -ivh /root/gelera/mysql-wsrep-common-5.7-5.7.21-25.14.el7.x86_64.rpm
[root@mysql-25 ~/gelera]#rpm -ivh /root/gelera/mysql-wsrep-libs-5.7-5.7.21-25.14.el7.x86_64.rpm
[root@mysql-25 ~/gelera]#rpm -ivh /root/gelera/mysql-wsrep-client-5.7-5.7.21-25.14.el7.x86_64.rpm
[root@mysql-25 ~/gelera]#yum install -y /root/gelera/mysql-wsrep-server-5.7-5.7.21-25.14.el7.x86_64.rpm
[root@mysql-25 ~/gelera]# yum install /root/gelera/galera-3-25.3.23-2.el7.x86_64.rpm
2、 恢复 并修改 它的配置文件 ======================
192.168.217.25 :标记出 与 21 不同之处
============================================================
[root@mysql-25 ~/gelera]# cat /etc/my.cnf
[client]
port=3306
socket=/tmp/mysql.sock
password=123123
[mysqld]
default_password_lifetime=30
character-set-server=utf8
collation-server=utf8_general_ci
default_storage_engine=InnoDB
max_connections=2000
#max_connect_errors=100
innodb_buffer_pool_size=800M
innodb_flush_log_at_trx_commit=2
innodb_file_per_table=ON
innodb_data_home_dir="/data/mysql"
innodb_data_file_path=ibdata1:12M:autoextend
innodb_log_buffer_size=16M
innodb_log_file_size=52428800
innodb_log_files_in_group=2
#innodb_log_group_home_dir="./"
transaction-isolation=REPEATABLE-READ
general_log=OFF
log_output=file
general_log_file=/data/mysql/general.log
slow_query_log=ON
slow_query_log_file=/data/mysql/slow.log
long_query_time=2.000000
log-bin=/bin-log/mysql-bin
server-id=25
max_binlog_size=1073741824
expire_logs_days=0
binlog_format=row
binlog_rows_query_log_events=OFF
#binlog-do-db=class
#relay-log=/bin-log/relay-log ##注释掉所有中继日志内容
#relay-log-index=/bin-log/relay-log.index
#slave_net_timeout=10
#connect_timeout=20
#relay_log_info_repository=Table
#master_info_repository=Table
#relay_log_recovery=ON
#read_only=OFF
#sync_relay_log=10000
#sync_binlog=1
#relay_log_purge=0
#plugin-load=rpl_semi_sync_master=semisync_master.so ## 关闭 半同步复制机制,现在已经是完全同步复制。
#rpl_semi_sync_master_enabled=1
gtid-mode=on
enforce-gtid-consistency=ON
wsrep_on=on
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='cluster1'
wsrep_cluster_address='gcomm://192.168.217.21'
wsrep_node_name='mysql-25'
wsrep_node_address='192.168.217.25'
wsrep_sst_auth=uplooking:123123
wsrep_sst_method=rsync
skip-name-resolve
#skip-grant-tables
user=mysql
port=3306
#basedir=/usr/local/mysql57 ##注释掉
datadir=/data/mysql
tmpdir=/tmp
socket=/tmp/mysql.sock
query_cache_size=128M
query_cache_type=OFF
query_cache_wlock_invalidate=OFF
log-error=/data/mysql/mysqld.log
pid-file=/data/mysql/mysqld.pid
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
============================================================
保存,退出
3、 修改好配置后,开始启动数据库 ======================
启动服务,
[root@mysql-25 /data/mysql]# systemctl start mysqld
成功后,观察
1、3306 4567 端口
2、观察 /data/mysql 下, 全量 数据是否已经拷贝
3、登录mysql,查询 学生表 数据是否同步
4、再次查看 mysql> show status like “%wsrep%”; 观察集群新成员是否加入。
如果没有问题,则集群已经 扩展 2 个节点 。
Galera 集群搭建完成,进行一系列测试 :================================
由于galera同步复制在每个写事务提交时都增加了 replicate trx 和 certification test 的开销,因此性能远远低于 异步 MySQL实例
1、多点写入功能: 分别向两个节点执行 建库,建表, 插入数据操作,验证多点写入,观察数据是否同步。
2、下线其中一个节点 不能是发起人 节点 比如 192.168.217.25 下线,停止服务
当前数据 插入20条数据 插入10条数据
2286 2306 2316
剩余节点继续添加数据, 拉开距离。
此时离线数据库重启服务,重新上线 , 启动服务即可, 观察 是否能追上 其他人的数据。
3、 故意 让 发起人节点 离线。 剩余服务器继续插入数据,拉开距离
如要让 发起人 重新上线。
修改 发起人配置文件中的 wsrep_cluster_address='gcomm://192.168.217.25' ##再回来时,必须有一个以上的参考节点,用于 同步增量数据。
明确指示重新加入时,向谁同步数据,原先发起集群时,该主机 此处 为 “空 ”
4、扩展集群,再次 加入一个全新的节点, 2个变 3 个。 步骤参见 上述第二个 流程
1-安装各个组件 mysql-wsrep-* galera组件 rsync perconna xtrabackup
2-修改配置文件 特别注意 gcomm:// 填写在线的某个节点,或者 某几个节点。
3-依据配置文件的 路径(数据库的 还有 二进制 日志 ),配相关权限
4- 不需要初始化 数据库 , 直接启动服务
5- 自动拷贝 全量 备份 ,并 自动 建立 同步关系