高级运维工程师教你银河麒麟V10SP1部署Nginx实现clickhouse数据库双活高可用实战
前言说明
高可用(High Availability,简称 HA)是指系统经过专门的设计,从而减少停工时间,保持其服务的高度可用性。
高可用的主要目标是尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,提高系统和应用的可用性。
例如,在一个网站的架构中,如果只有一个服务器来处理所有的请求,那么当这个服务器出现故障时,网站将无法正常提供服务。为了避免这种情况,可以采用高可用架构,使用多个服务器来共同承担服务请求。当其中一个服务器出现故障时,其他服务器可以自动接管其工作,从而保证网站的持续可用。
再比如,在数据库系统中,通过使用主从复制、数据备份和故障转移等技术,可以实现数据库的高可用性。当主数据库出现故障时,从数据库可以迅速切换为主数据库,继续提供服务,减少数据丢失和服务中断的风险。
总之,高可用是一种通过冗余和故障转移等技术手段,来提高系统和服务可靠性和可用性的设计理念和方法。
笔者要实现2个clickhouse数据库服务器双活,A挂机,自动跳转到B接管,A活了,B再自动切回A!实现永不宕机双活!
服务器IP | 端口 | 角色 |
---|---|---|
192.168.3.101 | 5000 | nginx代理服务器 |
192.168.3.44 | 8123 | 主clickhouse服务器 |
192.168.3.46 | 8123 | 备clickhouse服务器 |
注意下方是在192.168.3.101服务器上进行操作安装!
一、核实操作系统信息
uname -a
Linux localhost.localdomain 4.19.90-23.8.v2101.ky10.x86_64 #1 SMP Mon May 17 17:08:34 CST 2021 x86_64 x86_64 x86_64 GNU/Linux
cat /proc/version
Linux version 4.19.90-23.8.v2101.ky10.x86_64 (KYLINSOFT@localhost.localdomain) (gcc version 7.3.0 (GCC)) #1 SMP Mon May 17 17:08:34 CST 2021
cat /etc/os-release
NAME="Kylin Linux Advanced Server"
VERSION="V10 (Tercel)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Tercel)"
ANSI_COLOR="0;31"
二、安装nginx2.21版本方法(nginx1.91版本之后支持tcp协议转发)
小伙伴们如果需要nginx2.21版本的离线安装包可以去我的CSDN下载资源直接下载即可
1、仍然要更新这个perl插件
rpm -e --nodeps perl-devel-5.28.0-434.ky10.x86_64 # 卸载命令
rpm -e --nodeps perl-libs-5.28.0-434.ky10.x86_64 # 卸载命令
rpm -e --nodeps perl-5.28.0-434.ky10.x86_64 # 卸载命令
删除干净之后,按顺序安装离线安装包
cd /home/perl_intall
rpm -ivh perl-libs-5.28.3-3.p01.ky10.x86_64.rpm --nodeps --force
rpm -ivh perl-devel-5.28.3-3.p01.ky10.x86_64.rpm --nodeps --force
rpm -ivh perl-5.28.3-3.p01.ky10.x86_64.rpm --nodeps --force
2、按顺序安装包
rpm -ivh mailcap-2.1.49-3.ky10.noarch.rpm --nodeps --force
rpm -ivh nginx-filesystem-1.21.5-1.p01.ky10.noarch.rpm --nodeps --force
rpm -ivh gd-2.3.0-4.ky10.x86_64.rpm --nodeps --force
rpm -ivh gperftools-libs-2.7-7.ky10.x86_64.rpm --nodeps --force
rpm -ivh nginx-filesystem-1.21.5-1.p01.ky10.noarch.rpm --nodeps --force
rpm -ivh nginx-mod-http-image-filter-1.21.5-1.p01.ky10.x86_64.rpm --nodeps --force
rpm -ivh nginx-mod-http-perl-1.21.5-1.p01.ky10.x86_64.rpm --nodeps --force
rpm -ivh nginx-mod-http-xslt-filter-1.21.5-1.p01.ky10.x86_64.rpm --nodeps --force
rpm -ivh nginx-mod-mail-1.21.5-1.p01.ky10.x86_64.rpm --nodeps --force
rpm -ivh nginx-all-modules-1.21.5-1.p01.ky10.noarch.rpm --nodeps --force
rpm -ivh nginx-1.21.5-1.p01.ky10.x86_64.rpm --nodeps --force
rpm -ivh nginx-mod-stream-1.21.5-1.p01.ky10.x86_64.rpm --nodeps --force
3、验证安装是否成功
systemctl start nginx.service #启动服务
nginx -version
/var/log/nginx #日志位置
4、1.21版本配置文件demo
/etc/nginx/nginx.conf
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
stream {
upstream cloudsocket {
server 192.168.3.44:8123 ; #主clickhouse库地址
server 192.168.3.46:8123 backup ; #备clickhouse库地址
}
server {
listen 5000;#数据库服务器监听端口
proxy_connect_timeout 10s;
proxy_timeout 300s;#设置客户端和代理服务之间的超时时间,如果5分钟内没操作将自动断开。
proxy_pass cloudsocket;
}
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2;
# listen [::]:443 ssl http2;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers PROFILE=SYSTEM;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}
三、连接测试高可
分别测试如下表格端口IP!应用配置是代理服务器IP端口192.168.3.101 :5000
服务器IP | 端口 | 角色 |
---|---|---|
192.168.3.101 | 5000 | nginx代理服务器 |
192.168.3.44 | 8123 | 主clickhouse服务器 |
192.168.3.46 | 8123 | 备clickhouse服务器 |
下载连接工具地址:
https://dbeaver.io/download/
打开SQL工具
四、情节模拟
服务器IP | 端口 | 服务器 |
---|---|---|
192.168.3.101 | 5000 | nginx代理服务器 |
192.168.3.44 | 8123 | 主clickhouse服务器 |
192.168.3.46 | 8123 | 备clickhouse服务器 |
情景 | 操作 | 预期结果 |
---|---|---|
1 | 192.168.3.44 服务器关机模拟宕机 | 192.168.3.101 :5000正常访问,自动转向192.168.3.46:8123 |
2 | 192.168.3.44 服务器模拟主库恢复 | 192.168.3.101 :5000正常访问,自动转向192.168.3.44:8123 |
主库宕机备库自动接管业务正常,主库恢复,自动转发跳回主库,永不宕机!双活高可用HA实现!
笔者简介
国内某一线知名软件公司企业认证在职员工:任JAVA高级研发工程师,大数据领域专家,数据库领域专家兼任高级DBA!10年软件开发经验!现任国内某大型软件公司大数据研发工程师、MySQL数据库DBA,软件架构师。直接参与设计国家级亿级别大数据项目!并维护真实企业级生产数据库300余个!紧急处理数据库生产事故上百起,挽回数据丢失所造成的灾难损失不计其数!并为某国家级大数据系统的技术方案(国家知识产权局颁布)专利权的第一专利发明人!