安装 nginx与keepalived
- 首先安装 openssl、perl pcre 、 zlib 库和模块
openssl 库
wget https://www.openssl.org/source/openssl-1.1.1-pre8.tar.gz tar -zxvf openssl-1.1.1-pre8.tar.gz cd openssl-1.1.1-pre8 ./config && make && make install
然后再设置一下软连接
ln -sf /usr/local/lib64/libssl.so.1.1 /lib64/libssl.so.1.1 ln -sf /usr/local/lib64/libcrypto.so.1.1 /lib64/libcrypto.so.1.1
perl pcre 模块
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz tar -zxvf pcre-8.42.tar.gz cd pcre-8.42 ./configure && make && make install
zlib 库
wget http://www.zlib.net/fossils/zlib-1.2.11.tar.gz tar -zxvf zlib-1.2.11.tar.gz cd zlib-1.2.11 ./configure && make && make install
- 创建系统用户
groupadd -r nginx useradd -r -g nginx nginx passwd nginx // 输入 nginx 作为密码
- 安装 nginx 软件
wget http://nginx.org/download/nginx-1.15.7.tar.gz tar -zxvf nginx-1.15.7.tar.gz cd nginx-1.15.7 ./configure \ --with-http_realip_module \ --with-http_addition_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_stub_status_module \ --with-http_auth_request_module \ --with-threads \ --with-stream_ssl_module \ --with-http_slice_module \ --with-file-aio \ --with-http_v2_module \ --with-http_ssl_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-stream \ --with-pcre=/root/nginx_keepalived/nginx/pcre-8.42 \ --with-zlib=/root/nginx_keepalived/nginx/zlib-1.2.11 \ --with-openssl=/root/nginx_keepalived/nginx/openssl-1.1.1-pre8 make -j 4 && make install
⚠️注意:
--with-pcre、--with-zlib和 --with-openssl 三个参数,需要填写刚才编译安装的完整地址,避免出现错误
- 配置 service 服务
新建一个脚本文件 /etc/init.d/nginx,内容如下
#! /bin/bash # chkconfig: - 85 15 PATH=/usr/local/nginx DESC="nginx daemon" NAME=nginx DAEMON=$PATH/sbin/$NAME CONFIGFILE=$PATH/conf/$NAME.conf PIDFILE=$PATH/logs/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME set -e [ -x "$DAEMON" ] || exit 0 do_start() { $DAEMON -c $CONFIGFILE || echo -n "nginx already running" } do_stop() { $DAEMON -s stop || echo -n "nginx not running" } do_reload() { $DAEMON -s reload || echo -n "nginx can't reload" } case "$1" in start) echo -n "Starting $DESC: $NAME" do_start echo "." ;; stop) echo -n "Stopping $DESC: $NAME" do_stop echo "." ;; reload|graceful) echo -n "Reloading $DESC configuration..." do_reload echo "." ;; restart) echo -n "Restarting $DESC: $NAME" do_stop do_start echo "." ;; *) echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2 exit 3 ;; esac exit 0
*****************
添加执行权限
chmod a+x /etc/init.d/nginx
增加 nginx 服务
chkconfig --add nginx
如果要设置开机自启动,则执行以下命令
chkconfig nginx on
- 启动、停止、重启和重新加载 nginx服务和配置文件的命令
启动 nginx
systemctl start nginx.service
停止nginx服务
systemctl stop nginx.service
重启nginx服务
systemctl restart nginx.service
重新读取nginx配置(这个最常用, 不用停止nginx服务就能使修改的配置生效)
systemctl reload nginx.service
在 nginx 配置文件 -- /usr/local/nginx/conf/nginx.conf 末尾增加以下内容
stream { upstream cloudsocket { hash $remote_addr consistent; server 192.168.10.210:3309 weight=5 max_fails=3 fail_timeout=30s; } server { listen 3308;#数据库服务器监听端口 proxy_connect_timeout 10s; proxy_timeout 300s;#设置客户端和代理服务之间的超时时间,如果5分钟内没操作将自动断开。 proxy_pass cloudsocket; } }
⚠️注意:
配置中的 192.168.10.210:3309,是我机器的IP 地址和 mysql 的服务端口;
3308 是未来 nginx 启动后,对外提供的服务端口
安装 keepalived 软件
wget https://www.keepalived.org/software/keepalived-2.0.20.tar.gz tar -zxvf keepalived-2.0.20.tar.gz cd keepalived-2.0.20/ export LIBRARY_PATH=/usr/local/lib64 ./configure make -j 4 && make install
在编译 keepalived 时,如果没有正确配置 openssl 的so 动态库,可能会出现如下错误信息
keepalived-2.0.20/keepalived/check/check_ssl.c:81:对‘OPENSSL_init_ssl’未定义的引用 check/libcheck.a(check_ssl.o):在函数‘init_ssl_ctx’中: check_ssl.c:(.text+0x284):对‘OPENSSL_init_ssl’未定义的引用 check_ssl.c:(.text+0x29a):对‘TLS_method’未定义的引用 collect2: 错误:ld 返回 1 make[2]: *** [keepalived] 错误 1 make[2]: 离开目录“/root/nginx_keepalived/keepalived-2.0.20/keepalived” make[1]: *** [all-recursive] 错误 1 make[1]: 离开目录“/root/nginx_keepalived/keepalived-2.0.20/keepalived” make: *** [all-recursive] 错误 1
此时,只要找到 openssl 的so 安装目录,一般就是 /usr/local/lib64,然后执行以下命令,就可以解决
export LIBRARY_PATH=/usr/local/lib64
为系统增加 keepalived 服务
cp keepalived/etc/init.d/keepalived /etc/init.d/ chmod a+x /etc/init.d/keepalived chkconfig --add keepalived
设置 keepalived 开启自启动
chkconfig keepalived on
设置 keepalived 的启动参数,打开 /usr/local/etc/sysconfig/keepalived 文件,修改里面的内容
KEEPALIVED_OPTIONS="-D -f /usr/local/etc/keepalived/keepalived.conf"
为 keepalived 增加一个 nginx 的检测脚本 /usr/local/etc/keepalived/nginx_check.sh
#!/bin/bash set -x A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ];then echo `date`': nginx is not healthy, try to killall keepalived' >> /usr/local/etc/keepalived/keepalived.log killall keepalived fi
##
设置 keepalived 的服务,打开 /usr/local/etc/keepalived/keepalived.conf 文件
为主的 keepalived 设置
! Configuration File for keepalived global_defs { router_id lvs-01 } vrrp_script chk_nginx { script "/usr/local/etc/keepalived/nginx_check.sh" interval 3 weight -20 } vrrp_instance VI_1 { state MASTER interface eth1 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } ## 将 track_script 块加入 instance 配置块 track_script { chk_nginx ## 执行 Nginx 监控的服务 } virtual_ipaddress { 10.211.55.23 } }
为备的 keepalived 设置
! Configuration File for keepalived global_defs { router_id lvs-02 } vrrp_script chk_nginx { script "/usr/local/etc/keepalived/nginx_check.sh" interval 3 weight -20 } vrrp_instance VI_1 { state MASTER interface eth1 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } ## 将 track_script 块加入 instance 配置块 track_script { chk_nginx ## 执行 Nginx 监控的服务 } virtual_ipaddress { 10.211.55.23 } }
主和备 之间的差距
router_id *** 设置的值不一样 priority *** 权重不同, 主的权重更高 interface *** 修改为当前机器的具体网卡名字
启动 keepalived 服务
systemctl start keepalived.service
停止 keepalived 服务
systemctl stop keepalived.service
查看 keepalived 设置的虚拟 IP 地址是否生效,可以通过以下命令查看
ip a
参考博客:
https://www.cnblogs.com/taiyonghai/p/6728707.html
https://www.cnblogs.com/heruiguo/p/8962243.html
这个博客介绍了如何注册service 服务
https://www.cnblogs.com/yanqingxu/p/7927830.html
以下博客介绍了 keepalived 的部署和设置
https://www.cnblogs.com/cxbhakim/p/9068833.html
https://www.cnblogs.com/zyxnhr/p/11167401.html