高可用部署
高可用部署方案介绍
云联壹云 平台高可用至少需要3个及3个以上的节点组成高可用环境;高可用环境将会自动部署MINIO作为共享存储,MINIO默认挂载在其中一个节点,当该节点宕机后,将会自动挂载到其他的节点上。
3节点版
使用3个节点部署高可用环境时,需要在2个节点上部署数据库高可用以及 云联壹云 平台高可用,
该方案只能保证部署高可用的2个节点中的其中一个宕机而不影响平台的使用。
组网图
部署步骤
- 准备2个VIP,其中1个用于数据库,另1个用于平台。
- 分别在节点1、节点2上部署数据库高可用,步骤可参考附录-高可用数据库部署。
- 在节点1、节点2上安装k8s Controlplane+Controller,并设置HA高可用,其中HA VIP设置为平台VIP;数据库IP为数据库VIP。
- 在节点3上安装k8s Controlplane+Controller,但不启用HA高可用。
注意
默认数据库高可用的Keepalived服务监听网卡为节点本身的网卡(如eth0),但是若部署数据库的节点上安装了Host服务,此时需监听网卡br0,请修改数据库高可用Keepalived的配置文件,将监听网络修改为br0。
4节点版
使用4个节点部署高可用时,可以使用3个节点部署 云联壹云 平台高可用,另1个节点部署数据库。
该方案可以保证部署高可用的3个节点任意节点宕机,而不影响平台的正常使用。但是如果数据库节点宕机,则平台也不可用。
组网图
部署步骤
- 准备1个VIP,作为平台的VIP。
- 首先在1个节点上单独安装数据库。步骤可参考安装部署Mariadb数据库。
- 在另外3个节点上安装k8s Controlplane+Controller,并设置HA高可用,其中HA VIP设置为平台VIP;数据库IP为数据库节点的IP地址。
5节点版
使用5个节点部署高可用时,可以使用3个节点部署 云联壹云 平台高可用,另外2个节点部署数据库。
该方案可以保证部署 云联壹云 平台高可用的3个节点,任意一个节点可以宕机,以及部署数据库的两个节点中的任意一个节点宕机。该方案的可靠性最强。
组网图
部署步骤
- 准备2个VIP,其中1个用于数据库,另1个用于平台。
- 分别在数据库节点1、数据库节点2上部署数据库高可用,步骤可参考附录-高可用数据库部署。
- 在另外三台节点上安装k8s Controlplane+Controller,并设置HA高可用,其中HA VIP设置为平台VIP;数据库IP为数据库VIP。
典型配置举例
下面以4节点的方案介绍下如何在平台部署高可用环境。
组网图
组网说明
- 三台节点都部署K8S Controlplane以及Controller&host组成Kubernetes高可用集群和 云联壹云 高可用集群。
- 数据库节点单独部署,步骤可参考安装部署Mariadb数据库。
- 所有节点可以访问外网,如节点不能访问外网,请联系技术人员获取帮助。
测试节点举例
角色 | IP地址 | 说明 |
---|---|---|
VIP | 10.127.190.100 | 与节点处于同一网段的闲置IP,供外部访问 |
节点1-控制节点 | 10.127.190.251 | First Node节点,K8S Controlplane节点个数满足1、3、5即可 |
节点2-控制节点 | 10.127.190.245 | 非First Node节点(K8s Controlplane+Onecloud Controller&host) |
节点3-控制节点 | 10.127.190.229 | 非First Node节点(K8s Controlplane+Onecloud Controller&host) |
数据库 | 10.127.190.254 | 数据库节点 |
节点4-计算节点 | …… | 计算节点 (K8s Node + OneCloud Host) |
注意
如果使用 云联壹云 平台上的虚拟机搭建 云联壹云 高可用环境,需要注意以下内容:
在 云联壹云 上的虚拟机默认启用源/目标检查,所以VIP无法与其它节点连通,可以在web控制台关闭虚拟机的源/目标检查,或在First Node节点上通过climc命令关闭源/目标检查:
$ climc server-modify-src-check --src-mac-check off 。
请将VIP添加到预留IP中。
安装部署Mariadb数据库
安装启用Mariadb
$ MYSQL_PASSWD='your-sql-passwd'
# 安装 mariadb
$ yum install -y epel-release mariadb-server
$ systemctl enable --now mariadb
配置Mariadb
# 设置数据库root用户密码
$ mysqladmin -u root password "$MYSQL_PASSWD"
$ cat <<EOF >/etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
# skip domain name resolve
skip_name_resolve #取消域名解析
# auto delete binlog older than 30 days
expire_logs_days=30 #设置binlog的超时时间为30天,超过30天的binglog自动删除
innodb_file_per_table=ON
max_connections = 300
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
EOF
# 开启 Mariadb 的远程访问
$ mysql -uroot -p$MYSQL_PASSWD \
-e "GRANT ALL ON *.* to 'root'@'%' IDENTIFIED BY '$MYSQL_PASSWD' with grant option; FLUSH PRIVILEGES;"
重启服务
$ systemctl restart mariadb
控制节点部署
3.4版本后,控制节点的高可用部署仅需要在First Node节点上配置即可。
当在已安装CentOS的服务器上安装产品,需要确保服务器已已关闭selinux,且重启过服务器。若selinux未关闭,请按下面的步骤关闭selinux,并重启服务器。
# 关闭 selinux
$ setenforce 0
$ sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
配置ssh免密登录
该步骤用于配置First Node节点免密登录其他控制节点。
# 生成First Node节点的ssh 秘钥 (如果已有 ~/.ssh/id_rsa.pub 则跳过此步骤)
$ ssh-keygen
# 将生成的 ~/.ssh/id_rsa.pub公钥拷贝到其他控制节点
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.127.190.245
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.127.190.229
# 验证在First Node节点上可以免密获取到其他控制节点的主机名
$ ssh root@10.127.190.245 "hostname"
$ ssh root@10.127.190.229 "hostname"
安装部署
该章节重点介绍First Node节点执行install脚本后的配置内容,前面挂载安装包以及执行脚本的过程可参考安装-安装方式介绍。
在配置页面,勾选“High Availability”。
在High Availability Config中配置以下参数。
- High Availability VIP:本例为10.127.190.100;
- Using local registry:当节点不能连接外网时,必须勾选该项;建议不勾选该项。
- High Availability Port:默认6443;
- Controlplane IPs, seperated with comma or space:另外两个控制节点的IP地址,本例为“10.127.190.245 10.127.190.229”
- Enable Controlplane Host Agent:启用后,另外两个控制节点也可以作为计算节点。本例勾选该项。
取消勾选“Install MySQL on Current host”,在Connect MySql中配置以下参数。
- MySQL Host IP:数据库的IP地址或高可用数据库的VIP地址,本例为10.127.190.254。
- MySQL Port Number:默认3306;
- MySQL Username:数据库用户,默认为root用户,本例为root;
- MySQL Password:数据库用户对应的密码,本例为123456;
- 开始安装,安装过程较长,请耐心等待,直到安装完成。
说明
- 当服务器当前内核(
uname -r
用于查看内核版本)与产品要求“3.10.0-1062.4.3.el7.yn20191203.x86_64”不一致时,产品安装完成后将会自动重启。 - 当服务器当前内核(
uname -r
用于查看内核版本)与产品要求“3.10.0-1062.4.3.el7.yn20191203.x86_64”一致时,则产品安装完成后不会自动重启。
配置使用kubectl命令
First Node节点默认支持使用kubectl命令,但是高可用环境中非First Node的控制节点无法直接使用kubectl命令,请通过以下命令配置:
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
计算节点部署
所有计算节点的配置相同。
配置项
- First Node:不勾选;
- Role of K8S:K8s Node ;
- Roles:Host;
- First Node IP:VIP地址,不是First Node节点的地址;
- First Node Port:默认6443;
- Join Token:为在First Node节点上使用
ocadm token create
获取的信息;
安装过程较长,请耐心等待,直到安装完成。
说明
- 当服务器当前内核(
uname -r
用于查看内核版本)与产品要求“3.10.0-1062.4.3.el7.yn20191203.x86_64”不一致时,产品安装完成后将会自动重启。 - 当服务器当前内核(
uname -r
用于查看内核版本)与产品要求“3.10.0-1062.4.3.el7.yn20191203.x86_64”一致时,则产品安装完成后不会自动重启。
访问高可用环境
在浏览器中输入https://VIP访问 云联壹云 高可用环境,进行初始化引导操作。
高可用环境升级
支持通过命令行升级。
管理员通过ssh工具以root用户远程登录到First Node节点。
将用户切换成非root用户,执行升级操作不可以用root用户,挂载高版本安装包并进行升级操作。
# 安装过程会增加yunion用户 $ su yunion # 将高版本的DVD安装包挂载到mnt目录 $ sudo mount -o loop Yunion-x86_64-DVD-3.x-x.iso /mnt # 切换到/mnt/yunion目录 $ cd /mnt/yunion $ ./upgrade.sh
附录
高可用数据库配置
如需要数据库高可用,则需要在现有组网图中再添加一个节点与原数据库节点互为主备,并提供与数据库节点同一网段的VIP供系统访问。数据库的高可用部署与 云联壹云 的高可用无关,需要用户手动部署数据库高可用。
请按照以下步骤分别从主节点和备节点上进行配置。
主节点配置
安装启用mariadb
$ yum install -y mariadb-server
$ systemctl enable --now mariadb
安全配置向导
$ mysql_secure_installation
... ...
Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
... ...
Remove anonymous users? [Y/n] y
... Success!
... ...
Disallow root login remotely? [Y/n] y
... Success!
... ...
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success! ... ...
Reload privilege tables now? [Y/n] y
... Success!
... ...
修改mariadb配置文件
$ cat <<EOF > /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
# skip domain name resolve
skip_name_resolve #取消域名解析
# auto delete binlog older than 30 days
expire_logs_days=30 #设置binlog的超时时间为30天,超过30天的binglog自动删除
innodb_file_per_table=ON
max_connections = 300
server-id = 1
auto_increment_offset = 1
auto_increment_increment = 2
log-bin = mysql-bin
binlog-format = row
log-slave-updates
max_binlog_size = 1G
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
max_connections = 1000
max_connect_errors = 0
max_allowed_packet = 1G
slave-net-timeout=10
master-retry-count=0
slow_query_log = 1
long_query_time = 2
slow_query_log_file = /var/log/mariadb/slow-query.log
[mysql]
no-auto-rehash
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
EOF
重启服务
$ systemctl restart mariadb
备节点部署
安装启用mariadb
$ yum install -y mariadb-server
$ systemctl enable --now mariadb
安全配置向导
$ mysql_secure_installation
... ...
Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
... ...
Remove anonymous users? [Y/n] y
... Success!
... ...
Disallow root login remotely? [Y/n] y
... Success!
... ...
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success! ... ...
Reload privilege tables now? [Y/n] y
... Success!
... ...
修改mariadb配置文件
$ cat <<EOF > /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
# skip domain name resolve
skip_name_resolve
# auto delete binlog older than 30 days
expire_logs_days=30
innodb_file_per_table=ON
max_connections = 300
server-id = 2
auto_increment_offset = 2
auto_increment_increment = 2
log-bin = mysql-bin
binlog-format = row
log-slave-updates
max_binlog_size = 1G
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
max_connections = 1000
max_connect_errors = 0
max_allowed_packet = 1G
slave-net-timeout=10
master-retry-count=0
slow_query_log = 1
long_query_time = 2
slow_query_log_file = /var/log/mariadb/slow-query.log
[mysql]
no-auto-rehash
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
EOF
重启服务
$ systemctl restart mariadb
将主节点数据库导入备节点
主节点配置
在主节点导出数据库并将其导入备节点。
# 此密码为上面设置的 Mariadb root 密码,为了方便,只读账号也使用此密码,该密码为后面使用安装包部署时的数据库密码
$ MYSQL_PASSWD='123456'
# 开启 Mariadb 的远程访问
$ mysql -uroot -p$MYSQL_PASSWD -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '$MYSQL_PASSWD' WITH GRANT OPTION;FLUSH PRIVILEGES"
# 创建只读账号
$ mysql -u root -p$MYSQL_PASSWD -e "GRANT REPLICATION SLAVE ON *.* TO repl@'%' IDENTIFIED BY '$MYSQL_PASSWD';FLUSH PRIVILEGES"
# 示例是全新安装的 Mariadb ,还没有使用。如果是正在使用的数据库做主主复制,需要锁表后再导出数据
$ mysql -uroot -p$MYSQL_PASSWD -e "SHOW PROCESSLIST"
+----+------+-----------+------+---------+------+-------+------------------+----------+
| Id | User | Host | db | Command | Time | State | Info | Progress |
+----+------+-----------+------+---------+------+-------+------------------+----------+
| 4 | root | localhost | NULL | Query | 0 | NULL | SHOW PROCESSLIST | 0.000 |
+----+------+-----------+------+---------+------+-------+------------------+----------+
# 记录binlog日志文件名和position
$ mysql -u root -p$MYSQL_PASSWD -e "SHOW MASTER STATUS\G"
*************************** row ***************************File: mysql-bin.000001Position: 712
Binlog_Do_DB:
Binlog_Ignore_DB:
# 导出全部数据
$ mysqldump --all-databases -p$MYSQL_PASSWD > alldb.db
# 拷贝 alldb.db 到备节点,db2为备节点名称也可以改为备节点的IP地址,如10.127.10.218
$ scp alldb.db db2:/root/
备节点配置
导入主节点导出的数据库
# 此密码为上面设置的 Mariadb root 密码
$ MYSQL_PASSWD='123456'
# 导入主节点导出的数据
$ mysql -u root -p$MYSQL_PASSWD < alldb.db
# 重载权限
$ mysql -u root -p$MYSQL_PASSWD -e "FLUSH PRIVILEGES"
# 记录binlog日志文件名和position
$ mysql -u root -p$MYSQL_PASSWD -e "SHOW MASTER STATUS\G"
*************************** row ***************************File: mysql-bin.000001Position: 506913
Binlog_Do_DB:
Binlog_Ignore_DB:
主主复制
主节点配置
# 修改MASTER_HOST为备节点IP(例如:10.127.10.218),修改MASTER_LOG_FILE和MASTER_LOG_POS为上面备节点记录的信息,
$ mysql -u root -p$MYSQL_PASSWD -e "CHANGE MASTER TO MASTER_HOST='10.127.10.218',MASTER_USER='repl',MASTER_PASSWORD='$MYSQL_PASSWD',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=506913,MASTER_CONNECT_RETRY=2;START SLAVE"
备节点配置
# 修改MASTER_HOST为主节点IP(10.127.10.211),修改MASTER_LOG_FILE和MASTER_LOG_POS为上面主节点记录的信息
$ mysql -u root -p$MYSQL_PASSWD -e "CHANGE MASTER TO MASTER_HOST='10.127.10.211',MASTER_USER='repl',MASTER_PASSWORD='$MYSQL_PASSWD',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=712,MASTER_CONNECT_RETRY=2;START SLAVE"
验证同步状态
在两个节点上都执行以下命令。
$ mysql -u root -p$MYSQL_PASSWD -e "SHOW SLAVE STATUS\G" | grep RunningSlave_IO_Running: Yes Slave_SQL_Running: Yes
部署配置Keepalived
Keepalived用于提供数据库VIP访问以及通过其自带的监控服务来实现节点故障后自动切换等。当数据库在控制节点上安装时,则省略该步骤。
设置环境变量
两个节点都需要配置。
# keepalived vip 地址
$ export DB_VIP=10.127.10.50
# keepalived auth toke
$ export DBHA_KA_AUTH=test
# keepalived network interface,请根据实际情况设置网卡名称,以eth0为例
$ export DB_NETIF=eth0
设置sysctl选项
两个节点都需要配置。
$ cat <<EOF >>/etc/sysctl.conf
net.ipv4.ip_forward = 1 #启用IP转发功能
net.ipv4.ip_nonlocal_bind = 1 #允许进程绑定到非本地地址
EOF
$ sysctl -p
安装Keepalived&nc
两个节点都需要配置。
$ yum install -y keepalived nc
设置Keepalived配置文件
主节点配置
$ cat <<EOF >/etc/keepalived/keepalived.conf
global_defs {
router_id onecloud
}
vrrp_script chk_mysql {
script "/etc/keepalived/chk_mysql"
interval 1# 脚本执行间隔
}
vrrp_instance VI_1 {
state MASTER #定义为master
interface $DB_NETIF#承载漂移ip的网卡
virtual_router_id 99#定义一个热备组,可以认为这是99号热备,主备的属于同一个热备组
priority 100# 主服务器优先级要比备服务器高
advert_int 1#1秒互相通告一次,检查对方死了没。
authentication {auth_type PASS#认证类型auth_pass $DBHA_KA_AUTH#认证密码
}
track_script {chk_mysql
}
virtual_ipaddress {$DB_VIP
}
}
EOF
# 创建监控脚本文件
$ cat <<EOF > /etc/keepalived/chk_mysql
#!/bin/bash
echo | nc 127.0.0.1 3306 &>/dev/null
EOF
# 更改脚本文件权限
$ chmod +x /etc/keepalived/chk_mysql
# 启动keepalived
$ systemctl enable --now keepalived
备节点配置
$ cat <<EOF >/etc/keepalived/keepalived.conf
global_defs {
router_id onecloud
}
vrrp_script chk_mysql {
script "/etc/keepalived/chk_mysql"
interval 1# 脚本执行间隔
}
vrrp_instance VI_1 {
state BACKUP#定义为backup节点
interface $DB_NETIF#承载漂移ip的网卡
virtual_router_id 99#定义一个热备组,可以认为这是99号热备,主备的属于同一个热备组
priority 90 # 主服务器优先级要比备服务器高
advert_int 1#1秒互相通告一次,检查对方死了没。
authentication {auth_type PASS #认证类型auth_pass $DBHA_KA_AUTH#认证密码
}
track_script {chk_mysql
}
virtual_ipaddress {$DB_VIP
}
}
EOF
# 创建监控脚本文件
$ cat <<EOF > /etc/keepalived/chk_mysql
#!/bin/bash
echo | nc 127.0.0.1 3306 &>/dev/null
EOF
# 更改脚本文件权限
$ chmod +x /etc/keepalived/chk_mysql
# 启动keepalived
$ systemctl enable --now keepalived
验证Keepalived服务
分别在主备节点上查看监控网卡信息,可尝试将主节点上mariadb或Keepalived服务禁用或关机,查看主节点的VIP是否漂移到备节点。
# 查看节点的ip信息
$ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:22:50:dd:51:59 brd ff:ff:ff:ff:ff:ff
inet 10.127.10.211/24 brd 10.127.10.255 scope global dynamic eth0
valid_lft 100661107sec preferred_lft 100661107sec
inet 10.127.10.50/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::222:50ff:fedd:5159/64 scope link
valid_lft forever preferred_lft forever