数据库
方案一:三节点支持,两个运行节点加一个仲裁节点
节点组成:
|---------------|---------------|---------------|
| 数据库节点(Node1) | (数据库节点Node2) | 仲裁节点(Node3) |
| 192.168.10.12 | 192.168.10.13 | 192.168.10.18 |
1.增添支持wsrep的MariaDB(全机)
vim /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = https://archive.mariadb.org/mariadb-10.5/yum/centos7-amd64/
gpgkey=https://archive.mariadb.org/PublicKey
gpgcheck=1
yum clean all && yum makecache
yum install -y MariaDB-server MariaDB-client galera-4
2.确认wsrep支持(全机)
mysqld --verbose --help 2>/dev/null | grep -i wsrep
可以看到很多wsrep*组件和参数

3.确认数据库初始化(全机)
ls /var/lib/mysql

4.配置Galera(Node1首节点)
vim /etc/my.cnf.d/server.cnf
---------------------------------------------------------------
[mysqld]
bind-address=0.0.0.0
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
# Galera
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_name=galera_cluster
wsrep_cluster_address=gcomm:// #初始创建集群这里为空
wsrep_node_name=node1
wsrep_node_address=192.168.10.12
wsrep_sst_method=rsync
-----------------------------------------------------------
5.启动集群(Node1)
在Node1上初始化集群:
systemctl set-environment MYSQLD_OPTS="--wsrep-new-cluster"
systemctl start mariadb
systemctl unset-environment MYSQLD_OPTS
6.配置galera(Node2)
vim /etc/my.cnf.d/mariadb-server.cnf
--------------------------------------------------------------
[mysqld]
bind-address=0.0.0.0
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
# Galera
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_name=galera_cluster
#这里是关键:写已有节点IP(Node1)
wsrep_cluster_address=gcomm://192.168.10.12
wsrep_node_name=node2
wsrep_node_address=192.168.10.13
wsrep_sst_method=rsync
-------------------------------------------------------------------
Node2 直接使用 systemctl start mariadb 加入集群
6.2 任意节点查看集群状态
mysql -uroot -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 2 |
+--------------------+-------+
mysql -uroot -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
+----------------------+---------+
| Variable_name | Value |
+----------------------+---------+
| wsrep_cluster_status | Primary |
+----------------------+---------+
7.部署仲裁器gardb(Node3)
7.1 安装garbd:
yum install -y galera #注意! node3 必须到和 node1/node2 一样的 MariaDB+ galera,否则 garbd 加入就会把集群打散。
7.2 创建 systemd service /etc/systemd/system/garbd.service
[Unit]
Description=Galera Arbitrator Daemon
After=network-online.target
[Service]
Type=simple
User=root
WorkingDirectory=/var/lib/garbd
ExecStart=/usr/bin/garbd --address "gcomm://192.168.10.12:4567,192.168.10.13:4567" --group "galera_cluster" --name "garbd1" --option "gmcast.listen_addr=tcp://192.168.10.18:4567"
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
出来后创建目录 mkdir -p /var/lib/garbd
启动:
systemctl daemon-reload
systemctl enable --now garbd
Nginx
采用LVS+Keepalived做负载均衡以及高可用
|----------------|---------------|---------------|---------------|
| VIP(nginx) | Node1(nginx) | Node2(nginx) | Node3(tomcat) |
| 192.168.10.100 | 192.168.10.12 | 192.168.10.13 | 192.168.10.18 |
环境配置:
yum install -y nginx keepalived
keepalived配置(Node1)
vim /etc/keepalived/keepalived.conf
----------------------------------------------------------------------
global_defs {
router_id LVS_NODE1
vrrp_skip_check_adv_addr
vrrp_garp_interval 1
vrrp_gna_interval 1
}
vrrp_script chk_nginx {
script "/usr/local/bin/check_nginx.sh"
interval 2
weight -30
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100/24
}
track_script {
chk_nginx
}
}
#LVS配置
virtual_server 192.168.10.100 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.10.12 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.10.13 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
-------------------------------------------------------------------
keepalived配置(Node2)
global_defs {
router_id LVS_NODE2
vrrp_skip_check_adv_addr
vrrp_garp_interval 1
vrrp_gna_interval 1
}
vrrp_script chk_nginx {
script "/usr/local/bin/check_nginx.sh"
interval 2
weight -30
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100/24
}
track_script {
chk_nginx
}
}
virtual_server 192.168.10.100 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.10.12 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.10.13 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
检测脚本 /usr/local/bin/chk_nginx.sh
#!/bin/bash
curl -s http://127.0.0.1:80 > /dev/null
if [ $? -ne 0 ]; then
exit 1
fi
赋权 chmod +x /usr/local/bin/chk_nginx.sh
启动:
systemctl enable keepalived --now